Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Но раздел написан ради "отписки", нет даже итогового примера. Если вы проследуете инструкция вы не получаете рабочего провайдера - так как нет ни слова о том что провайдер должен поддерживать sourseType шаблона. А шаблоны на данный момент можно создавать только в CRM и привязкой к CRM сущности.
Так что если вы решили использовать его в БП или своих компонентах - не тут то было, можно конечно, но готовитесь открывать права к CRM для любого человека который будет пользоваться этим генератором документов.
Вопрос - почему!? Почему такой модуль написан таким образом что я не могу элементарно передать ему файл шаблона (или создать свободный шаблон не привязанный к CRM), массив ключ-значение и получить сгенерированный документ?
Всё же это провал. Компоненты использовать нельзя, либо придётся кастомить и причём сильно (documentgenerator.view, bitrix:crm.document.view). Мы снова опускаемся да низкоуровневой логики и генерим временные файлы вручную, потом пылесосим их и сами загружаем на диск группы или пользователя.
Но раздел написан ради "отписки", нет даже итогового примера. Если вы проследуете инструкция вы не получаете рабочего провайдера - так как нет ни слова о том что провайдер должен поддерживать sourseType шаблона. А шаблоны на данный момент можно создавать только в CRM и привязкой к CRM сущности.
Так что если вы решили использовать его в БП или своих компонентах - не тут то было, можно конечно, но готовитесь открывать права к CRM для любого человека который будет пользоваться этим генератором документов.
Вопрос - почему!? Почему такой модуль написан таким образом что я не могу элементарно передать ему файл шаблона (или создать свободный шаблон не привязанный к CRM), массив ключ-значение и получить сгенерированный документ?
Если я ошибаюсь - код в студию.
Здравствуйте. Опишите, пожалуйста, подробнее, что у вас не получается.
Всё же это провал. Компоненты использовать нельзя, либо придётся кастомить и причём сильно (documentgenerator.view, bitrix:crm.document.view). Мы снова опускаемся да низкоуровневой логики и генерим временные файлы вручную, потом пылесосим их и сами загружаем на диск группы или пользователя.
Прям всё то что я ожидал от платного API.
Почему компоненты нельзя использовать? Там есть базовый класс компонента, от него наследуйтесь и пишите свой. Компонент для crm предназначен для конкретного места, он, да, не особо расчитан на изменение.
По поводу синхронизации с диском - сделайте свою реализацию \Bitrix\DocumentGenerator\Storage и там пишите, что хотите. Задать своё хранилище по умолчанию для модуля можно через опции, можно через событие в рантайме переопределить, примеры есть.
Апи есть, оно работает, рест для него имеется. Пишите конкретнее свои пожелания.
Антон Горбылев, в данный момент единственное, что не нравится в официальном пути - это генерация документов через шаблоны. Например, у меня есть активити, где выбираешь
файл, который будет использоваться в качестве шаблона (далее исходник)
директорию для сохранения результата
замены, которые необходимо произвести
Не хотелось бы исходник сохранять как шаблон, хотя бы потому, что при удалении активити, непонятно как чистить таблицу шаблонов. Использовать провайдеров без шаблонов у меня не получилось - они тесно связаны. Была мысль в момент выполнения активити временно записывать исходник в шаблон и использовать ваш подход, но это ведь костыль Поэтому и приходится вызывать напрямую DocumentGenerator\Body\Docx и в целом прекрасно понимаю о чём говорит irinadoman,
Александр Медведев написал: Антон Горбылев , в данный момент единственное, что не нравится в официальном пути - это генерация документов через шаблоны. Например, у меня есть активити, где выбираешь файл, который будет использоваться в качестве шаблона (далее исходник) директорию для сохранения результата замены, которые необходимо произвести
Не хотелось бы исходник сохранять как шаблон, хотя бы потому, что при удалении активити, непонятно как чистить таблицу шаблонов. Использовать провайдеров без шаблонов у меня не получилось - они тесно связаны. Была мысль в момент выполнения активити временно записывать исходник в шаблон и использовать ваш подход, но это ведь костыль Поэтому и приходится вызывать напрямую DocumentGenerator\Body\Docx и в целом прекрасно понимаю о чём говорит irinadoman ,
Отличное активити. Список полей из шаблона подтягиваете динамически при загрузке нового файла? Интерфейс симпатичней моей версии, надо будет доделать.
Всё-таки, почему не использовать шаблоны? Вы можете взять существующие компоненты, завязать их на свой модуль, шаблоны тоже привязать к своему модулю - и пожалуйста, интерфейс готов. Выводите здесь в выпадашке шаблоны только своего модуля. В интерфейс crm не вывалится ничего лишнего. Будут шаблоны для модуля - можно и свои провайдеры сделать. Вроде бы там ничего сложного, старался сделать попроще (getFields() - массив описаний и весь провайдер). Зато можно использовать стандартные DocumentTitle - для изменения имени документа и файла, DocumentCreateTime для даты.
И почему не получилось использовать провайдеры без шаблонов? Вы можете создать свой провайдер для модуля crm и он появится в интерфейсе (не забываем обработчик события). Можете отнаследовать провайдера crm и привязать его к своему модулю (не забыв добавить подключение модуля crm перед наследованием - можно в обработчик события добавить, как в моем сообщении выше).
В целом ваш способ тоже вполне рабочий, рад, что хотя бы сам парсер используется )
Антон Горбылев написал: Список полей из шаблона подтягиваете динамически при загрузке нового файла? Интерфейс симпатичней моей версии, надо будет
Нет, вручную, но кстати спасибо за идею)
Думаю до шаблонов я всё таки приду, понимаю как делать, но сейчас пока только активити.
Вы автор, я так полагаю? Не понял для чего значения заворачиваются в CDATA. Так, для вставки множественного значения так, чтобы разделителем была не запятая (как по дефолту), а перенос строки - пришлось "выходить" из CDATA. Разделитель получался таким
Антон Горбылев написал: Список полей из шаблона подтягиваете динамически при загрузке нового файла? Интерфейс симпатичней моей версии, надо будет
Нет, вручную, но кстати спасибо за идею)
Думаю до шаблонов я всё таки приду, понимаю как делать, но сейчас пока только активити.
Вы автор, я так полагаю? Не понял для чего значения заворачиваются в CDATA. Так, для вставки множественного значения так, чтобы разделителем была не запятая (как по дефолту), а перенос строки - пришлось "выходить" из CDATA. Разделитель получался таким
Про динамические списки полей - посмотрите мою активити crm/install/activities/bitrix/crmgenerateentitydocumentactivity/crmgenerateentitydocumentactivity.php можно оттуда скопировать. Единственное, без шаблона по-быстрому получить список полей не получится, придётся делать свой вызов Body::getPlaceholders() на вашем файле.
да, модуль мой.
Значения заворачиваются в CDATA для большей надежности, чтобы ничего лишнего не пропустить внутрь.
В планах стоит более глубокий парсинг исходного текста (если это html) и переработка его в нормальный xml с сохранением форматирования. Сейчас с этим беда.
Так вот кого я мысленно ругал за final у DocumentGenerator\Document ,пока не догнал, что можно через DocumentGenerator\Body\Docx сделать В качестве идеи: было бы неплохо реализовать в шаблонах простейшие условия, нам уж точно актуально. Например, как у Twig Кейс: есть БП "Заявление на отпуск", при запуске можно выбрать замещающего сотрудника и если выбран, в приказ добавляется строчка
Цитата
Бухгалтерии, произвести доплату ___________ в размере ___% от установленного размера должностного оклада по основной работе.
Сейчас эту строчку строим в самом БП, но это жутко неудобно (поля мелкие) и не красиво как-то.
Ещё кейс: CRM используется для логистической компании и вид накладной зависит от входных параметров, а их много. И удобнее строить документ в Word или LibreOffice, чем в БП.