Задача [AS34]: Печатное представление формы

Формулировка проблемы: текущая реализация печатного представления (на момент 62-й итерации включительно) не отвечает большинству требований, которые предъявляются клиентами, например размер листа бумаги, параметры макета, размеры полей, ориентация листа, а также, применительно к Synergy, наличие полей (максимально возможное количество поддерживаемых компонентов формы), значения в которых должны браться непосредственно из формы, к которой относится данное печатное представление.

Решение:

Для решения озвученной проблемы настройка форматирования печатного представления теперь должна настраиваться в шаблоне, который можно будет создавать и редактировать в текстовом процессоре Libre/OpenOffice. Настроенный же шаблон необходимо будет лишь прикрепить к форме.

Таким образом, система более не должна поддержить печать путем преобразования XML-файлов в PDF (FOP).

Разделим данную задачу на 4 подзадачи.

1. Переход от настроек старого печатного представления к новым

Необходимо исключить из интерфейса конструктора форм все существующие на момент 62-й итерации включительно настройки печатного представления, а именно: две вкладки «Настройки печати» и «Компоненты формы» необходимо заменить единственной новой вкладкой «Шаблон печати».

В рамках данной задачи в данной вкладке необходимо реализовать следующее:

  • стандартный компонент выбора файла с компьютера (кнопка «Выберите файл» и лейбл Файл не выбран / название выбранного файла);

  • кнопка «Скачать шаблон», которая скачивает текущий шаблон с сервера на компьютер;

  • кнопка «Удалить шаблон», которая удаляет выбранный шаблон;

  • в основной рабочей области при этом пусто.

Рисунок 101. Настройки печатного представления формы

Настройки печатного представления формы

2. Особенности нового печатного представления

Примечание: нижеописанные особенности будут присутствовать в рамках 63 итерации, в последующих итерациях возможны изменения либо исправления данных особенностей.

  • Файл шаблона может быть только в формате *.odt, не должен быть создан в Microsoft Office. Создание и редактирование шаблона необходимо осуществлять только в LibreOffice / OpenOffice.[5]

  • Форматирование компонентов, настроенных на форме, в печатном представлении не сохраняется. Таким образом, форматирование печатного представления для каждой формы необходимо настраивать отдельно и с нуля.[6]

  • Нельзя форматировать часть поля, содержащего данные из формы (т.е. у таких полей должно быть только цельное форматирование).[7]

  • Идентификаторы компонентов, вводимые в поле шаблона, должны быть того же регистра, что идентификаторы компонента на форме.

  • Печатное представление не будет локалезависимым. Данные в ней будут в той локали, с которой файл по форме последний раз сохраняли.

  • Если вызывается печать файла по форме с еще несохраненными изменениями, необходимо выдавать браузерное диалоговое окно с предупреждением:

    Сохранить внесенные изменения?

    и кнопками:

    • «Да» - происходит сохранение файла по форме, на печать отправляется последняя версия файла по форме;

    • «Нет» - сохранение не происходит, на печать отправляется последняя сохраненная версия файла по форме;

    • «Отмена» - сохранение не происходит, файл по форме на печать не отправляется.

    Примечание: если данные по форме не были созданы, то, в зависимости от свойств компонента, будет напечатано либо пустое значение, либо останутся значения, которые были введены в качестве идентификатора компонента в поле.

3. Ограничения нового печатного представления

Примечание: нижеописанные ограничения будут присутствовать в рамках 63 итерации, в последующих итерациях возможны изменения либо исправления данных ограничений.

  • Импорт и экспорт формы будет осуществляться без сохранения печатного представления данной формы.

  • Идентификаторы компонентов (поле «Имя компонента») не должны содержать точки (см. подробнее здесь).

4. Поддерживаемые компоненты формы в новом печатном представлении и их особенности / ограничения

Компоненты конструктора форм, которые можно использовать в шаблоне печатного представления:

Компоненты формы Поддерживаются ли в шаблоне

Таблица

не поддерживается (необходимо использовать штатную таблицу редактора)

Страница

не поддерживается (необходимо использовать штатные разрывы страниц редактора)

Неизменяемый текст

