Если у вас всегда две категории, то можете сделать два набора товаров, вставить их в две разные таблицы / повторяющиеся блоки и будет работать. Тут есть пример, как вставить через rest список https://dev.1c-bitrix.ru/rest_help/documentgenerator/example.php
Если у вас количество разделов неопределено, то будет сложнее. Вам надо будет сформировать список внутри списка (список верхнего уровня - раздел, его описание, внутри него - список товаров). Если нужен этот вариант, то скину пример
По поводу конвертации в pdf - проверьте, что у вас установлен модуль transformer, что в настройках модуля указан корректный публичный адрес и он доступен снаружи.
По поводу кнопки - попробуйте кеш сбросить. Удостоверьтесь, что у вас правильно настроены права. Если не помогает - пишите в техподдержку.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Василий Смолинский написал: И здесь я получаю переменную emailDiskFile которая возвращает мне ID файла на Диске. Но как мне получить файл не docx формата, а pdf
Если вы делаете это всё в рантайме, то pdf файла ещё нет в наличии. Локально идёт генерация только docx файла, а pdf получается в результате конвертации. Конвертации производится в облаке и занимает какое-то время (если создаете документ через интерфейс - там показывается прогресс-бар и пишется про конвертацию. Подробнее тут https://dev.1c-bitrix.ru/api_d7/bitrix/documentgenerator/documentgenerator_lifecycle.php). Это асинхронная операция и для максимально быстрого доступа к pdf надо подписаться на событие
onDocumentTransformationComplete
В обработчик события придет два параметра - documentId и data, где data - это результат вызова getFile() по documentId можно поднять Document и у него дернуть метод \Bitrix\DocumentGenerator\Document::getEmailDiskFile(). Если передать туда false в качестве аргумента, то он всегда отдаст pdf, если он есть. Если его нет - не отдаст ничего
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Александр Медведев, ничего не могу сказать по срокам. Выход планируется вместе с возможностью настройки через виртуальную машину. Когда виртуальная машина будет готова, тогда и выйдет.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
nukemonk написал: Почему на клиент (коллбэк) просто не отдавать данные по загрузке сконвертированного файла (урл на файл)? И загрузку реализовывать на клиенте?
Потому что сервер не хранит файлы. Из соображений экономии места, защиты приватности и содержимого файлов. После конвертации файл сразу загружается на клиент. Независимо от результата загрузки (успешно / неуспешно) файлы удаляются сразу.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Антон Горбылев написал: Там сначала идёт запрос информации, куда загружать, потом файлы бьются на части и по частям загружаются на клиент, в конце склеиваются.
Не понял, если честно. Сервер (контроллер) загружает сам файл на клиента?
да. Конвертация - операция асинхронная. На контроллере очередь. Клиент отдает задание на конвертацию, но не знает, когда она завершится. Сервер после окончания конвертации сам загружает результаты на клиент (если клиент всё ещё их ожидает)
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Воспроизвести полный цикл загрузки результатов обработки на клиент будет сложно (с учетом того, что надо полностью воспроизвести структуру запросов). Там сначала идёт запрос информации, куда загружать, потом файлы бьются на части и по частям загружаются на клиент, в конце склеиваются.
Лучше сделать отправку себе и загрузить себе самостоятельно.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
nukemonk, я думаю, что можно использовать и своё решение. Тут вариантов два. Первый - это переписать сам модуль transformer. Он не очень сложный, кода там немного. Обновления для модуля выходят редко, можно держать его под системой контроля версий для возможности отката. 1. Указать свой адрес обработчика (смотрите код \Bitrix\Transformer\Http::__construct()) - в этом случае команда будет уходить по вашему адресу. 2. Сделать свою обработку результатов конвертации. Если другой хост, то надо подшаманить метод \Bitrix\Transformer\Http::getBackUrl() 3. Если данные у вас конвертируются локально, то можно писать сразу в базу 4. Сохранить файлы (таблица b_transformer_command - указать STATUS=400, сохранить файлы в b_documentgenerator_file, можете посмотреть \Bitrix\DocumentGenerator\Integration\TransformerManager::call())
Второй вариант - конвертировать самостоятельно через события генератора документов 1. Отключаете модуль transformer (если он нужен в другом месте, то можете дергать \Bitrix\Main\ModuleManager::unRegisterModule() и \Bitrix\Main\ModuleManager::registerModule() в рантайме, но это не очень) 2. Перехватываете события onCreateDocument и onUpdateDocument 3. В обработчике события конвертируете самостоятельно и сохраняете, куда нужно. Опять же сохранение можно посмотреть тут \Bitrix\DocumentGenerator\Integration\TransformerManager::call()
Сейчас связь жесткая, но развязывать, мне кажется, надо на уровне модуля transformer. Если есть потребность - пишите в техподдержку.
Тогда только своими силами - приложение, рест с использованием стороннего сервиса или своего сервера. Или можете использовать генератор документов - там pdf формируется автоматически.
Либо воспользуйтесь методом \Bitrix\Main\DB\Connection::add(), который вернет вам первичный ключ записи, либо после query используйте \Bitrix\Main\DB\Connection::getInsertedId()
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Рядом с этим компонентом есть компонент bitrix:mobile.player. У него набор настроек совместим с bitrix:player, но он может не выводиться в визуальном редакторе. Попробуйте заменить компонент и проверьте работу.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Олег Брага написал: в onCreateDocument изменение данных самого объекта документа, без запуска генерации (update со вторым параметром false), что бы при открытии данных тоже правильная компания привязанная отображалась.
а без этого в редактировании отображается неверная компания? Мне кажется, этот шаг лишний. У вас может возникнуть ситуация, когда в docx файле одни данные, а в pdf - другие. Должно работать и без onCreateDocument.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Олег Брага, не надо ничего проверять. setValues() только добавляет данные во внутреннее хранилище переопределенных значений, внутри там нет никаких вычислений и можете дергать метод сколько хотите (он не перезаписывает, а всегда дополняет данные).
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Уберите вызов \Bitrix\DocumentGenerator\Document::getFields() до того, как вы вызываете setValues()
Важно, чтобы ид моей компании был указан до того, как документ произведет инициализацию цепочки провайдеров и вычислит значения их полей. А в getFields() как раз идёт вычисление значений. После этого менять значение провайдера бесполезно, там будет работать только смена конечных значений.