Фабрика документов

Форматирование: даты, деньги, время и условия

Примеры 11 фильтров, работа с пустыми значениями, длительностью и условными блоками Word и Excel. Ограничения валют и автоматической нумерации.

Содержание руководства

Фильтры в «Фабрике документов» меняют вид значения в готовом DOCX или XLSX: оформляют дату, сумму, телефон, длительность или текст. Данные CRM при этом не изменяются. Сначала выберите точное поле в каталоге источников данных, затем добавьте нужный фильтр.

Куда вставить фильтр

Откройте файл-шаблон в Word или Excel. После пути к полю, внутри двойных фигурных скобок, поставьте | и название фильтра:

Сумма: {{ deal.opportunity | money }}

Если сумма сделки равна 1250.5, в готовом документе получится Сумма: 1 250,50 ₽. В Word это обычный текст абзаца или ячейки таблицы. В Excel вставьте выражение в ячейку. Правила подготовки файлов приведены в инструкциях для DOCX и XLSX.

Строковые параметры пишите в прямых кавычках, например default("не указан"). Числовые параметры пишите без кавычек: truncate(12). Не заменяйте прямые кавычки внутри выражений на типографские «кавычки». Несколько фильтров выполняются слева направо.

Все 11 поддерживаемых фильтров

В примерах с item имеется в виду текущая строка цикла товаров или задач. Отдельное поле вне цикла берите по полному пути из каталога.

Фильтр Что вставить Что получится на условных данных
money {{ deal.opportunity | money }} Из 1250.5 получится 1 250,50 ₽
money_no_currency {{ deal.opportunity | money_no_currency }} 1 250,50
money_words {{ totals.sum_with_vat | money_words }} Из 120000 получится «Сто двадцать тысяч рублей 00 копеек»
date {{ item.created_date | date("dd.MM.yyyy HH:mm") }} 14.09.2026 14:53
duration {{ item.time_spent_in_logs | duration("HH:mm:ss") }} Из 9300 секунд получится 02:35:00
phone {{ contact.phone | phone }} Из +79991234567 получится +7 (999) 123-45-67
percent {{ item.tax_rate | percent }} Из 12.5 получится 12,50 %
default {{ contact.email | default("не указан") }} Для пустого e-mail получится «не указан»
upper {{ company.name | upper }} ООО РОМАШКА
lower {{ company.name | lower }} ооо ромашка
truncate {{ deal.title | truncate(12) }} «Поставка оборудования» превратится в «Поставка об…»

Денежные фильтры используют рубли и не выбирают символ по валюте сделки. Для документа в другой валюте проверьте оформление отдельно; знак рубля нельзя считать подтверждением валюты исходного числа. percent добавляет знак процента и два десятичных знака, но не умножает число на 100: исходное 0.125 не станет автоматически 12.5%. Телефоны другого формата могут остаться без изменений.

Даты и длительность

Для date используются маски dd для дня, MM для месяца, yyyy для года, HH для часов и mm для минут. Без параметра применяется dd.MM.yyyy. Регистр имеет значение: MM и mm выполняют разные задачи. Этот фильтр оформляет существующую дату, а не переводит её в другой часовой пояс.

Для трудозатрат задачи выберите один из двух вариантов:

Если таблица задач ещё не подготовлена, возьмите полные примеры Word и Excel.

{{ item.time_spent_in_logs | duration("seconds") }}
{{ item.time_spent_in_logs | duration("HH:mm:ss") }}

При 9300 секундах первый выведет 9300, второй выведет 02:35:00. Без параметра duration использует HH:mm:ss. Это длительность: 90061 секунда даст 25:01:01, часы после суток не сбрасываются.

Нужны целые неотрицательные секунды. Строки «2 часа», «02:35:00», дробные и отрицательные значения вызывают ошибку. В отдельной ячейке XLSX duration("seconds") сохраняет числовой тип секунд; запасное значение default("0") остаётся текстом.

Пустое значение и запасной текст

Ноль, пустое поле и отсутствие связанного контакта различаются. Не подставляйте вымышленные ИНН или банковские реквизиты ради заполненной строки. Проверьте источник в CRM либо скройте ненужный блок условием.

У duration отсутствие значения остаётся пустым, а ноль превращается в 00:00:00. Чтобы показать ноль и для отсутствующего времени, соблюдайте порядок:

{{ item.time_spent_in_logs | duration | default("00:00:00") }}

Сначала получается длительность, затем выбирается запасной текст. Для других отсутствующих полей поведение default может отличаться от явно пустого значения. Проверьте обе ситуации в пробном документе.

Как скрыть строку или абзац

КПП можно показать только при заполненном флаге:

{% if company.has_kpp %}КПП: {{ company.kpp }}{% endif %}

Такое условие подходит для текста внутри одной строки. Чтобы удалить целый блок Word, разместите {%p if company.has_kpp %} и {%p endif %} в отдельных абзацах, а нужный текст между ними. Нажатие Shift+Enter внутри абзаца не создаёт отдельный абзац.

Для удаления строки в Excel подготовьте три отдельные строки листа:

{{#if company.has_kpp}}
КПП: {{ company.kpp }}
{{/if}}

При ложном флаге строка с КПП не попадёт в документ. Условные блоки XLSX проверяют заполненность или истинность указанного пути. Произвольные сравнения и else не поддерживаются: выбирайте готовые логические поля, например company.has_kpp.

Проверьте результат перед использованием

Для ФИО, падежей, адресов и множественных значений есть отдельный справочник модификаторов через ~. Не смешивайте их маски и параметры с фильтрами через |.

В карточке шаблона откройте «Тестовая генерация», заполните JSON, нажмите «Проверить JSON» и «Сформировать документ». Проверьте дату с часами, нулевую сумму, пустой контакт и задачу без трудозатрат. Затем повторите создание из реальной карточки по быстрому старту. Для запуска по событию используйте инструкцию «Автоматизация».

Выбор нумератора пока не присваивает следующий номер документу и не увеличивает счётчик Битрикс24. Если номер уже хранится в CRM, вставьте его поле через каталог и проверьте значение перед отправкой. Форматирование суммы или даты автоматическую нумерацию не включает.