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

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

row1.png

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

Цели

row2.png

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

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

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

row3.png

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

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

Итог

row4.png

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

Установка

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

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

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

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

ru1.jpg


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

Предварительно следует создать документ с расширением .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


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

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

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


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


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


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

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


Стоимость такого проекта: 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 

Загрузка...