Для автоматизации заполнения типовых форм документов предназначена функция генерации документов по шаблону. Шаблон документа заводится в редакторе шаблонов, доступном через меню
.Для создания нового шаблона документа щелкните на кнопку Новый элемент на стандартной панели инструментов. В появившемся редакторе заполните необходимые поля, выберите файл шаблона - документ в формате docx (предпочтительный формат), odt (на сервере должен быть установлен пакет LibreOffice), xlsx.
На представленном выше рисунке отображены следующие поля:
- имя шаблона документа;
- название документа, который будет сгенерирован и привязан к договору;
- загружаемый шаблон документа в формате docx, odt, xlsx;
- комментарий к загружаемому файлу шаблона;
- имя сгенерированного файла;
- комментарий шаблона;
- Java-класс, в котором возможно определить логику получения данных для шаблона;
- флаг того, что шаблон будет отображен на вкладке Документы в договоре;
- список переменных, содержащихся в файле шаблона документа;
- список таблиц, которые требуется сгенерировать в файле шаблона документа.
Файл шаблона представляет собой текстовый документ, содержащий в своем тексте специальные последовательности, на место которых будут подставлены данные. Формат таких последовательностей имеет вид:
{имя_переменной} или {имя_переменной(значение_по_умолчанию)}
где
- название этой последовательности; в тексте шаблона данное название должно совпадать с именем переменной в таблице Переменные;- то значение, которое будет подставлено вместо последовательности в случае, если по имени перменной возвратится пустое значение (н-р, если в договоре отсутствует какой-либо заполненный параметр, то на его место можно поставить прочерк или какую-нибудь фразу ).
Новая переменная заводится с помощью редактора переменных, который вызывается нажатием на кнопку . Кнопками и можно отредактировать и удалить переменную соответственно.
В диалоговом окне редактора переменной задается имя переменной, ее тип и значение. Тип переменной выбирается в соответствующем выпадающем списке. Доступны следующие варианты:
- значение переменной данного типа подставится в тело шаблона документа как есть. Данный тип переменной поддерживает макроподстановки, о которых речь пойдет ниже.
- как следует из названия, значение переменной данного типа берется из параметра договора. Для этого необходимо выбрать тип параметра договора и непосредственно сам параметр.
- предполагается, что значение переменной данного типа расположено на каком-то удаленном узле;
- получение значения переменной данного типа осуществляется путем выборки из БД с помощью SQL-запроса.
В переменных типа
возможны следующие макроподстановки:- название договора, для которого генерируется документ;
- комментарий договора;
- имя пользователя, который генерирует документ;
- имя пользователя с кодом . Код пользователя можно посмотреть в редакторе пользователей биллинга ( ), выбрав интересующего пользователя в таблице и нажав комбинацию клавиш .
В переменных типа
возможны следующие макроподстановки:- код договора, для которого генерируется документ.
Если в шаблоне документа задан динамический Java-класс, то значения, возвращаемые данным классом, имеют бОльший приоритет и перетирают значения одноименных переменных в списке переменных.
Динамический Java-класс реализует интерфейс
, содержащий метод , который должен возвращать объект типа Map<String, String> - список переменных в формате " ". Здесь в качестве ключа выступает название переменной, соответствующей переменной в файле шаблона документа.Простой пример реализации метода extractData(Connection con):
public Map extractData( Connection con, int contractId, DocumentPattern pattern, DocumentType type, DocumentJournal journal, Map<String, String> apiMap ) throws BGException { Map<String, String> result = new HashMap<String, String>(); result.put("param1","value1"); result.put("param2","value2"); return result; }
Если в файле шаблона документа есть таблицы, которые необходимо сгенерировать, то в редакторе шаблонов необходимо добавить соответствие между таблицей в файле шаблона и таблицей в шаблоне, создаваемом в клиенте биллинга. Это осуществляется на вкладке
редактора шаблонов путем нажатия кнопок , и .В представленном редакторе задается символьное имя таблицы, ее уникальный идентификатор в файле документа, метод получения данных и, соответствующее методу получения данных, значение для таблицы. На данный момент поддерживается 2 метода получения данных:
- полученная SQL-запросом таблица как есть попадет в тело сгенерированного документа. В SQL-запросе возможно использование макроподстановки - код договора, для которого производится генерация документа;
- класс на Java, который возвращает данные для генерируемой таблицы.
Для генерации содержимого таблицы необходимо в файле шаблона создать заголовок таблицы и первую строку-шаблон, содержащую образец форматирования текста и ячеек. В этой строке-шаблоне также необходимо прописать названия столбцов, которые будут выступать в качестве ключей при получении данных (только для метода получения данных - Динамический класс). Если названия столбцов не заданы, то используются названия по умолчанию (col1...colN). В методе получения данных SQL по умолчанию используется нотация col1...colN, следовательно, задавать названия столбцов не обязательно.
Следует отметить, что для поиска таблицы в тексте документ необходимо задать уникальный идентификатор, который должен соответствовать идентификатору, заданному в редакторе таблицы клиента биллинга. Этот идентификатор можно поместить в любую ячейку таблицы, но рекомендуется поместить ее в самую первую ячейку заголовка - потребуется меньше времени для поиска нужной таблицы. Формат идентификатора соответствует формату переменных в шаблоне -
. В редакторе таблиц этот уникальный идентификатор должен быть без фигурных скобок.Динамический класс должен реализовывать интерфейс
и метод , который возвращает , т.е. список строк и содержимое столбцов в виде "ключ->значение". В качестве ключа выступает название столбца в строке-шаблоне.Замечения:
Рекомендуется использовать в качества шаблона документа файл Microsoft Office с расширением
При использовании в качества шаблона документа файл с расширением
необходимо, чтобы на сервере был установлен пакет LibreOffice. Также необходимо учитывать, что при использовании данного формата файла возможно искажение форматирования документа из-за преобразований форматов (при генерации odt-файл преобразуется в docx).При использовании в качестве шаблона документа файл с расширением
будет производиться подстановка ТОЛЬКО переменных в таблице на всех листах книги.Для генерации документа необходимо открыть договор, для которого требуется сгенерировать документ по шаблону, выбрать вкладку
, выбрать документа из выпадающего списка, генерируемого документа и и нажать кнопку . Сгенерированный документ появится в списке документов договора.