< FORMS. Заполнение форм | FORMS. Библиотека форм >
В модуле реализована генерация готовых документов на основе заполненных форм. Это позволяет быстро создавать официальные документы (акты, протоколы, письма) без ручного копирования данных.
Перечень рабочих типов форм, их полей и ключей для шаблонов приведён в отдельной статье «Перечень форм и их полей».
Шаблон документа добавляется администратором проекта в формате DOCX в настройках типа формы. В места, куда должны подставляться данные из формы, вставляются специальные ключи — системные имена полей, заданные в конструкторе форм, в двойных фигурных скобках. Например, для поля «Наименование объекта» с системным именем objectName в шаблоне пишется {{objectName}}.
Генерация происходит по запросу пользователя из карточки завершённой формы. Система собирает значения полей формы, системные данные и значения связанных объектов, подставляет их вместо ключей шаблона и формирует готовый DOCX-файл. Документ сохраняется в системной папке типа формы в «Файлах проекта». Из карточки формы его можно открыть или перейти к папке. Настройка системной папки описана в настройках проекта.
Перед генерацией система проверяет шаблон. Если в нём есть неизвестные ключи или ключи без значений, появляется предупреждение со списком. Пользователь может продолжить генерацию. Если DOCX-файл или теги содержат синтаксическую ошибку, генерация не выполняется: система показывает ошибочный тег и пояснение.
Имена ключей (системные имена полей) можно посмотреть в свойствах формы в настройках проекта.
Синтаксис тегов описан в следующем разделе.
Готовые шаблоны DOCX доступны в библиотеке шаблонов.
В проектах вы можете использовать готовые шаблоны или настроить их под требования вашей компании.
При создании шаблона документа можно использовать значения полей самой формы, системные данные и значения связанных объектов. Для этого укажите в документе специальные теги. Во время генерации система заменит их на реальные данные.
В таблицах ниже приведены основные правила синтаксиса и примеры их применения.
См. также файлы шаблонов для генерации документов в библиотеке шаблонов.
| Тип поля | Как подставляется в документ | Пример тега | Результат |
|---|---|---|---|
| Строка | Текст с единицей измерения, если она задана. | {{shortDescription}} |
Строительство моста |
| Число | Числовое значение без единицы измерения. Единицу добавьте в шаблон отдельно. | {{volume}} м³ |
12.5 м³ |
| Да/Нет | Да или Нет. |
{{isApproved}} |
Да |
| Дата и время | В формате системы: ДД.ММ.ГГГГ или ДД.ММ.ГГГГ ЧЧ:ММ. |
{{startDate}} |
15.08.2026 14:30 |
| Диапазон дат | Даты начала и окончания через дефис. | {{period}} |
01.08.2026-15.08.2026 |
| Список вариантов | Выбранное значение или значения через запятую. | {{status}} |
В работе |
| Файл | Массив вложений. В цикле можно вывести имя файла, ссылку или изображение. | {{#photo}}{{name}}{{/photo}} |
Схема.jpg |
| Форма | Раскрывает связанную завершённую форму. К её полям обращайтесь через точку. | {{contractor.name}} |
ООО «СтройИнвест» |
| Конструкция | Пример тега | Результат |
|---|---|---|
| Доступ по индексу | {{items[0].name}} |
Первый элемент |
| Цикл по массиву | {{#attachments}}{{name}}{{/attachments}} |
Схема.pdfФото.jpg |
| Цикл с запятыми | {{#attachments}}{{#$index > 0}}, {{/$index > 0}}{{name}}{{/attachments}} |
Схема.pdf, Фото.jpg |
| Индекс элемента | {{$index}} внутри цикла |
0, 1, 2, … |
| Текущий элемент цикла | {{.}} |
Значение текущего элемента |
| Чек-бокс по значению массива | {{#selectedValues}}{{#. == 'Вариант 1'}}X{{/. == 'Вариант 1'}}{{/selectedValues}} |
X, если массив содержит Вариант 1 |
| Условный вывод | {{#ogrn}}, ОГРН {{ogrn}}{{/ogrn}} |
, ОГРН 123..., если поле заполнено |
| Инвертированное условие | {{^attachments}}Нет вложений{{/attachments}} |
Нет вложений, если список пуст |
| Арифметика | {{quantity * price}} |
1500 |
| Сравнение | {{total >= 1000}} |
true / false |
| Логические операторы и значение по умолчанию | {{name \|\| 'Не указано'}} |
Значение поля или текст по умолчанию |
| Тернарный оператор | {{status === 'closed' ? 'Закрыто' : 'Открыто'}} |
Закрыто или Открыто |
| Уникальные элементы массива | {{#attachments \| uniqueBy:'name'}}{{name}}{{/}} |
Только первое вложение с каждым именем |
| Гиперссылка | {{%link linkObject}} |
Кликабельный текст |
| Ссылка на вложение | {{%link hyperlinkName}} |
Кликабельное имя файла |
| Вставка изображения | {{%image}} |
Изображение из вложения |
Чтобы проставить чек-бокс в зависимости от выбранного значения, разместите конструкцию в нужном месте шаблона. Внешняя секция перебирает массив selectedValues, {{.}} обращается к текущему элементу, а внутренняя секция выводит X, только когда он равен Вариант 1. Замените selectedValues на системное имя поля, а Вариант 1 — на значение, которое нужно отметить.
Циклы, ссылки и изображения
В цикле содержимое между {{#поле}} и {{/поле}} повторяется для каждого элемента массива. Внутри цикла доступны текущий элемент ({{.}}), его индекс ($index) и поля внешней формы.
Повторение строки таблицы по массиву в шаблоне
Если номера и тексты пунктов постоянны, а ответы хранятся в разных полях формы, массив объектов можно задать прямо в теге. Создайте в Word одну строку таблицы из трёх ячеек и разместите в них теги так:
| № | Пункт проверки | Ответ |
|---|---|---|
{{#[{number:'1.1',text:'Проверка основания',answer:baseCheck},{number:'1.2',text:'Проверка покрытия',answer:finishCheck}]}}{{number}} |
{{text}} |
{{answer}}{{/}} |
Строка повторится дважды. number и text заданы в шаблоне, а baseCheck и finishCheck — системные имена полей формы, из которых берутся ответы. Открывающий тег массива стоит в первой ячейке повторяемой строки, закрывающий {{/}} — в последней. Если нужен знак в колонке вместо текста ответа, внутри строки можно использовать условие, например {{#answer === '✔️ Принято'}}X{{/}}.
Чтобы исключить повторяющиеся значения при обходе связанных форм, примените фильтр uniqueBy к массиву во вложенном цикле:
{{#journalEntries}}
{{#materials | uniqueBy:'name'}}
{{name}}
{{/}}
{{/journalEntries}}
Фильтр оставляет только первый элемент с каждым уникальным значением указанного свойства. В этом примере материалы с одинаковым наименованием не будут повторяться, даже если они выбраны в разных записях журнала.
Для секции с фильтром используйте универсальный закрывающий тег {{/}}.
Названия journalEntries, materials и name здесь условные: в шаблоне нужно использовать системные имена полей конкретной формы.
Для ссылок используйте {{%link параметр}}. У вложений доступны параметры:
hyperlinkName — имя файла;url — адрес файла.Если ссылка недоступна, в документе выводится обычный текст.
Чтобы вставить изображение из вложения, используйте {{%image}} внутри цикла по вложениям. Если файл не является изображением или изображение не удалось подготовить, тег не вставляет содержимое. Для условного вывода заголовка, абзаца или строки таблицы используйте признак hasImage:
{{#hasImage}}
Фото:
{{%image}}
{{/hasImage}}
В тегах этапов замените N на порядковый номер этапа, например {{_stage.1.responsible.fullName}}.
| Свойство | Тег | Пример результата |
|---|---|---|
| Номер формы | {{_form.number}} |
42 |
| Дата создания, с временем | {{_form.createdAt}} |
15.08.2026 14:30 |
| Дата создания, только дата | {{_form.createdAtOnlyDate}} |
15.08.2026 |
| Дата изменения | {{_form.modifiedAt}} |
16.08.2026 09:15 |
| Автор, полное имя | {{_form.createdBy.fullName}} |
Иванов Иван Иванович |
| Автор, краткое имя | {{_form.createdBy.shortName}} |
Иванов И.И. |
| Email автора | {{_form.createdBy.email}} |
i.ivanov@example.com |
| Кто изменил, полное имя | {{_form.modifiedBy.fullName}} |
Петров Пётр Петрович |
| Кто изменил, краткое имя | {{_form.modifiedBy.shortName}} |
Петров П.П. |
| Email последнего редактора | {{_form.modifiedBy.email}} |
p.petrov@example.com |
| Ответственный этапа N | {{_stage.N.responsible.fullName}} |
Сидоров Сергей Сергеевич |
| Кто завершил этап N | {{_stage.N.completedBy.fullName}} |
Сидоров Сергей Сергеевич |
| Комментарий этапа N | {{_stage.N.comment}} |
Всё выполнено |
| Дата и время завершения этапа N | {{_stage.N.completedAt}} |
15.08.2026 14:30 |
| Дата завершения этапа N | {{_stage.N.completedAtOnlyDate}} |
15.08.2026 |
| Текущая дата при генерации | {{_nowOnlyDate}} |
17.08.2026 |
| Текущие дата и время | {{_now}} |
17.08.2026 12:00 |
Перед генерацией система проверяет синтаксис DOCX-файла и тегов, а также простые пути к данным, например {{_form.createdBy.fullName}} или {{contractor.name}}.
Для неизвестных ключей и ключей без значений система показывает предупреждение. При необходимости генерацию можно продолжить.
Сложные выражения — обращения по индексу, вычисления, условия, фильтры и выражения внутри циклов — не проходят полную проверку доступности данных до генерации. Поэтому перед использованием таких конструкций рекомендуется проверить шаблон на заполненной форме.