не поддерживается (необходимо использовать обычный ввод текста в редакторе)

Однострочное поле

поддерживается

Числовое поле

поддерживается

Многострочный текст

поддерживается

HTD-редактор

поддерживается

Выпадающий список

поддерживается

Дата/время

поддерживается (последнее сохраненное на форме значение)

Выбор вариантов

поддерживается (через запятую и пробел)

Переключатель вариантов

поддерживается

Изображение

не поддерживается (для использования непосредственно изображения необходимо использовать штатную вставку изображений редактора)

Файл

поддерживается (имя файла)

Ссылка

поддерживается (url ссылки)

Объекты Synergy

поддерживается (значение поля)

Номер

поддерживается (значение поля)

Лист подписей

поддерживается нестандартно (см. ниже)

Лист резолюций

поддерживается нестандартно (см. ниже)

Ход выполнения

поддерживается нестандартно (см. ниже)

Ссылка на документ

не поддерживается

Период повторения

не поддерживается

Ссылка на проект/портфель

поддерживается (значение поля)

Ссылка на реестр

поддерживается (значение поля)

Ссылка на адресную книгу

поддерживается (значение поля)

Свойства документа

поддерживается

Чтобы вставить поле данных (на примере LibreOffice), которое будет брать значение непосредственно из формы, необходимо выполнить следующую цепочку действий: «Вставка» -> «Поля» -> «Дополнительно» -> откроется диалоговое окно «Поля». В нем перейти во вкладку «Функции» - подраздел «Тип» -> «Поле ввода» -> нажать кнопку «Вставить» -> откроется окно «Поле ввода». В поле с моргающим курсивом необходимо ввести идентификатор компонента формы и нажать на кнопку «Да». Поле данных автоматически вставится в шаблон.

Таблица:

  • Компоненты, находящиеся внутри статической таблицы на форме, можно использовать в качестве полей и вне таблицы в шаблоне.

  • И наоборот, компоненты, находящиеся вне статической таблицы на форме, в шаблоне можно объединять в произвольную (также статическую) таблицу.

  • Если в печатном представлении необходимо настроить таблицу как на форме, необходимо создать обычную таблицу в редакторе. Название таблицы в шаблоне (при создании таблицы: «Вставить таблицу» -> подраздел «Общие» -> «Имя», при редактировании свойств таблицы: «Свойства таблицы» -> вкладка «Таблица» -> подраздел «Свойства» -> «Название») должен совпадать с идентификатором таблицы на форме.

  • Столбцы статических таблиц могут содержать компоненты в формате:

    «id1»

    где id1 - это поле данных (имя компонента в таблице формы).

  • Таблица, динамическая на форме, в шаблоне может содержать произвольное количество заголовков (шапок), но она обязательно должна содержать последнюю строку со значениями идентификаторов компонентов в формате:

    «dyntable.id1»

    где dyntable - это идентификатор динамической таблицы, а id1 - это поле данных (имя компонента в таблице формы).

    Нельзя использовать идентификаторы компонентов не из данной динамической таблицы. Также нельзя использовать одну и ту же динамическую таблицу формы в шаблоне 2 и более раз.

  • Одна ячейка таблицы может содержать либо только произвольный текст, либо только данные поля из формы. Т.е. нельзя вводить, например:

    произвольный текст + «id1»

    где произвольный текст - это произвольная надпись, а id1 - это поле данных (имя компонента формы).

Для точного воспроизведения компонента «Лист подписей» в шаблоне печатного представления необходимо создать таблицу с именем, соответствующим идентификатору компонента на форме (в примере - m1), и следующим содержимым:

№ п/п Фамилия И.О. Должность Дата Тип подписи Комментарий Подпись

m1.number

m1.full_name

m1.position

m1.date

m1.signature_type

m1.comment

m1.signature

Для точного воспроизведения компонента «Лист согласования» в шаблоне печатного представления необходимо создать таблицу с именем, соответствующим идентификатору компонента на форме (в примере - m2), и следующим содержимым:

№ п/п ФИО согласующего Должность согласующего Дата согласования Результат согласования Комментарий согласующего

m2.number

