Блог Горошко Андрея Bitrix24 Генерация документа с табличными данными

Генерация документа с табличными данными

Эффективная интеграция и кастомизация функционала в Битрикс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 и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Получить список элементов справочника по фильтру crm.status.listПолучить список элементов справочника по фильтру crm.status.list

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Получить список элементов справочника по фильтру crm.status.list». Вы узнаете экспертные методики работы с

Изменить счет crm.invoice.updateИзменить счет crm.invoice.update

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Изменить счет crm.invoice.update», разберем архитектурные особенности и предоставим

Обзор компонента: Подробное руководствоОбзор компонента: Подробное руководство

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Обзор компонента: Подробное руководство», разберем архитектурные особенности и