Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Генерация документа с табличными данными». Вы узнаете экспертные методики работы с генерация документа и научитесь избегать типичных ошибок начинающих разработчиков.
Генерация документа с табличными данными
Тут может не хватать некоторых данных — дополним в ближайшее время
- должно быть описание и ссылка на материал в общем разделе
В нашем тестовом шаблоне есть таблица, куда надо вставить картинку, название и цену товара. Модификаторы для цен нельзя использовать в ресте генератора документов, поэтому цену придётся передавать в виде сформированной строки.
Ниже рабочий пример кода, после него подробности.
$data = [
'templateId' => 203,
'providerClassName' => '\\Bitrix\\DocumentGenerator\\DataProvider\\Rest',
'value' => 1,
'values' => [
'Table' => [
[
'Name' => 'Item name 1',
'Price' => '$111.23',
'Image' => 'http://myrestapp.com/upload/stamp.png'
],
[
'Name' => 'Item name 2',
'Price' => '$222.34',
'Image' => 'http://myrestapp.com/upload/stamp.png'
],
],
'TableItemName' => 'Table.Item.Name',
'TableItemImage' => 'Table.Item.Image',
'TableItemPrice' => 'Table.Item.Price',
'TableIndex' => 'Table.INDEX',
],
'fields' => [
'Table' => [
'PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider',
'OPTIONS' => [
'ITEM_NAME' => 'Item',
'ITEM_PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\HashDataProvider',
],
],
'TableItemImage' => ['TYPE' => 'IMAGE'],
],
];
$url = $webHookUrl.$prefix.'.document.add/';Напоминаем, что в шаблон вставлена таблица, в таблице три поля {TableItemName}, {TableItemImage}, {TableItemPrice}. Для начала посмотрим, как заполняется массив полей fields.
1. Передаем настройки поля Table. Такого поля в явном виде нет в шаблоне, но оно нам нужно, чтобы передать по этому ключу массив значений для таблицы.
2. Для этого поля нужно обязательно указать провайдера fields['Table']['PROVIDER'] = 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider'. Таким образом мы указываем, что по этому ключу придёт массив значений.
3. Надо заполнить массив настроек провайдера. fields['Table']['OPTIONS']['ITEM_NAME'] = 'Item'. Здесь мы передали внутренний ключ, по которому провайдер будет обращаться к элементам массива.
4. Здесь указывается, что каждый элемент массива поля Table по ключу Item — это простой хеш.
fields['Table']['OPTIONS']['ITEM_PROVIDER'] = 'Bitrix\\DocumentGenerator\\DataProvider\\HashDataProvider'5. Указываем, что поле TableItemImage является изображением — здесь всё как обычно.
Теперь про массив values.
1. По ключу Table передаем простой массив (с индексными последовательными ключами). Каждый элемент массива — это ассоциативный массив, где ключ — это правая часть поля, за исключением Table (название поля-массива) и Item (название внутреннего ключа).
2. В качестве значения для самих полей таблицы передаем цепочку получения значения из провайдера. Строится она как последовательные коды провайдеров, разделенные точкой. В нашем случае это будет Table — название поля-массива, откуда получаются значения. Потом точка. Дальше Item — название внутреннего ключа провайдера Table, по которому провайдер отдает элементы массива. Потом точка. Дальше идёт ключ внутреннего ассоциативного массива из элементов Table.
3. У провайдера ArrayDataProvider есть внутренняя переменная INDEX, которая указывает на текущий номер элемента (начиная с 1). Чтобы в поле {TableIndex} внутри таблицы подставился порядковый номер, было указано values['TableIndex'] = 'Table.INDEX'.
Если указать в качестве значения поля обычную строку, то она вставится в таблицу как есть во все строки.
💡 Экспертное мнение и рекомендации
Практические рекомендации:
- При написании кастомных компонентов для «Генерация документа с табличными данными» всегда разделяйте бизнес-логику и представление (шаблон).
- Используйте отладку SQL-запросов через конструкцию
$wpdb->last_queryили стандартный трекер Битрикса, чтобы контролировать нагрузку.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru