Генератор документов для коробочного Битрикс24

Генератор документов для коробочного Битрикс24

Решение "Генератор документов" формирует файлы с расширением .docx на основе созданного пользователем шаблона, подставляя в поля текстовые, табличные данные и изображения.

Настройка модуля

Описание работы (пример)

Предварительно следует создать документ с расширением .docx, который будет шаблоном для генерации файлов. В нём нужно задать имена полей для подстановки.

Имена полей задаются в фигурных скобках латинскими буквами, например: {COMP_NAME}. Расположите поля с именами переменных в нужных местах файла-шаблона, сохраните.

Совет! При работе с MacOS желательно для создания шаблонов использовать MS Word для Windows.

ru2.jpg

Заполненный шаблон загрузить в систему. Сделать это можно двумя способами — загрузить на Диск в портале или в папку в административной части. Первый путь, безусловно, проще и удобнее. Рассмотрим оба способа загрузки:

1. Зайдите в меню Диск, выберите нужную папку для шаблона и загрузите туда ваш файл-шаблон:

ru3-1.jpg

ru3-2.jpg

2. В административной части Битрикс зайдите в раздел КонтентФайлы и папки — для примера возьмем папку generator. Нажмите Загрузить файл — укажите путь к вашему шаблону.

ru3.jpg

В любом месте цепочке бизнес процесса добавьте активити «Генератор документов» (в системе он может обозначаться как Документ word из шаблона [mcart]):

ru4.jpg

Откройте настройки активити. В настройках действия Генератора прописываются поля, из которых будут браться данные для подстановки в переменные поля шаблона.

ru5.jpg

Если вы указываете не путь к шаблонному файлу, а его ID, то настройки будут выглядеть следующим образом:

set2.jpg

ID файла-шаблона вы можете посмотреть тут:

disk.jpg