m2.full_name

m2.position

m2.consent_date

m2.consent_result

m2.consent_comment

Для точного воспроизведения компонента «Лист утверждения» в шаблоне печатного представления необходимо создать таблицу с именем, соответствующим идентификатору компонента на форме (в примере - m3), и следующим содержимым:

№ п/п ФИО утверждающего Должность утверждающего Дата утверждения Результат утверждения Комментарий утверждающего

m3.number

m3.full_name

m3.position

m3.approval_date

m3.approval_result

m3.approval_comment

Для точного воспроизведения компонента «Лист ознакомления» в шаблоне печатного представления необходимо создать таблицу с именем, соответствующим идентификатору компонента на форме (в примере - m4), и следующим содержимым:

№ п/п Фамилия И.О. Должность Дата ознакомления Результат ознакомления

m4.number

m4.full_name

m4.position

m4.acquaintance_date

m4.acquaintance_result

Для точного воспроизведения компонента «Лист резолюций» в шаблоне печатного представления необходимо создать таблицу с именем, соответствующим идентификатору компонента на форме (в примере - m5), и следующим содержимым:

Автор Название Ответственный Исполнители Завершение

m5.author

m5.name

m5.assignee

m5.executors

m5.completion

Для точного воспроизведения компонента «Ход выполнения» в шаблоне печатного представления необходимо создать таблицу с именем, соответствующим идентификатору компонента на форме (в примере - m6), и следующим содержимым:

Название Ответственный Автор Начало Завершение Завершил Комментарий

m6.name

m6.assignee

m6.author

m6.start

m6.completion

m6.finished

m6.comment

Результатом печати формы по вышеописанному шаблону будет PDF-файл, преобразованный с помощью Libre/OpenOffice из исходного ODT-файла с соответствующим в шаблоне форматированием (отступы, шрифты, размеры, стили), а также со вставленными значениями полей и дополнительной обработкой (таблицы). Этот PDF-файл будет сгенерирован и выдан в браузер пользователя при нажатии кнопки «Печать».

Примечание: используемые в шаблоне шрифты должны быть видны экземпляру Libre/OpenOffice, установленному на сервере, в котором происходит преобразование[8].

5. Действия при обновлении системы

При обновлении системы все существующие и настроенные печатные представления форм удаляются. Все шаблоны печатных представлений для каждой формы необходимо настроить с нуля.

Примечание 1. Задачи, которые будут реализованы в рамках итерации 64
  1. Содержимое htd-редактора при вставке в шаблон будет очищаться от HTML-тэгов.

  2. Будет реализована поддержка компонентов типа «Лист подписей», «Лист резолюций», «Ход выполнения» и «Свойства документа».

    Примечание: в таблице хода выполнения, ввиду некоторых особенностей реализации, в рамках 64 итерации будущие и удаленные работы должны помечаться следующим образом:

    • вместо выделения строки серым цветом к названию будущей работы должно быть добавлено: (будущая работа);

    • вместо перечеркивания к названию удаленной работы должно быть добавлено: (удаленная работа).

  3. Будет реализована поддержка форматной строки и разделителя свёртки для динамических таблиц. Для этого в шаблоне печати вне таблиц (внутри абзацного текста) необходимо использовать поле данных в формате:

    «dyntable»

    где dyntable - это идентификатор динамической таблицы.

    Примечание: данное поведение будет работать только для вновь сохраненных данных.

  4. Будет реализована поддержка вставки столбца динамической таблицы как списка. Для этого в шаблоне печати вне таблиц (внутри нумерованного или маркированного списка) необходимо использовать поле данных в формате:

    «dyntable.id1»

    где dyntable - это идентификатор динамической таблицы, а id1 - это поле данных (имя компонента в таблице формы).

    Примечание: в одном нумерованном или маркированном списке нельзя использовать более одного компонента динамической таблицы.



[5] Неисправимые особенности/ограничения.

[6] Неисправимые особенности/ограничения.

[7] Неисправимые особенности/ограничения.

[8] Подробнее по настройке печати в Linux: http://www.blackmoreops.com/2014/07/31/install-fonts-on-linux/