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

Быстрое решение шаблонного вопроса

row1.png

Многие пользователи Битрикс применяют в своей ежедневной работе Дизайнер бизнес процессов. Шаблонные бизнес-процессы весьма облегчили работу, но формирование однотипных файлов вручную после отработки бизнес-процесса всё равно затягивало время выполнения поставленной задачи. Например, такие типовые документы как коммерческое предложение или договор, приходилось вручную наполнять повторяющимися данными — названия компаний, фамилии сотрудников, реквизиты и т.п. Заполнение таких документов — еще не самое трудоёмкое занятие, а вот вставка таблиц с множественными полями и столбцами — это уже задача посложнее.

Цели

row2.png

Необходимо было разработать решение, позволяющее автоматизировать формирование шаблонных файлов методом подстановки данных из бизнес-процессов. При создании документа, содержащего, например, данные о компании, нужно заполнить множество полей — название, реквизиты и т.д. Делать это вручную каждый раз муторно и долго, к тому же велика вероятность допустить ошибку при копировании данных. Поэтому нужно было решение, позволяющее переносить данные напрямую из CRM в итоговый файл.

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

Трудности в ходе реализации

row3.png

Приступая к разработке, мы попробовали использовать класс для работы с шаблоном «подложкой» с переменной, но этого оказалось недостаточно, так как в переменную можно было поместить только текстовые данные без табуляции и форматирования. То есть таблицу можно было создать, только изначально обозначив количество строк и столбцов. А требовалось создать универсальный инструмент, который бы самостоятельно создавал нужное количество строк и столбцов, в зависимости от объема выходных данных бизнес-процесса. Тогда мы дописали этот класс так, чтобы была возможность вставки табличных данных с форматированием и картинок.

Особая ценность решения в том, что при правильной настройке активити вы получаете уникальную возможность формирования файла из любых данных бизнес-процесса, в том числе табличных, с множественными привязками к другим полям с картинками.

Итог

row4.png

В результате мы разработали новое действие для Дизайнера бизнес-процессов — «Генератор документов», который формирует файлы с расширением .docx на основе созданного пользователем шаблона, а типовые данные вроде реквизитов, фамилий, сумм или таблиц с картинками автоматически подставляются в поля шаблона после запуска бизнес-процесса.

Установка

1. Скачайте решение на Маркетплейсе.

2. Укажите путь для установки, нажмите Установить.

3. В административной части Битрикс нажмите Загрузить, затем Установить.

4. После окончания установки в Дизайнере бизнес-процессов появится новое действие – Генератор документов (в системе он может обозначаться как Документ word из шаблона [mcart]).

ru1.jpg


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

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

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

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 папки, указано ниже.

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

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

Как посмотреть 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

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

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

ru12.jpg

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

ru13.jpg

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

ru14.jpg


Заключение

row5.png

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

Стоимость такого проекта: 19 900 руб.

Решение: попробовать.


Внимание! Для корректной работы модуля в настройках 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 

comments powered by Disqus