[ELMA3] Генерация файла по шаблону
Шаблоны используются для автоматического создания документов. В качестве шаблона могут использоваться частично заполненные файлы формата .rtf, .doc, .docx, .txt, .xls или .xlsx.
В шаблоне могут использоваться контекстные переменные типа Строка, Целое число или Дробное число. Для использования в шаблоне контекстных переменных другого типа их нужно сначала преобразовать в типы Строка, Целое число или Дробное число при помощи сценария, который будет выполняться в бизнес-процессе перед генерацией документа.
Синтаксис шаблонов
При составлении шаблона можно использовать произвольное наполнение файла-шаблона. В содержимое файла-шаблона можно вставить контекстные переменные. При этом используется следующий синтаксис:
Текст Текст {$Имя_контекстной_переменной} Текст Текст
Использование блоков в шаблонах
Если в шаблоне необходимо использовать контекстную переменную типа Блок, то синтаксис записи Блока в шаблон выглядит так:
{for Item in {$Block}}
{$Item.Text1} {$Item.Text2} {$Item.Text3}
{end}
где
- Block – имя свойства контекстной переменной типа Блок;
- Text1, Text2, Text3 – имена свойств контекстной переменной типа Блок. В шаблон свойства блока они записываются через точку после команды Item.
В результате генерации этого шаблона в файл свойства блока запишутся по очереди.
Такой же синтаксис используется для шаблонов в файлах форматов .xls и .xlsx.
Команды for и end должны быть в первом столбце таблицы, иначе введенный текст отобразится некорректно.
Следует отметить, что в случае использования данных команд в документе форматов .doc и .docx с таблицами, начало и конец цикла должны быть или в одной ячейке с циклической переменной, или снаружи таблицы.
Использование условий в шаблонах
Условие начинается с оператора {if <условие>} и заканчивается оператором {end}. Вместо {end} можно использовать {end if}.
<условие> – произвольное условие, например {$IsArchived}=true.
Также есть русский аналог: {если ...} {конец если}.
Общий вид условия:
{if <условие>}
<Действие, если условие истинно>
{else}
<Действие, если условие ложно>
{end}
В шаблонах можно использовать вложенные условия:
{if <условие>}text{end if}
{if <условие1>}text{if <условие2>}text{else}text{end if} text{end if}
Примеры использования шаблонов
Пример 1
Нужно вывести КПП юридического лица.
Текст шаблона:
{if {$Contractor.TypeUid} = ’3325eab1-fe46-4900-a617-c6fb54ac24c0’}
КПП контрагента:{$Contractor.KPP}
{else}
Контрагент не является юридическим лицом
{end}
Описание: сначала проверяем, является ли контрагент юридическим лицом. Если условие выполняется, то выводим КПП контрагента. Если условие не выполняется, то в шаблон выводим: "Контрагент не является юридическим лицом".
Если необходимо использовать физическое лицо, то Uid выглядит так: 27e70dfe-2a76-4f1d-a99a-cdf31c62d618.
Если нужно использовать условие неравно, то в шаблонах оно записывается так: <>.
Пример 2
Вывести юридический адрес физического лица в последовательности: страна, город, улица, дом.
Текст шаблона:
Юридический адрес: {$ContractorIndividual.LegalAddress.Country.Name},г.{$ContractorIndividual.LegalAddress.City},ул.{$FContractorIndividual.LegalAddress.Street},дом{$ContractorIndividual.LegalAddress.Building}.
Описание: при такой записи свойства объекта адрес (страна, город, улица, дом) запишется в файл, сгенерированный по шаблону, в желаемой последовательности через запятую.
Пример 3
Вывести в шаблон нарушения, в значениях контекстных переменных которых выбрано Да.
Текст шаблона:
{if{$Disadvantage1}=true}нарушение1;
{end}{if{$Disadvantage2}=true}нарушение2;
{end}{if{$Disadvantage3}=true}нарушение3;
{end}{if{$Disadvantage4}=true}нарушение4;
{end}
Описание: у контекстных переменных Disadvantage1, Disadvantage2, Disadvantage3, Disadvantage4 тип Да/нет. В результате генерации по шаблону в файле выводятся только те нарушения, в недостатках которых на форме в веб-приложении выбрано значение Да.
Пример 4
Комплексный и более сложный пример: шаблон договора. Данный шаблон может использоваться для мгновенной генерации полноценных договоров. Для использования в реальной практике потребуется немного доработать его под особенности организации, в которой он будет использоваться.
Пример 5
Если требуется изменить цвет ячейки в зависимости от условия, то необходимо в шаблоне прописать условие, при котором будет изменяться цвет, и указать, какой именно цвет и стиль будут использоваться.
Пример условия:
{if {$Number} = 123} // Задаем условие, при котором цвет ячейки будет изменен. При выполнении условия цвет и стиль текста будет изменен на используемый в следующей строке.
{$Number} // В данной строке задается стиль текста и цвет ячеек. Измените цвет ячеек на необходимый и он будет использован в документа после генерации.
{else} // Следующее условие
{$Number} // Аналогично 2 строке задаем цвет ячеек и стиль текста.
{end} // Конец условия
В шаблоне используется контекстная переменная Number. Задано условие, если Number = 123, то содержимое переменной будет выведено на желтом фоне красным шрифтом (см. пример), иначе ячейка будет окрашена в синий, и шрифт будет использован белый.
Пример 6
Нужно сравнить переменные между собой.
Текст шаблона:
{if {$Date1}>{$Date2}}
{$Date1} больше {$Date2}
{else}
{$Date1} НЕ больше {$Date2}
{end}
Пример 7
Нужно осуществить проверку на null.
Текст шаблона:
{if {$NullableDate}=null}
дата не указана
{else}
дата - {$NullableDate}
{end}
Подробную иноформацию о работе с шаблонами документов см. в Кратком руководстве по генерации документов по шаблону в системе ELMA.