logo

[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, то содержимое переменной будет выведено на желтом фоне красным шрифтом (см. пример), иначе ячейка будет окрашена в синий, и шрифт будет использован белый.

В версии 3.2.8 и выше существует возможность добавить в шаблон изображение. Чтобы задействовать данный механизм, нужно использовать в шаблоне функцию {Image({$контекстная переменная})}. При этом картинка должна содержаться в контекстной переменной с типом Файл (системный).

Пример 6

Нужно сравнить переменные между собой.

Текст шаблона:

{if {$Date1}>{$Date2}}
{$Date1} больше {$Date2}
{else}
{$Date1} НЕ больше {$Date2}
{end}

Пример 7

Нужно осуществить проверку на null.

Текст шаблона:

{if {$NullableDate}=null}
дата не указана
{else}
дата - {$NullableDate}
{end}

Подробную иноформацию о работе с шаблонами документов см. в Кратком руководстве по генерации документов по шаблону в системе ELMA.