Синтаксис команд генератора
Основы формирования шаблонов документов¶
Документ формируется в любом редакторе, поддерживающем формат docx:
Популярные редакторы, поддерживающие формат DOCX¶
-
Microsoft Word
-
LibreOffice Writer
-
Google Docs
-
WPS Office Writer
-
OnlyOffice Docs
сохраняйте шаблоны документов в формате
docx
Порядок создания шаблона документов¶
- В редакторе создайте файл документа и наполните его всеми необходимыми данными, включая графику, картинки, заголовки
- Отформатируйте документ как он должен выглядеть, включая стили и заголовки.
- Замените переменные параметры специальными командами Генератора документов
- Сохраните документ с расширением
docxна диск ПК - Загрузите шаблон в приложение Генератор документов
- Настройте бизнес-процессы для применения генератора документов
Основной синтаксис генератора документов¶
Внутренний объект данных генератора документов¶
Запуск генерации документа на основании шаблона происходит:
- Из карточки объекта Битрикс24 (например из сделки или контакта, причем из конкретной сделки и конкретного контакта, карточка которого сейчас открыта на экране). В результате такого запуска на вход шаблону генератора документов передается информация о типе объекта и его идентификатор. Т.е. шаблон получает структуру данных заполненную конкретными данными текущего сделки или контакта.
Например если вы откроете карточку сделки, у которой ID=2, то на вход шаблону будет передана информация, что тип объекта
сделка (crm_deal), а идентификатор экземпляраID=2.Генератор документов создаст внутренний объект под именем
objу которого будет структура данных полностью соответствовать структуре данныхсделка (crm_deal), имена полей объектаobjбудут такими же, как и имена полей сущностисделка, а значение полей объектаobjбудут полностью соответствовать значению полей объектасделкасID=2.
- Второй вариант запуска генератора документов, это запуск из бизнес-процесса.
При запуске из бизнес-процесса, на вход шаблона генератора документов также передаются Тип сущности (тип объекта) и его идентификатор.
Генератор также создает внутренний объект obj у которого будет структура данных полностью соответствовать структуре данных заданных в активити бизнес-процесса (подробнее настройку бизнес-процессов генератора документов), имена полей объекта obj будут такими же, как и имена полей типа сущности crm_deal, crm_contact, crm_item_<id-sp> и т.д., а значение полей объекта obj будут полностью соответствовать значению экземпляра объекта с полученным на вход идентификатором {{ID}}.
Типы сущностей Битрикс24
В Битрикс24 наименование сущностей пишется заглавными буквами, в поле настроек шаблона допускается использование строчными буквами. С полным списком сущностей и их описанием можно ознакомиться на портале Битрикс24 в разделе документация API
- CRM_ACTIVITY = "crm_activity"
- CRM_ADDRESS = "crm_address"
- CRM_CATEGORY = "crm_category"
- CRM_COMPANY = "crm_company"
- CRM_CONTACT = "crm_contact"
- CRM_CURRENCY = "crm_currency"
- CRM_DEAL = "crm_deal"
- CRM_DEALCATEGORY = "crm_dealcategory"
- CRM_ITEM_PRODUCTROW = "crm_item_productrow"
- CRM_ITEM = "crm_item"
- CRM_LEAD = "crm_lead"
- CRM_MEASURE = "crm_measure"
- CRM_PRODUCT = "crm_product"
- CRM_QUOTE = "crm_quote"
- CRM_REQUISITE = "crm_requisite"
- CRM_SMART_INVOICE = "crm_smart_invoice"
- CRM_STATUS = "crm_status"
- CRM_TYPE = "crm_type"
- DEPARTMENT = "department"
- TASK_ELAPSED_ITEM = "task_elapsed_item"
- TASK = "task"
- VOXIMPLANT_STATISTIC = "voximplant_statistic"
- USER = "user"
Переменные данные в шаблонах документов¶
Для вставки значения поля в шаблон документа, переменную Битрикс24 со значением необходимо «обернуть» двойными фигурными скобками {{ obj.OPPORTUNITY }} и при генерации документа, вместо текста в фигурных скобках, будет подставлено реально значение из вашего объекта (сделки, компании и т.д.).
SYNTAX
{{obj.<поле из битрикс24>}}
Например: для выведения в документ параметров сделки, необходимо передать в шаблон в настройках Тип объекта
crm_dealи ID конкретной сделки, тогда:Поле
{{ obj.DATE_CREATE }}— вставит в текст документа дату создания сделки, а поле{{ obj.OPPORTUNITY }}— сумму сделки,{{ obj.COMPANY_NAME }}— название компании контрагента и т.д.
Полный список полей сделки смотрите в разделе Имена полей Сделки
Имена полей СДЕЛКИ Битрикс24
- ID — Идентификатор сделки (Число)
- DATE_CREATE — Дата и время создания сделки (Дата)
- CREATED_BY_ID — Идентификатор сотрудника, создавшего сделку (Число)
- CREATED_BY — Идентификатор и имя сотрудника, создавшего сделку (Строка)
- CREATED_BY_NAME — Имя сотрудника, создавшего сделку (Строка)
- DATE_MODIFY — Дата и время последнего изменения сделки (Дата)
- MODIFY_BY_ID — Идентификатор сотрудника, изменившего сделку (Число)
- MODIFIED_BY — Идентификатор и имя сотрудника, изменившего сделку (Строка)
- MODIFIED_BY_NAME — Имя сотрудника, изменившего сделку (Строка)
- ASSIGNED_BY_ID — Идентификатор сотрудника, ответственного за сделку (Число)
- ASSIGNED_BY — Идентификатор и имя сотрудника, ответственного за сделку (Строка)
- ASSIGNED_BY_DEPARTMENT — Идентификатор и название отдела ответственного сотрудника (Строка)
- ASSIGNED_BY_NAME — Имя сотрудника, назначенного ответственным за сделку (Строка)
- MOVED_BY_ID — Идентификатор сотрудника, сменившего стадию сделки (Число)
- MOVED_BY — Идентификатор и имя сотрудника, сменившего стадию сделки (Строка)
- MOVED_BY_NAME — Имя сотрудника, сменившего стадию сделки (Строка)
- MOVED_TIME — Дата и время смены стадии сделки (Дата)
- LEAD_ID — Идентификатор лида, который был сконвертирован в сделку (Число)
- COMPANY_NAME — Название компании (Строка)
- COMPANY_ID — Идентификатор компании, связанной со сделкой (Число)
- COMPANY — Идентификатор и название компании, связанной со сделкой (Строка)
- CONTACT_ID — Идентификатор контакта, связанного со сделкой (Число)
- CONTACT_NAME — Название контакта (Строка)
- CONTACT — Идентификатор и имя контакта, связанного со сделкой (Строка)
- OPENED — Опция «Доступна для всех» в сделке: Y — да, N — нет (Строка)
- TITLE — Название сделки (Строка)
- CRM_PRODUCT — Идентификатор и название товара в сделке (Строка)
- CATEGORY — Идентификатор и название воронки, в которой находится сделка (Строка)
- STAGE_ID — Идентификатор стадии, на которой находится сделка (Строка)
- STAGE — Идентификатор и название стадии, на которой находится сделка (Строка)
- STAGE_SEMANTIC_ID — Идентификатор группы стадии, на которой находится сделка: F failed — - обработана неуспешно, S (success) — обработана успешно, P (processing) — сделка в работе — (Строка))
- STAGE_SEMANTIC — Название группы стадий, на которой находится сделка: успех, провал, в работе (Строка)
- IS_NEW — Сделка находится на первой стадии: Y — да, N — нет (Строка)
- IS_RECURRING — На основании этого шаблона создаются регулярные сделки: Y — да, N — нет (Строка)
- IS_RETURN_CUSTOMER — Повторная сделка: Y — да, N — нет (Строка)
- CLOSED — Сделка на финальной стадии: Y — да, N — нет (Строка)
- TYPE_ID — Тип сделки (Строка)
- OPPORTUNITY_ACCOUNT — Сумма в валюте отчетов (Число)
- OPPORTUNITY — Сумма сделки (Число)
- IS_MANUAL_OPPORTUNITY — Сумма сделки введена вручную: Y — да, N — нет (Строка)
- TAX_VALUE — Налог (Число)
- TAX_VALUE_ACCOUNT — Налог в валюте отчетов (Число)
- CURRENCY_ID — Базовая валюта (Строка)
- ACCOUNT_CURRENCY_ID — Валюта отчета (Строка)
- PROBABILITY — Вероятность успешного закрытия сделки (Число)
- COMMENTS — Комментарии в сделке (Строка)
- BEGINDATE — Время открытия сделки. Устанавливается автоматически и совпадает с датой создания (Дата)
- CLOSEDATE — Планируемая дата закрытия сделки. По умолчанию устанавливается на 7 дней позже даты создания сделки (Дата)
- LOCATION_ID — Местоположение клиента (Число)
- SOURCE_ID — Идентификатор источника (Строка)
- SOURCE — Идентификатор и название источника, из которого создана сделка (Строка)
- SOURCE_DESCRIPTION — Описание рекламного источника (Строка)
- ORIGINATOR_ID — Идентификатор внешней системы, в которой была создана сделка (Строка)
- ORIGIN_ID — Идентификатор сделки во внешней системе, из которой была создана сделка (Строка)
- ADDITIONAL_INFO — Дополнительная информация в сделке (Строка)
- UTM_SOURCE — Рекламный источник, UTM_SOURCE в карточке сделки (Строка)
- UTM_MEDIUM — Рекламный носитель, UTM_MEDIUM в карточке сделки (Строка)
- UTM_CAMPAIGN — Рекламная кампания, UTM_CAMPAIGN в карточке сделки (Строка)
- UTM_CONTENT — Рекламный контент, UTM_CONTENT в карточке сделки (Строка)
- UTM_TERM — Рекламный термин, UTM_TERM в карточке сделки (Строка)
- BANK_DETAIL_ID — Идентификатор банковских реквизитов (Число)
- CRM_PRODUCT_ID — Идентификаторы товаров в карточке сделки (Число)
- CRM_PRODUCT_COUNT — Количество товаров в карточке сделки (Строка)
- WEBFORM_ID — Идентификатор CRM-формы, из которой была создана сделка (Число)
- WEBFORM_NAME — Название CRM-формы, из которой была создана сделка (Строка)
- WEBFORM — Идентификатор и название CRM-формы, из которой была создана сделка (Строка)
Например: создадим шаблон
Дата сделки {{ obj.DATE_CREATE }} на сумму {{ obj.OPPORTUNITY }} рублей
заключена с компанией {{ obj.COMPANY_NAME }}
---------------------------------------
Ответственный: {{ obj.ASSIGNED_BY_NAME}}
Итоговый документ
Дата сделки 05.11.2024 на сумму 5000.00 рублей
заключена с компанией ООО "Чистая компания"
---------------------------------------
Ответственный: Иванов С.И.
Вставка значений пользовательских полей¶
Все пользовательские поля имеют синтаксис:
UF_CRM_"порядковый номер поля" — Сведения из пользовательского поля с указанным номером, например из UF_CRM_123456789. Номер автоматически присваивается полю при создании. Этот формат применяется для всех сущностей (Сделки, контакты, компании и т.д. и номер поля уникален для всей вашей CRM)
Пример
Это значение пользовательского поля: {{obj.UF_CRM_123456789}}
Как узнать номер пользовательского поля
Чтобы узнать номер имя пользовательского поля в формате UF_CRM_"порядковый номер поля"
- Перейдите в настройки CRM и выберите раздел Пользовательские поля
- Выберите тип сущности, в которой вы хотите посмотреть пользовательское поле (Сделка, Лид, Компания и т.д. и кликните на надпись Список полей)
- Выберите поле, для которого нужно получить его системное имя и кликните на его наименование для перехода в карточку поля. В адресной строке браузера вы увидите имя поля в формате
UF_CRM_"порядковый номер поля"
Добавление пользовательского поля в шаблон документа
Для добавления пользовательского поля в шаблон документа вставьте в текст {{ obj.UF_CRM_12340987 }}, где 12340987 — это номер вашего поля, которое вы увидели в адресной строке, замените значение из примера вашим значением.
Вставка вложенных структур Битрикс24¶
Сущности Битрикс24 имеют вложенные структуры и генератор документов позволяет выводить в шаблоне документов значения полей любой вложенности.
Например в структуре сделки есть поле COMPANY_ID, которое ссылается на структуру Компания со всеми данными о компании. Для генератора документов нужно указать в шаблоне следующую последовательность команд, чтобы получить данные о компании. Например нам нужен адрес компании:
Пример
Адрес компании: {{ obj.COMPANY_ID.ADDRESS_1}}
{{ obj.COMPANY_ID.ADDRESS_2}}
Т.е. при обращении к сущности следующего уровня нам необходимо указать на первом уровне поле связку (в нашем случае
COMPANY_ID) и поле назначение.
Для вызова данных третьего и четвертого уровня вложенности, по такому же принципу выбираем поля связки и через . (точку) перечисляем все поля до нужного нам поля.
Допустим нам нужно ФИО ответственного по компании получить из сделки. Ответственного по компании можно определить из карточки компании по полю связке ASSIGNED_BY_ID и значению поля NAME для имени ответственного.
Пример
Ответственный за компанию: {{ obj.COMPANY_ID.ASSIGNED_BY_ID.NAME}}
Поля сущности Компания
- ID — Идентификатор компании (Число)
- DATE_CREATE — Дата и время создания карточки компании (Дата)
- DATE_MODIFY — Дата и время последнего изменения карточки компании (Дата)
- CREATED_BY_ID — Идентификатор создателя карточки компании (Число)
- CREATED_BY — Идентификатор и имя создателя карточки компании (Строка)
- CREATED_BY_NAME — Имя создателя карточки компании (Строка)
- MODIFY_BY_ID — Идентификатор сотрудника, изменившего карточку компании (Число)
- MODIFIED_BY_NAME — Имя сотрудника, изменившего карточку компании (Строка)
- MODIFIED_BY — Идентификатор и имя сотрудника, изменившего карточку компанию (Строка)
- ASSIGNED_BY_ID — Идентификатор ответственного (Число)
- ASSIGNED_BY — Идентификатор и имя ответственного (Строка)
- ASSIGNED_BY_NAME — Имя ответственного (Строка)
- OPENED — Опция «Доступна для всех» в карточке компании: Y — да, N — нет (Строка)
- TITLE — Название компании (Строка)
- ADDRESS_1 — Адрес 1 (Строка)
- ADDRESS_2 — Адрес 2 (Строка)
- ADDRESS_CITY — Город (Строка)
- ADDRESS_POSTAL_CODE — Почтовый индекс (Строка)
- ADDRESS_REGION — Регион (Строка)
- ADDRESS_PROVINCE — Область (Строка)
- ADDRESS_COUNTRY — Страна (Строка)
- ADDRESS_COUNTRY_CODE — Код страны (Строка)
- BANKING_DETAILS — Банковские реквизиты (Строка)
- COMMENTS — Комментарии (Строка)
- COMPANY_TYPE_ID — Идентификатор типа компании (Строка)
- COMPANY_TYPE_NAME — Название типа компании (Строка)
- COMPANY_TYPE — Идентификатор и название типа компании (Строка)
- INDUSTRY_ID — Идентификатор сферы деятельности (Строка)
- INDUSTRY_NAME — Название сферы деятельности (Строка)
- INDUSTRY — Идентификатор и название сферы деятельности компании (Строка)
- REVENUE — Годовой оборот (Число)
- CURRENCY_ID — Валюта (Строка)
- EMPLOYEES — Количество сотрудников (Строка)
- LEAD_ID — Идентификатор лида, связанного с компанией (Число)
- ORIGINATOR_ID — Идентификатор внешней системы, в которой была создана компания (Строка)
- ORIGIN_ID — Идентификатор компании во внешней системе (Строка)
- ORIGIN_VERSION — Версия данных компании во внешней системе. Используется для отслеживания изменений и синхронизации данных (Строка)
- IS_MY_COMPANY — Признак «Моя компания»: Y — да, N — нет. Используется для обозначения ваших компаний (Строка)
- UTM_SOURCE — Рекламный источник, UTM_SOURCE в карточке компании (Строка)
- UTM_MEDIUM — Рекламный носитель, UTM_MEDIUM в карточке компании (Строка)
- UTM_CAMPAIGN — Рекламная кампания, UTM_CAMPAIGN в карточке компании (Строка)
- UTM_CONTENT — Рекламный контент, UTM_CONTENT в карточке компании (Строка)
- UTM_TERM — Рекламный термин, UTM_TERM в карточке компании (Строка)
- PHONE — Телефон (Строка)
- WEB — URL-адреса сайтов, которые связаны с компанией (Строка)
- EMAIL — Email (Строка)
- IM — Мессенджеры (Строка)
Поля сущности Контакт
- ID — Идентификатор контакта (Число)
- DATE_CREATE — Дата и время создания контакта (Дата)
- DATE_MODIFY — Дата и время последнего изменения контакта (Дата)
- CREATED_BY_ID — Идентификатор создателя (Число)
- CREATED_BY — Идентификатор и имя создателя (Строка)
- CREATED_BY_NAME — Имя создателя (Строка)
- MODIFY_BY_ID — Идентификатор сотрудника, изменившего карточку контакта (Число)
- MODIFIED_BY_NAME — Имя сотрудника, изменившего карточку контакта (Строка)
- MODIFIED_BY — Идентификатор и имя сотрудника, изменившего карточку контакта (Строка)
- ASSIGNED_BY_ID — Идентификатор ответственного (Число)
- ASSIGNED_BY — Идентификатор и имя ответственного (Строка)
- ASSIGNED_BY_NAME — Имя ответственного (Строка)
- OPENED — Опция «Доступен для всех» в карточке контакта: Y — да, N — нет (Строка)
- COMPANY_ID — Идентификатор компании (Число)
- SOURCE_ID — Идентификатор источника (Строка)
- SOURCE_DESCRIPTION — Описание источника (Строка)
- NAME — Имя (Строка)
- LAST_NAME — Фамилия (Строка)
- SECOND_NAME — Отчество (Строка)
- POST — Должность (Строка)
- ADDRESS_1 — Адрес 1 (Строка)
- ADDRESS_2 — Адрес 2 (Строка)
- ADDRESS_CITY — Город (Строка)
- ADDRESS_POSTAL_CODE — Почтовый индекс (Строка)
- ADDRESS_REGION — Регион (Строка)
- ADDRESS_PROVINCE — Область (Строка)
- ADDRESS_COUNTRY — Страна (Строка)
- ADDRESS_COUNTRY_CODE — Код страны (Строка)
- COMMENTS — Комментарии (Строка)
- LEAD_ID — Идентификатор лида, связанного с контактом (Число)
- EXPORT — Участвует в экспорте: Y - да, N - нет (Строка)
- TYPE_ID — Идентификатор типа, например, CLIENT (Строка)
- ORIGINATOR_ID — Идентификатор внешней системы, в которой был создан контакт (Строка)
- ORIGIN_ID — Идентификатор контакта во внешней системе (Строка)
- ORIGIN_VERSION — Версия данных контакта во внешней системе. Используется для отслеживания изменений и синхронизации данных (Строка)
- BIRTHDATE — Дата рождения (Дата)
- HONORIFIC — Код обращения, например, HNR_RU_1 (Строка)
- FACE_ID — Идентификатор faceid (Число)
- PHONE — Телефон (Строка)
- WEB — URL-адреса сайтов, которые связаны с контактом (Строка)
- EMAIL — Email (Строка)
- IM — Мессенджеры (Строка)
- UTM_SOURCE — Рекламный источник, UTM_SOURCE в карточке контакта (Строка)
- UTM_MEDIUM — Рекламный носитель, UTM_MEDIUM в карточке контакта (Строка)
- UTM_CAMPAIGN — Рекламная кампания, UTM_CAMPAIGN в карточке контакта (Строка)
- UTM_CONTENT — Рекламный контент, UTM_CONTENT в карточке контакта (Строка)
- UTM_TERM — Рекламный термин, UTM_TERM в карточке контакта (Строка)
Доступ к данным Смарт-процесса¶
Смарт процесс — это самостоятельная единица хранения данных в Битрикс24 любой сложности. Для обращения к полям смарт процесса необходимо в настройках генератора указать тип сущности crm_item_<id смарт-процесса> (Подробнее смотри раздел настройки)
Как узнать ID смарт-процесса
Для указания полей смарт-процесса в настройках шаблона:
- Откройте настройку полей смарт процесса
- В колонке
Код полянаходятся необходимые значения полей для указания их в настройках генератора документов.
Преобразование полей смарт-процесса
Для правильного указания названия поля смарт-процесса в Генераторе документов необходимо код поля, указанного в таблице преобразовать к следующему формату:
UF_CRM_2_1698741796 необходимо преобразовать в формат ufCrm2_1698741796, т.е. обозначение UF_CRM_2 преобразуется в ufCrm2, а UF_CRM_7 преобразуется в ufCrm7. При этом числовое значение поля после подчеркивания остается неизменным.
Так в нашем примере для вывода Исполнителя услуги в документе, нам необходимо в шаблоне указать следующее значение:
SYNTAX
Исполнитель услуги: {{obj.ufCrm2_1698741796}}
Управляющие команды¶
Генератор документов может не просто выводить значения полей, но и обрабатывать логику и выводить информацию в зависимости от значений полей.
Управляющие команды упаковываются в специальный синтаксис су указанием знака % возле двойных фигурных скобок:
SYNTAX
{% команда %}
Внимание
Установка пробелов между { и % не допускаются, это ошибка. и { % Правильно: % }{% команда %}
Команда условие if¶
Следующие пример выведет содержимое блока if — endif если условие истинно, в противном случае ничего не выведет.
SYNTAX
{% if obj."название поля для проверки"=="значение для проверки" %}
Вывести этот текст, если условие поля удовлетворяет
{% endif %}
Более сложный пример с двумя проверками if и elif и значением else, которое выполнится если не выполнится ни одно из условий if. Т.е. в такой конструкции, вы можете назначать любое количество блоков elif и последний блок else.
SYNTAX
{% if obj.CONTACT_ID %}
Если есть контакт у сделки, то напечатать этот текст.
{% elif obj.COMPANY_ID %}
Если есть в сделке компания, то напечатать этот текст
{% else %}
Напечатать этот текст, если нет ни контакта ни компании
{% endif %}
операторы сравнения
При выполнении сравнения в генераторе возможно использование операторов сравнения:
- == — Сравнивает два объекта для равенства.
- != — Сравнивает два объекта для неравенства.
- > — true если левая сторона руки больше, чем правая.
- >= — true если левая сторона больше или равна правой стороне руки.
- < — true если левая сторона руки ниже, чем правая.
- <= — true если левая сторона руки ниже или равна правой стороне руки.
логические операторы
При выполнении сравнения в генераторе возможно использование логических оператор и группировать выражения с помощью ( и ):
- and — логическое
И - or — логическое
ИЛИ - not — логическое отрицание
not X, еслиX=false, то сравнение дастtrue. Для отрицания операторовisиin, используется постфиксная нотация:is not;in not;
Команда цикла for¶
Для работы со списочными переменными применяется команда for in endfor
Выведем в нашем документе список всех значений через дефис:
SYNTAX
{% for row in obj."списочное поле Битрикс24" %}
- {{ row }}
{% endfor %}
- в выражении
for row— создали внутреннюю переменную, в которую будут передаваться значения списка поочередно obj."списочное поле Битрикс24"— указываем имя списочного поля Битрикс24- команда
{{row}}— будет выводить только одно значение из списка на каждой итерации цикла endfor— завершает блок цикла
Специальные команды в FOR
- loop.index — Текущая итерация цикла. (1 индексируется)
- loop.index0 — Текущая итерация цикла. (0 индексируется)
- loop.revindex — Количество итераций из конца цикла (1 индексируется)
- loop.revindex0 — Количество итераций из конца цикла (0 проиндексировано)
- loop.first — Правда, если первая итерация.
- loop.last — Правда, если последняя итерация.
- loop.length — Количество элементов в последовательности.
- loop.cycle — Функция помощника для цикла между списком оследовательности. См. пояснение ниже.
- loop.depth — Указывает, насколько глубоко в рекурсивной петле рендеринг настоящее время. Начинается на уровне 1
- loop.depth0 — Указывает, насколько глубоко в рекурсивной петле рендеринг настоящее время. Начинается на уровне 0
- loop.previtem — Пункт из предыдущей итерации цикла. Неопределённое в оде первой итерации.
- loop.nextitem — Пункт из следующей итерации цикла. Неопределённое во ремя последней итерации.
- loop.changed(*val) — Правда, если раньше звонили с другим значением (или е называется вообще).
Пример
{% for row in rows %}
<li class="{{ loop.cycle('odd', 'even') }}">{{ row }}</li>
{% endfor %}
Блоки комментариев в шаблонах¶
Для пояснения значений переменных и блоков с командами в шаблонах допускается установка комментариев, которые будут пояснять назначение команд и переменных, но не выводится в итоговый документ.
Для установки комментария в шаблоне, оберните текст с комментариями в фигурные скобки с хэштегом {# комментарий #}
SYNTAX
{# комментарий #}
Контроль над пробелами¶
В полях сущностей значения могут храниться с пробелами в начале или конце выводимого поля. Чтобы в документе было предсказуемое выведение параметров используются специальные управляющие символы для добавления пробелов или их подавления.
Например в блоке выведения цикла, если нам нужно подавить вывод пробелов перед и после значением элемента списка, то нужно поставить -%} {{выводимый элемент }} {%- — обратите внимание, что скобки одинарные и стоит знак минус, для подавления пробелов перед и после выводимого значения.
SYNTAX
{% for item in obj.список -%}
{{ item }}
{%- endfor %}
Если в нашем примере obj.список содержит значения [1,2,3,4,5,6,7,8,9], то на выходе мы получим 123456789
Если нам нужно добавить пробелы между элементами списка, то необходимо поставить +%} {{выводимый элемент }} {%+ — обратите внимание, что скобки одинарные и стоит знак плюс, для установки пробелов перед и после выводимого значения.
SYNTAX
{% for item in obj.список +%}
{{ item }}
{%+ endfor %}
Если в нашем примере obj.список содержит значения [1,2,3,4,5,6,7,8,9], то на выходе мы получим 1 2 3 4 5 6 7 8 9
Специальные фильтры¶
В генераторе документов предусмотрены специальные фильтры, которые можно применить к значению переменных, находящиеся внутри блока фильтра.
Три варианта применения фильтров в шаблоне:
- Блок фильтра начинается с команды
filterи специального названия фильтра, который будет применен к блоку. Завершается блок фильтра командойendfilter. - Фильтр добавляется к полю в формате:
{{obj.COMPANY_NAME.title()}}— вернет название компании с заглавной буквы. - Фильтр добавляется к полю через
|вертикальную черту{{obj.COMPANY_NAME | title() }}, также вернет значение как и в предыдущем случае, наименование компании с заглавной буквы.
Этот пример напечатает в шаблоне наименование компании с заглавной буквы:
SYNTAX
{% filter title %}
{{ obj.COMPANY_NAME}}
{% endfilter %}
или
{{obj.COMPANY_NAME.title()}}
или
{{obj.COMPANY_NAME | title() }}
Список фильтров
Список Встроенных Фильтров
- abs() — абсолютное значение аргумента.
- attr(obj: Any, name: str) — возвращает аттрибуты объекта
- map(value: Iterable[Any], args: Any, *kwargs: Any) — Применяет фильтр к последовательности объектов или ищет атрибут. Это полезно при работе со списками объектов.
{{ users|map(attribute='username')|join(', ') }}— на вход получаем список пользователей и возвращем всеusernameчерез запятую. - select() — применяет тест к объекту и выводит в случае истины теста
- selectattr(value: 't.Iterable[V]', args: Any, *kwargs: Any) — отбирает аттрибуты сложного объекта, возращает список аттрибутов и их значения
- unique() — вернет список уникальных значений
- format(value: str, args: Any, *kwargs: Any) — выводит форматированный текст
{{ "%s, %s!"|format(greeting, name) }}или{{ "{}, {}!".format(greeting, name) }} - max() — вернет максимальное значение из списка
- upper() — переводит текст в заглавные буквы
- min() — вернет минимальное значение списка
- capitalize() — возвращает строку, где каждое слово с заглавной буквы
- sort() — сортирует список значений
- center(value: str, width: int = 80) — центрирует текст в поле заданной ширины
- int() — возвращает целое число
- random() — возвращает случайное число
- string() — преобразует в текст
- wordcount() — считает количество слов в строке
- reject() — применяет тест к каждому объекту
- wordwrap() — текст вернется заданной ширины в символах
- join() — объединяет список через указанные разделители
{{ [1, 2, 3]|join('|') }}-> 1|2|3;{{ [1, 2, 3]|join }}-> 123; - sum() — вернет сумму списка
- last() — вернет последнее значение списка
- replace() — заменяет значение текста в подстроке
- title() — начинаться текст будет с заглавной, остальные строчные
- length() — длина строки
- reverse() — вернет список в обратном порядке
- first() — вернет первый элемент списка
- list() — возвращает список
- round() — округляет число
- trim() — удаляет пробелы
- float() — возвращает число с плавающей точкой
- lower() — текст строчными буквами
Специальные фильтры для Битрикс
- render_phones — применяется к сущности Компания/Контакт, которые могут находиться в любом объекте и через связь с полями CONTACT_ID и COMPANY_ID получает номера всех телефонов Компании/Контакта. Пример:
{{ obj.CONTACT_ID|render_phones }}или{{ obj.COMPANY_ID|render_phones }}и возвращает в шаблон документа текущий телефон контакта или компании. - render_emails — применяется к сущности Компания/Контакт, которые могут находиться в любом объекте и через связь с полями CONTACT_ID и COMPANY_ID получает все email Компании/Контакта. Пример:
{{ obj.CONTACT_ID|render_emails }}или{{ obj.COMPANY_ID|render_emails }}и возвращает в шаблон документа текущий email контакта или компании.
Для добавления в шаблон номера телефона контакта или компании или Email-а контакта или компании,¶
примените специальный фильтр render_phones и render_emails:
Пример
{{ obj.CONTACT_ID|render_phones }} #выведет номер телефона контакта
{{ obj.CONTACT_ID|render_emails }} #выведет Email контакта
{{ obj.COMPANY_ID|render_phones }} #выведет номер телефона компании
{{ obj.COMPANY_ID|render_emails }} #выведет Email компании
Для добавления в шаблон списка телефонов и Email-ов компании или контакта¶
необходимо применить специальный фильтр render_phones и render_emails в цикле:
в вашем шаблоне вставьте следующий код:
{% for contact_of_zzz in zzz.field_name %} # для вставки списка телефонов Контакта, где `zzz.field_name` поле содержащее объект Контакт
{{ contact_of_zzz|render_phones }}
{% endif %}
{% for contact_of_zzz in zzz.field_name %} # для вставки списка Email-ов Контакта, где `zzz.field_name` поле содержащее объект Контакт
{{ contact_of_zzz|render_emails }}
{% endif %}
Специальные Тесты¶
При создании шаблонов вы можете использовать встроенные тесты, по результатам которых выполнять дальнейшие действия с шаблонами.
Тесты — это встроенные функции и переменные генератора документов, применение тестов в шаблонах позволяет делать дополнительные проверки переменных. Блок теста начинается с ключевого слова IF — переменная которую проверяем — ключевое слово IS — функция теста.
Или в контексте проверки значения переменной без ключевого слова IS: {% if obj.<числовое поле>.divisibleby(3) %}
SYNTAX
{% if obj.<числовое поле> is divisibleby(3) %}
Число делится на 3
{% endif %}
или
{% if obj.<числовое поле>.divisibleby(3) %}
Если число делится на 3, то напечатается эта строка
{% endif %}
Список тестов генератора документов
- boolean() — поле логического типа
- even() — Возвращает true, если переменная четная.
- in() — проверяет,что значение входит в список
- sequence() — Возвращает true, если переменная является последовательностью.
- false() — Возвращает true, если объект является False.
- integer() — Возвращает true, если объект является целым числом.
- ne() — проверяет на
!= - string()— Возвращает true, если переменная строка.
- iterable() — Проверьте, можно ли выполнить итерацию по объекту.
- none() — Возвращает true, если переменная пустая.
- divisibleby() — проверяет на делимость переменной
- float() — Возвращает true, если объект является float.
- le() — проверяет на
<= - number() — Возвращает true, если переменная является числом.
- true() — Возвращает true, если объект является True.
- eq() — проверяет на равенство переменной значению
- ge() — проверяет на
>= - lower() — Возвращает true, если переменная имеет нижний регистр.
- odd() — Возвращает true, если переменная нечетная.
- gt() — проверяет на
> - lt() — проверяет на
< - upper() — Возвращает true, если переменная имеет верхний регистр.
Назначение переменных¶
Вы можете в генераторе документов в шаблоне создать свои переменные и назначать им любые значения.
SYNTAX
{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}
{% set key, value = call_something() %}
{% set iterated = false %}
Переменные могут быть в виде блоков, которые многократно можно использовать в документе:
Пример
{% set navigation %}
<li><a href="/">Index</a>
<li><a href="/downloads">Downloads</a>
{% endset %}
Размещаем в шаблоне:
{{ navigation }}
{{ navigation }}
Глобальные функции¶
Функция range¶
Возвращает список, содержащий арифметическую прогрессию целых чисел.
SYNTAX
range([start, ]stop[, step])
Следующий пример выведет список от 1 до 10:
Пример
{% for number in range(1,10) %}
<li class="empty"><span>number</span></li>
{% endfor %}
Функция dict¶
Удобная альтернатива литералам dict. {'foo':'bar'} - это то же самое, что и dict(foo='bar').
Функция cycler¶
Циклически перебирайте значения, уступая им по одному за раз, а затем возобновляя, когда достигнете конца.
Например для чередования оформления таблицы, одна строка с белым фоном, другая с цветным.
Пример
{% set row_class = cycler("odd", "even") %}
<ul class="browser">
{% for folder in folders %}
<li class="folder {{ row_class.next() }}">{{ folder }}
{% endfor %}
{% for file in files %}
<li class="file {{ row_class.next() }}">{{ file }}
{% endfor %}
</ul>
Функция date¶
Функция фильтрации дат для шаблонов, которая форматирует дату согласно заданному формату.
Функция date для полей Битрикс24¶
В контексте генератора документов Битрикс24 функция date используется для форматирования дат, которые приходят из полей сущностей (сделки, контакты, лиды и т.д.).
SYNTAX
{{ obj.НАЗВАНИЕ_ПОЛЯ | date:"format" }}
Параметры:
- obj.НАЗВАНИЕ_ПОЛЯ - объект даты/времени
- format - строка формата (необязательный параметр)
Особенности
- Если формат не указан, используется
DATE_FORMATиз текущей локали - Поддерживает как предопределенные форматы, так и пользовательские
Таблица форматов¶
Таблица форматов для Date
| Категория | Символ | Описание | Пример вывода |
|---|---|---|---|
| День | d |
День месяца, 2 цифры с ведущими нулями | '01' - '31' |
j |
День месяца без ведущих нулей | '1' - '31' |
|
D |
День недели, текстовый, 2 или 3 буквы (рус/eng) | 'Пн', 'Вт' |
|
l |
День недели, текстовый, полный | 'Понедельник' |
|
S |
Английский порядковый суффикс для дня месяца | 'st', 'nd', 'rd', 'th' |
|
w |
День недели, цифры без ведущих нулей | '0' (воскресенье) - '6' (суббота) |
|
z |
День года | 1 - 366 |
|
| Неделя | W |
Номер недели года по ISO-8601 (недели начинаются с понедельника) | 1, 53 |
| Месяц | m |
Месяц, 2 цифры с ведущими нулями | '01' - '12' |
n |
Месяц без ведущих нулей | '1' - '12' |
|
M |
Месяц, текстовый, 3 буквы | 'Янв' |
|
b |
Месяц, текстовый, 3 буквы, нижний регистр | 'янв' |
|
E |
Месяц, локаль-специфичное представление для длинных дат | 'января' (для русской локали) |
|
F |
Месяц, текстовый, полный | 'Январь' |
|
N |
Аббревиатура месяца в стиле Associated Press | 'Янв.', 'Фев.', 'Март', 'Май' |
|
t |
Количество дней в данном месяце | 28 - 31 |
|
| Год | y |
Год, 2 цифры с ведущими нулями | '00' - '99' |
Y |
Год, 4 цифры с ведущими нулями | '0001', '1999', '2024' |
|
L |
Логическое значение - високосный год или нет | True или False |
|
o |
Год по номеру недели ISO-8601 | '1999' |
|
| Время | g |
Час, 12-часовой формат без ведущих нулей | '1' - '12' |
G |
Час, 24-часовой формат без ведущих нулей | '0' - '23' |
|
h |
Час, 12-часовой формат | '01' - '12' |
|
H |
Час, 24-часовой формат | '00' - '23' |
|
i |
Минуты | '00' - '59' |
|
s |
Секунды, 2 цифры с ведущими нулями | '00' - '59' |
|
u |
Микросекунды | 000000 - 999999 |
|
a |
'a.m.' или 'p.m.' |
'a.m.' |
|
A |
'AM' или 'PM' |
'AM' |
|
f |
Время в 12-часовом формате (часы и минуты), минуты опускаются если нулевые | '1', '1:30' |
|
P |
Время в 12-часовом формате с 'a.m.'/'p.m.', специальные случаи 'midnight' и 'noon' | '1 a.m.', '1:30 p.m.', 'midnight', 'noon' |
|
| Часовой пояс | e |
Название часового пояса | '', 'GMT', '+500', 'Europe/Moscow' |
I |
Летнее время (действует или нет) | '1' или '0' |
|
O |
Разница с временем по Гринвичу в часах | '+0300' |
|
T |
Часовой пояс машины | 'MSK', 'MDT' |
|
Z |
Смещение часового пояса в секундах | -43200 - 43200 |
|
| Дата/Время | c |
Формат ISO 8601 | 2008-01-02T10:30:00.000123+02:00 |
r |
Формат RFC 5322 | 'Thu, 21 Dec 2000 16:01:07 +0200' |
|
U |
Секунды с Unix Epoch (1 января 1970 00:00:00 UTC) | 1199871480 |
Пример использования¶
Форматирование даты из поля сделки¶
Предположим, у нас есть сделка в Битрикс24 с полем DATE_CREATE, которое содержит дату создания сделки в формате Битрикс24.
{# Базовое форматирование даты создания сделки #}
{{ obj.DATE_CREATE | date:"d.m.Y" }}
{# Расширенное форматирование с текстовым месяцем #}
{{ obj.DATE_CREATE | date:"j F Y" }}
{# Полная дата и время #}
{{ obj.DATE_CREATE | date:"d.m.Y H:i" }}
Результаты для даты создания 15 января 2024 года 14:30:45:
{{ obj.DATE_CREATE | date:"d.m.Y" }} - "15.01.2024"
{{ obj.DATE_CREATE | date:"j F Y" }} - "15 января 2024"
{{ obj.DATE_CREATE | date:"d.m.Y H:i" }} - "15.01.2024 14:30"
Практический пример в шаблоне документа¶
Договор № {{ obj.ID }} от {{ obj.DATE_CREATE | date:"«d» m Y" }} г.
Условия договора:
- Дата создания: {{ obj.DATE_CREATE | date:"d.m.Y" }}
- Срок выполнения: {{ obj.DATE_CREATE | date:"U" | int + 604800 | date("d.m.Y") }}
- Отчетный период: {{ obj.DATE_CREATE | date:"F Y" }}
Важно: В Битрикс24 поля дат обычно приходят в формате, понятном для фильтра
date. Если поле содержит timestamp (количество секунд с Unix Epoch), может потребоваться дополнительное преобразование.
Работа с timestamp полями¶
Если поле содержит timestamp (например, поле DATE_MODIFY):
{# Для timestamp полей может потребоваться преобразование #}
{{ (obj.DATE_MODIFY | int) | date("d.m.Y H:i") }}
Пояснение:
- obj.DATE_CREATE - обращение к полю даты создания сделки в Битрикс24
- | date:"d.m.Y" - применение фильтра форматирования даты
- Формат "d.m.Y" преобразует дату в привычный русский формат "день.месяц.год"
Генератор работает для любых полей дат в сущностях Битрикс24: DATE_CREATE, DATE_MODIFY, BEGINDATE, CLOSEDATE и пользовательских полей типа "Дата".
Пространство имен namespace¶
Создает новый контейнер, позволяющий присваивать атрибуты с помощью тега {% set %}:
SYNTAX
{% set ns = namespace() %}
{% set ns.foo = 'bar' %}
Все переменные в пространстве имен не пересекаются с именами в другом пространстве имен.
Расширенный режим настроек шаблонов¶
Специальные теги управления шаблонами¶
Чтобы управлять абзацами, строками таблиц, столбцами таблиц, прогонами, необходимо использовать специальные теги ({%p, {%tr,{%tc,{%r):
SYNTAX
{%p ваша команда if, for, set %} для параграфа
{%tr ваша команда if, for, set %} для строк таблицы
{%tc ваша команда if, for, set %} для колонок таблицы
{%r ваша команда if, for, set %} для форматированных вставок документа
Специальный тег {%p новый абзац¶
Пример
{%p if display_paragraph %}
Выводим в формате Word новый параграф
{%p endif %}
Специальный тег {%tr строка таблицы¶
Создадим блок цикла FOR с тегом строки таблицы и внутри тега разместим шаблон заполнения таблицы
Пример
{%tr for debt in debts_list %}
1.{{ loop.index }} {{ debt.ufCrm47_1735105058}} {{ debt.ufCrm47_1735202292}} {{ debt.ufCrm47_1735105148}} {{ debt.ufCrm47_1742815487}} {{ debt.ufCrm47_1742816797}}
{%tr endfor %}
Специальные команды в FOR
- loop.index — Текущая итерация цикла. (1 индексируется)
- loop.index0 — Текущая итерация цикла. (0 индексируется)
- loop.revindex — Количество итераций из конца цикла (1 индексируется)
- loop.revindex0 — Количество итераций из конца цикла (0 проиндексировано)
- loop.first — Правда, если первая итерация.
- loop.last — Правда, если последняя итерация.
- loop.length — Количество элементов в последовательности.
- loop.cycle — Функция помощника для цикла между списком оследовательности. См. пояснение ниже.
- loop.depth — Указывает, насколько глубоко в рекурсивной петле рендеринг настоящее время. Начинается на уровне 1
- loop.depth0 — Указывает, насколько глубоко в рекурсивной петле рендеринг настоящее время. Начинается на уровне 0
- loop.previtem — Пункт из предыдущей итерации цикла. Неопределённое в оде первой итерации.
- loop.nextitem — Пункт из следующей итерации цикла. Неопределённое во ремя последней итерации.
- loop.changed(*val) — Правда, если раньше звонили с другим значением (или е называется вообще).
Специальный тег {%tc колонка таблицы¶
Создадим блок цикла FOR с тегом колонки таблицы и внутри тега разместим шаблон заполнения таблицы. Наша таблица из предыдущего примера будет состоять из 6 строк и количество колонок будет равно количеству записей в переменной debts_list
Пример
{%tс for debt in debts_list %}
1.{{ loop.index }} {{ debt.ufCrm47_1735105058}} {{ debt.ufCrm47_1735202292}} {{ debt.ufCrm47_1735105148}} {{ debt.ufCrm47_1742815487}} {{ debt.ufCrm47_1742816797}}
{%tс endfor %}
Макросы (macro) в генераторе шаблонов¶
Для формирования специальных вставок в шаблоне, которые будут многократно использоваться, вы можете использовать синтаксис макросов.
SYNTAX
{% macro get_value(type, field_name) -%}
{{ obj.rev("crm_item_1184", "parentId2") | selectattr("ufCrm10_1698755231", "equalto", type) | map(attribute=field_name) | first }}
{%- endmacro %}
{% macro get_value(type, field_name) -%}— объявляем макрос ключевым словомmacro- Присваиваем имя макросу
get_value - На вход макрос будет получать две переменные:
type,field_name - Тело макроса:
{{ obj.rev("crm_item_1184", "parentId2") | selectattr("ufCrm10_1698755231", "equalto", type) | map(attribute=field_name) | first }}тело макроса будет выполняться каждый раз, когда вызывается макрос в шаблоне
{%- endmacro %}— завершение макроса
Для вызова макроса будем выполнять команду со следующим синтаксисом:
{{ get_value("Паспорт", "ufCrm10_1733317301") }}, где:
- значению
typeбудет присвоено значениеtype="Паспорт" - значению
field_nameбудет присвоено значениеfield_name="ufCrm10_1733317301" - в макросе выполнится подстановка переменных и выполнится тело макроса:
{{ obj.rev("crm_item_1184", "parentId2") | selectattr("ufCrm10_1698755231", "equalto", "Паспорт") | map(attribute="ufCrm10_1733317301") | first }}
Функция rev¶
Специальная функция генератора документов, которая позволяет выполнять запрос к структуре данных Битрикс24 и возвращать список сущностей, удовлетворяющих отправленному запросу
SYNTAX
obj.rev(entity: str, #тип сущности в которой будет выполняться поиск
field_name: str, #поле по которому будет выполняться поиск значений
raw_filter: dict | None = None, # словарь {ключ: значение} для дополнительно фильтрации значений поиска
result_filter: dict | None = None, # словарь {ключ: значение} для дополнительно фильтрации результата вывода
)
Пример
{{ obj.rev("crm_item_1184", "parentId2") | selectattr("ufCrm10_1698755231", "equalto", type) | map(attribute=field_name) | first }}
Например: В нашем бизнес процессе к сделке привязаны различные пользовательские поля, со сделкой может быть связан Контакт или Компания, со сделкой могут быть связаны различные смарт-процессы.
В нашем примере со сделкой связан смарт-процесс, который хранит паспортные данные клиента и имеет свою сложную структуру со всеми необходимыми полями паспорта. Связь между сделкой и смарт-процессом происходит по полю
ParentId2, т.е. в смарт-процессе под названием документы есть полеParentId2в котором хранится ID сделки, к которой был загружен данный паспорт.Используя функцию
REVмы выполняем обращение к сущности смарт-процесса документы(crm_item_1184)ищем в этом смарт процессе все записи, в которых хранится в полеParentId2ID нужной нам сделки и получаем список этих записей.
{{ obj.rev(— в нашем примере объектobjявляется сделкой"parentId2",— поле, в котором хранится ID сделки нашего объектаobjкоторое будем искать в других сущностях"crm_item_1184",— тип сущности ("смарт-процесс") в котором будем искать ID сделки нашего объектаobj,а "1184"— entityTypeId смарт-процесса в котором будем искать ID сделки нашего объектаobj` по полю "parentId2"
) |вертикальная черта|обозначает фильтр. Т.е. все значения запросаrevпередаем на следующий шаг (в функцию на следующей строке)selectattr("ufCrm10_1698755231", "equalto", type)— Выбрать из списочного поляufCrm10_1698755231значения, которые равны ("equalto" или "==") значению "type"|— фильтр,в котором передадим найденное значениеmap(attribute=field_name)— возвращаем значение, хранящееся в полеfield_name| first }}— получаем первое значение из списка и возвращаем из функции
Пример 2: Мы хотим узнать какие Дела (Activity) выполнялись по сделке. Для решения этой задачи в функцию
revнеобходимо передать поле для поискаOWNER_ID, сущность в которой будет поискcrm_activityи функция нам вернет список всех дел, которые были выполнены по данной сделке
Пример
obj.rev("crm_activity", "OWNER_ID")
Функция
revвыполняется внутри шаблона документа и работает с текущим объектомobj, который был передан на вход генератору документов (подробнее смотри настройку генератора документов) в котором хранится тип сущности и ID сущности (напримерcrm_dealиID=2), которые являются неизменными до окончания генерации документа.В примере выше в поле
OWNER_IDбудет подставляться для поиска значениеID=2, для поиска дел, связанных со сделкой у которойID=2.
Фильтр raw_filter в функции rev¶
Третий не обязательный параметр функции rev.
Параметр raw_filter выполняет задачу дополнительной фильтрации при поиске связанных объектов в системе Битрикс24.
raw_filter: уточняет условия поиска связанных сущностей в Битрикс24 и позволяет добавить дополнительные критерии отбора помимо основного поля связи (field_name).
Как это работает:
Первоначально функция REV содержит только основное условие это field_name = "имя поля для поиска"
Если передан raw_filter, его содержимое объединяется с field_name и поиск осуществляется по уточненной схеме включая условия переданные в raw_filter. Таким образом, raw_filter добавляет новые поля для фильтрации в запросе к Битрикс24.
Параметр raw_filter является словарем и получает значения в виде списка пар ключ — значение — {"ключ1": "значение_ключа1" "ключ2": "значение_ключа2"}, где ключ — это имя поля в Битрикс24, а значение_ключа — это значение поля, которое мы отбираем.
Пример:
Допустим, у вас есть сделка и в настройках шаблона вы указали (crm_deal), и вы хотите найти все контакты, которые:
- Указаны в поле
CONTACT_IDэтой сделки (field_name="CONTACT_ID"). - Имеют дополнительный атрибут
TYPE_ID="CLIENT"(это можно передать вraw_filter).
Пример
{{ obj.rev(entity="crm_contact",
field_name="CONTACT_ID",
raw_filter={"TYPE_ID": "CLIENT"}
) }}
На выходе вы получите только те контакты, которые связаны со сделкой и соответствуют TYPE_ID="CLIENT".
raw_filterнужен для гибкого расширения условий поиска связанных объектов в Битрикс24 без изменения основного логического потока. Это полезно в сложных интеграциях, где стандартных полей связи (field_name) недостаточно.
Фильтр result_filter в функции rev¶
Четвертый параметр функции REV
Параметр result_filter используется для фильтрации уже полученных объектов после выполнения основного запроса к Битрикс24. В отличие от raw_filter (который фильтрует данные на стороне сервера), result_filter работает локально в шаблоне.
Параметр result_filter является словарем и получает значения в виде списка пар — {"ключ1": "значение_ключа1" "ключ2": "значение_ключа2"}
После того как функция rev получил список объектов с сервера, если result_filter задан будет выполнена дополнительная проверка, в итоговый результат попадут только те объекты, чьи атрибуты соответствуют условиям result_filter.
Пример
Допустим, вы ищете элементы смарт-процесса (crm_item), связанные со сделкой, но хотите оставить только те, где у ответственного (assignedById.LAST_NAME) фамилия "Иванов":
Пример
{{ obj.rev(entity="crm_item_1184",
field_name="PARENT_ID",
result_filter={"assignedById.LAST_NAME": "Иванов"}
) }}
Сначала с сервера функция rev получает все элементы, где PARENT_ID = текущая сделка. Затем для каждого элемента проверяется, что assignedById.LAST_NAME == "Иванов" и возвращает итоговый результат.
Принципиальное требование фильтра
result_filter, поле по которому выполняется отбор и фильтрация, должно быть получено с сервера и загружено в объектobj. Если поле, по которому вы делаете выборку не загружено в объектobjиспользуйте фильтрraw_filter.
Функция rev1¶
Специальная функция генератора документов, которая позволяет выполнять запрос к структуре данных Битрикс24 и возвращать единственную запись, удовлетворяющих отправленному запросу или пустую запись, если условия не выполнены.
Работает также как и функция
rev, только вместо списка возвращает первую запись результата.
SYNTAX
obj.rev(entity: str, #тип сущности в которой будет выполняться поиск
field_name: str, #поле по которому будет выполняться поиск значений
raw_filter: dict | None = None, # словарь {ключ: значение} для дополнительно фильтрации значений поиска
result_filter: dict | None = None, # словарь {ключ: значение} для дополнительно фильтрации результата вывода
)





