Формулировка проблемы: текущая реализация печатного представления (на момент 62-й итерации включительно) не отвечает большинству требований, которые предъявляются клиентами, например размер листа бумаги, параметры макета, размеры полей, ориентация листа, а также, применительно к Synergy, наличие полей (максимально возможное количество поддерживаемых компонентов формы), значения в которых должны браться непосредственно из формы, к которой относится данное печатное представление.
Решение:
Для решения озвученной проблемы настройка форматирования печатного представления теперь должна настраиваться в шаблоне, который можно будет создавать и редактировать в текстовом процессоре Libre/OpenOffice. Настроенный же шаблон необходимо будет лишь прикрепить к форме.
Таким образом, система более не должна поддержить печать путем
преобразования XML-файлов в PDF (FOP
).
Разделим данную задачу на 4 подзадачи.
Необходимо исключить из интерфейса конструктора форм все существующие на момент 62-й итерации включительно настройки печатного представления, а именно: две вкладки «Настройки печати» и «Компоненты формы» необходимо заменить единственной новой вкладкой «Шаблон печати».
В рамках данной задачи в данной вкладке необходимо реализовать следующее:
стандартный компонент выбора файла с компьютера (кнопка
«Выберите файл» и лейбл Файл не выбран
/
название выбранного файла);
кнопка «Скачать шаблон», которая скачивает текущий шаблон с сервера на компьютер;
кнопка «Удалить шаблон», которая удаляет выбранный шаблон;
в основной рабочей области при этом пусто.
Примечание: нижеописанные особенности будут присутствовать в рамках 63 итерации, в последующих итерациях возможны изменения либо исправления данных особенностей.
Файл шаблона может быть только в формате
*.odt
, не должен быть создан в Microsoft
Office. Создание и редактирование шаблона необходимо
осуществлять только в LibreOffice / OpenOffice.[5]
Форматирование компонентов, настроенных на форме, в печатном представлении не сохраняется. Таким образом, форматирование печатного представления для каждой формы необходимо настраивать отдельно и с нуля.[6]
Нельзя форматировать часть поля, содержащего данные из формы (т.е. у таких полей должно быть только цельное форматирование).[7]
Идентификаторы компонентов, вводимые в поле шаблона, должны быть того же регистра, что идентификаторы компонента на форме.
Печатное представление не будет локалезависимым. Данные в ней будут в той локали, с которой файл по форме последний раз сохраняли.
Если вызывается печать файла по форме с еще несохраненными изменениями, необходимо выдавать браузерное диалоговое окно с предупреждением:
Сохранить внесенные изменения?
и кнопками:
«Да» - происходит сохранение файла по форме, на печать отправляется последняя версия файла по форме;
«Нет» - сохранение не происходит, на печать отправляется последняя сохраненная версия файла по форме;
«Отмена» - сохранение не происходит, файл по форме на печать не отправляется.
Примечание: если данные по форме не были созданы, то, в зависимости от свойств компонента, будет напечатано либо пустое значение, либо останутся значения, которые были введены в качестве идентификатора компонента в поле.
Примечание: нижеописанные ограничения будут присутствовать в рамках 63 итерации, в последующих итерациях возможны изменения либо исправления данных ограничений.
Импорт и экспорт формы будет осуществляться без сохранения печатного представления данной формы.
Идентификаторы компонентов (поле «Имя компонента») не должны содержать точки (см. подробнее здесь).
Компоненты конструктора форм, которые можно использовать в шаблоне печатного представления:
Компоненты формы | Поддерживаются ли в шаблоне |
---|---|
Таблица |
не поддерживается (необходимо использовать штатную таблицу редактора) |
Страница |
не поддерживается (необходимо использовать штатные разрывы страниц редактора) |
Неизменяемый текст |
не поддерживается (необходимо использовать обычный ввод текста в редакторе) |
Однострочное поле |
поддерживается |
Числовое поле |
поддерживается |
Многострочный текст |
поддерживается |
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].
При обновлении системы все существующие и настроенные печатные представления форм удаляются. Все шаблоны печатных представлений для каждой формы необходимо настроить с нуля.
Содержимое htd-редактора при вставке в шаблон будет очищаться
от HTML
-тэгов.
Будет реализована поддержка компонентов типа «Лист подписей», «Лист резолюций», «Ход выполнения» и «Свойства документа».
Примечание: в таблице хода выполнения, ввиду некоторых особенностей реализации, в рамках 64 итерации будущие и удаленные работы должны помечаться следующим образом:
вместо выделения строки серым цветом к названию будущей
работы должно быть добавлено:
(будущая работа)
;
вместо перечеркивания к названию удаленной работы должно
быть добавлено: (удаленная работа)
.
Будет реализована поддержка форматной строки и разделителя свёртки для динамических таблиц. Для этого в шаблоне печати вне таблиц (внутри абзацного текста) необходимо использовать поле данных в формате:
«dyntable»
где dyntable
- это идентификатор
динамической таблицы.
Примечание: данное поведение будет работать только для вновь сохраненных данных.
Будет реализована поддержка вставки столбца динамической таблицы как списка. Для этого в шаблоне печати вне таблиц (внутри нумерованного или маркированного списка) необходимо использовать поле данных в формате:
«dyntable.id1»
где dyntable
- это идентификатор
динамической таблицы, а id1
- это поле
данных (имя компонента в таблице формы).
Примечание: в одном нумерованном или маркированном списке нельзя использовать более одного компонента динамической таблицы.
[5] Неисправимые особенности/ограничения.
[6] Неисправимые особенности/ограничения.
[7] Неисправимые особенности/ограничения.
[8] Подробнее по настройке печати в Linux: http://www.blackmoreops.com/2014/07/31/install-fonts-on-linux/