Рассмотрим подробнее поля настроек Генератора:

  • Заголовок — имя данного активити. Это особенно удобно, если их несколько в цепочке бизнес-процесса. В этом случае созданные файлы с результатом будут иметь разные имена, заданные вами в настройках каждого активити;

  • галочку «Обрабатывать поля в формате Merge Field» проставлять НЕ нужно;

  • Путь к шаблону документа — путь к загруженному файлу с шаблоном. Например: /generator/template.docx или 523, где 523 – ID файла на диске. Если в поле прописаны буквы — модуль распознаёт путь, если цифры — находит файл с таким ID;

  • Путь к сохраняемому файлу и имя — путь и название для сохраняемого файла с выходными данными и расширением .docx. Вы можете прописать здесь полный путь к файлу и формат его названия, а можете указать только название, указав путь к файлу в полях ниже. Пример заполнения: /generator/kp_{=System:Date}.docx (в данном случае имя файла будет содержать буквы kp, знак подчеркивания и текущую дату. Если вы указываете только формат названия выходного файла, например: kp_{=System:Date}.docx, то заполните нижеследующие поля:

  • ID диска — ID диска, на который нужно сохранить файл результата. Как посмотреть ID диска, указано ниже.

  • ID папки на диске — ID папки, в которую нужно поместить файл результата. Как посмотреть ID папки, указано ниже.

  • Далее нужно добавить правила для замены переменных в шаблонном файле на данные. Для подстановки в переменные шаблонного файла в настройках действия нужно прописать правила с указанием имени переменной и имени поля, из которого будут браться данные. В левой части прописывается имя переменной в шаблоне, а в правой части — имя поля, откуда нужно взять данные. Имя поля указывается в фигурных скобках. Поле данных можно выбрать из списка, нажав на кнопку с многоточием около поля.

После заполнения всех полей Генератора, нажмите кнопку Сохранить. Затем сохраните изменения, внесенные в бизнес-процесс (кнопка внизу).

Запуск бизнес-процесса

После определения всех настроек работы Генератора, необходимо запустить бизнес-процесс, с которым будет связана генерация файла. В нашем примере бизнес-процесс выполняется над данными компании, поэтому мы выбираем любую компанию из списка и запускаем для неё наш бизнес-процесс Заполнение КП.

ru12.jpg

После запуска бизнес-процесса полученный файл с результатом можно легко скачать и распечатать или отправить по электронной почте.

ru13.jpg

В готовом файле полностью сохраняется заданное Вами форматирование:

ru14.jpg

Заключение

row5.png

Значительно сокращено время составления документов! Также исключен человеческий фактор, ведь при заполнении множества однотипных документов легко допустить ошибку. А когда данные берутся автоматически из системы, это исключено. Эм Си Арт знает, как сделать Вашу работу более эффективной! 

Вопрос —ответ

Как посмотреть ID диска

ID диска вы можете посмотреть следующим образом: в административной части Битрикс зайдите в НастройкиТаблицы — выберите в списке таблицу b_disk_storage, найдите нужный вам диск по его названию и посмотрите в соответствующей графе его ID:

ru6.jpg

Как посмотреть ID папки

ru7.jpg

Зайдите в меню Диск, выберите нужную вам папку. Рядом с названием вы увидите поле с её ID. Если такого поля нет, зайдите в настройки и добавьте отображение этого поля:

ru8.jpg

Как сгенерировать в выходном файле таблицу произвольного размера

1. Составить макет будущей таблицы в шаблонном файле. В данном примере ITEMS — это поле, которое нужно будет указать в настройках генератора для обращения к строковым данным массива, после точки указывается название колонки. Так, в поле Items.num будут помещены данные из массива Items[num] построчно. В данном примере — это порядковый номер товара в таблице.

table_for_array.jpg

2. Сформировать массив. Он должен иметь следующий вид:

[id] => Array

Далее построчно перечисляются все поля массива в формате:

[name] => Array

[price] => Array

Количество значений в столбцах должно быть одинаковым, иначе таблица будет сформирована некорректно.

3. Сериализовать массив:

serialize(ваш_массив);

Допустим, массив был сериализован в переменную table_items. В таком случае, настройка параметров Генератора будет выглядеть следующим образом:

variable_for_array.jpg

Сохраните настройки генератора.

Внимание! Если поле документа является списком, то к правилу стоит добавить _printable. Если не выводятся другие типы полей, также попробуйте использовать приставку _printable.

Например: вместо {=Document:PROPERTY_TIP_OPLATY} укажите {=Document:PROPERTY_TIP_OPLATY_printable}.


Как вывести набор изображений в файл-результат (допустим, картинки товаров)

1. В шаблоне нужно создать переменную, как и для текстовых данных — латинскими буквами, в фигурных скобках.

ru9.jpg

2. В переменную stringArrNewImage записывается сериализованный массив такого вида:

ru10.jpg

3. В настройках эта переменная будет выглядеть следующим образом:

ru11.jpg

Теперь есть возможность вносить данные в переменные, находящиеся в колонтитулах документа-шаблона.

Переменные в колонтитулах

Теперь есть возможность вносить данные в колонтитулы шаблонного документа. Для этого в шаблоне создайте колонтитулы, внесите туда необходимые данные, в том числе переменные в фигурных скобках для подстановки данных:

Загрузите шаблон на Диск:


В параметрах Генератора укажите имена переменных и какие данные необходимо подставить на их места:


Скачайте готовый файл с результатом:

В колонтитулах будут данные, указанные вами в параметрах Генератора:


Вопрос: Как вывести список строк с переходом на новую строку?

Ответ: Нужно пользоваться специальными xml тегами.

Например, воспользоваться таким тегом <w:br/>.

То есть подставляемая строка должна иметь вид:

Пункт1<w:br/>Пункт2<w:br/>Пункт3

Внимание! Для корректной работы модуля в настройках php нужно включить расширения zip, xmlwriter и dom. 

zip

если расширение php-zip не установлено, то устанавливаем 

yum install php70*zip 

если расширение уже установлено, то нужно подключить его в файле /etc/php.d/40-zip.ini, прописав там: 

; Enable ZIP extension module 

extension=zip.so //либо другой путь к zip.so (можно найти поиском), например extension=/opt/remi/php70/root/lib64/php/modules/zip.so 

xmlwriter и dom

В папке /etc/php.d/ нужно перенести содержимое файла 

20-xmlwriter.ini.disabled в 20-xmlwriter.ini 

20-dom.ini.disabled в 20-dom.ini 

Не забудьте перезагрузить веб-сервер и проверить применение настроек через phpinfo -i 

Похожие записи в блоге

Все статьи