Вернул повторяющиеся блоки и таблица стала убираться, аллилуйя!!!
Вот рабочий код
public function onBeforeProcessDocument($event) {
$document = $event->getParameter('document');
$objectData = [
[
'NAME' => 'Item name111',
'AREA' => '111',
'ADDRESS' => 'minsk',
],
[
'NAME' => 'Item name 2',
'AREA' => '222',
'ADDRESS' => 'vitebsk',
]
];
$objectSettings = [
'ITEM_NAME' => 'CARD',
'ITEM_PROVIDER' => \Bitrix\DocumentGenerator\DataProvider\HashDataProvider::class,
];
$document->setValues([
'OBJECT' => new \Bitrix\DocumentGenerator\DataProvider\ArrayDataProvider(
$objectData,
$objectSettings
),
'ObjectCardName' => 'OBJECT.CARD.NAME',
'ObjectCardArea' => 'OBJECT.CARD.AREA',
'ObjectCardAddress' => 'OBJECT.CARD.ADDRESS',
'ObjectCardNum' => 'OBJECT.INDEX',
]);
$document->setFields([
'OBJECT' => [
'PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider',
'OPTIONS' => $objectSettings,
'VALUE' => $objectData,
],
]);
$objectData = [[
],
[
]];
$objectSettings = [
'ITEM_NAME' => 'CARD',
'ITEM_PROVIDER' => \Bitrix\DocumentGenerator\DataProvider\HashDataProvider::class,
];
$document->setValues([
'OBJECT2' => new \Bitrix\DocumentGenerator\DataProvider\ArrayDataProvider(
$objectData,
$objectSettings
),
'Object2CardName' => 'OBJECT2.CARD.NAME',
'Object2CardArea' => 'OBJECT2.CARD.AREA',
'Object2CardAddress' => 'OBJECT2.CARD.ADDRESS',
'Object2CardNum' => 'OBJECT2.INDEX',
]);
$document->setFields([
'OBJECT2' => [
'PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider',
'OPTIONS' => $objectSettings,
'VALUE' => $objectData,
],
]);
В шаблоне вставляю вот так:
Кстати в повторяющихся блоках можно вставлять и простой текст. Это решает некоторые вопросы с логикой вывода данных в шаблоне. Как для меня например. Т.е. в шаблоне находятся все варианты вывода данных, но через блоки можно убрать ненужные и оставить только нужный.
Однако нужно помнить, что блок будет дублироваться столько раз, сколько у вас позиций в значениях списка.
Вот рабочий код
public function onBeforeProcessDocument($event) {
$document = $event->getParameter('document');
$objectData = [
[
'NAME' => 'Item name111',
'AREA' => '111',
'ADDRESS' => 'minsk',
],
[
'NAME' => 'Item name 2',
'AREA' => '222',
'ADDRESS' => 'vitebsk',
]
];
$objectSettings = [
'ITEM_NAME' => 'CARD',
'ITEM_PROVIDER' => \Bitrix\DocumentGenerator\DataProvider\HashDataProvider::class,
];
$document->setValues([
'OBJECT' => new \Bitrix\DocumentGenerator\DataProvider\ArrayDataProvider(
$objectData,
$objectSettings
),
'ObjectCardName' => 'OBJECT.CARD.NAME',
'ObjectCardArea' => 'OBJECT.CARD.AREA',
'ObjectCardAddress' => 'OBJECT.CARD.ADDRESS',
'ObjectCardNum' => 'OBJECT.INDEX',
]);
$document->setFields([
'OBJECT' => [
'PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider',
'OPTIONS' => $objectSettings,
'VALUE' => $objectData,
],
]);
$objectData = [[
],
[
]];
$objectSettings = [
'ITEM_NAME' => 'CARD',
'ITEM_PROVIDER' => \Bitrix\DocumentGenerator\DataProvider\HashDataProvider::class,
];
$document->setValues([
'OBJECT2' => new \Bitrix\DocumentGenerator\DataProvider\ArrayDataProvider(
$objectData,
$objectSettings
),
'Object2CardName' => 'OBJECT2.CARD.NAME',
'Object2CardArea' => 'OBJECT2.CARD.AREA',
'Object2CardAddress' => 'OBJECT2.CARD.ADDRESS',
'Object2CardNum' => 'OBJECT2.INDEX',
]);
$document->setFields([
'OBJECT2' => [
'PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider',
'OPTIONS' => $objectSettings,
'VALUE' => $objectData,
],
]);
В шаблоне вставляю вот так:
{OBJECT.BLOCK_START}
{ObjectCardNum} | {ObjectCardName} | {ObjectCardArea} | {ObjectCardAddress} |
{OBJECT.BLOCK_END}
{OBJECT2.BLOCK_START}
{Object2CardNum} | {Object2CardName} | {Object2CardArea} | {Object2CardAddress} |
{OBJECT2.BLOCK_END}
Вторая таблица полностью убирается, т.к. $objectData у второго поля пустой.Кстати в повторяющихся блоках можно вставлять и простой текст. Это решает некоторые вопросы с логикой вывода данных в шаблоне. Как для меня например. Т.е. в шаблоне находятся все варианты вывода данных, но через блоки можно убрать ненужные и оставить только нужный.
Однако нужно помнить, что блок будет дублироваться столько раз, сколько у вас позиций в значениях списка.