Подскажите как лучше при формировании документа с собственным провайдером, передать в провайдер параметры.
Значения параметров будут использоваться при вызове getFields()
Значения параметров будут использоваться при вызове getFields()
06.12.2022 07:57:15
Подскажите как лучше при формировании документа с собственным провайдером, передать в провайдер параметры.
Значения параметров будут использоваться при вызове getFields() |
|
|
|
21.02.2023 19:11:39
Доброго дня.....
не пойму что происходит. Задача разделить товары на две таблицы, в одной собственно товары, в другой услуги. Для этого переопределяю провайдер \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'documentgenerator', 'onDataProviderManagerFillSubstitutionProviders', static function (\Bitrix\Main\Event $event) { $result = []; $result = [ Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Deal::class => Docgen_Deal_providerNEW::class, ]; return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $result); } ); В самом провайдере создаю новые элементы, по полному подобию того, как создаются товары. class Docgen_Deal_providerNEW extends \Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Deal { protected $products_only; protected $services_only; public function getFields(): array { if ($this->fields === null) { parent::getFields(); $this->fields['PRODUCTS_ONLY'] = [ 'PROVIDER' => 'Bitrix\DocumentGenerator\DataProvider\ArrayDataProvider', 'TITLE' => "Товары (только)", 'OPTIONS' => [ 'ITEM_PROVIDER' => 'Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Produc 'ITEM_NAME' => 'PRODUCT_ONLY', 'ITEM_TITLE' => 'Товар (только)', ], 'VALUE' => [$this, 'loadProducts_only'], ]; } return $this->fields; } В итоге вижу вот что Никак не могу понять как он выстраивает такую вот цепочку!!!! Сделки-переодические выезды в рамках Договора (не я писал название, поэтому с орфографией не критикуем) это свойство сделки тип привязка к другой сделке. |
|
|
|
29.03.2023 19:57:59
Здравствуйте.
У кого нибудь получилось сделать отчет со вложенными списками? Переопределяя провайдер данных. А не через подготовку данных и вызов создания отчета через АПИ. |
|
|
|
15.05.2023 16:58:47
Доброго дня
Оставлю тут предупреждение для тех, кто решит делать сложный проект через REST API на облаке, используя конструкции, подобные "Таблица внутри повторяющихся блоков", которые описаны в Там есть не описанные ограничения! Я о них не знал и пожалел. Обработка запроса генерации документов, идущего на облачный сервер Битрикс, очень тяжелая. Чем больше в шаблоне динамических данных, тем она тяжелее. В нашем проекте был полностью динамически формируемый документ с высокой вариативностью, из-за чего пришлось все делать такими конструкциями. И примерно при 3 конструкциях "Таблица внутри повторяющихся блоков", каждая из которых содержала примерно 3 таблицы (это было всего 5 страниц в текстовом документе), сервер Битрикса стал не справляться и выдавать ошибку INTERNAL_SERVER_ERROR, документ при этом не создается вообще. То есть именно с обработкой этих запросов могут быть большие задержки, и можно неожиданно упереться в неописанное ограничение при относительно небольшом объеме документа. Решения у данной проблемы нет, кроме как использовать для генерации документов какую-то свою коробку вместо облака (там нет этих ограничений). В ТП заявка по проблеме есть, под номером 161135 "Облака при обработке шаблона документа (Maximum execution time exceeded)". Сервер Битрикса начинает отклонять запросы, когда не может выполнить их за 60 секунд. Через curl_getinfo можно отслеживать этот параметр для текущего запроса, чтобы понимать, где находится допустимая граница. Пример логов отклоненного запроса:
|
||||
|
|
|||