Генератор документів Pro
Генератор документів Pro
Модуль призначений для швидкого вирішення шаблонних питань, пов'язаних із підготовкою файлів.
Генератор документів формує файли з розширенням .docx на основі створеного користувачем шаблону, підставляючи поля текстові, табличні дані і зображення.
Опис роботи (приклад).
Попередньо слід створити документ із розширенням .docx, який буде шаблоном для генерації файлів. У ньому потрібно задати імена полів для підстановки.
Імена полів задаються у фігурних дужках латинськими літерами, наприклад: {COMP_NAME}. Розташуйте поля з іменами змінних у потрібних місцях файлу-шаблону, збережіть.
Рада! При роботі з MacOS бажано для створення шаблонів використовувати MS Word для Windows. Заповнений шаблон завантажити в систему. Зробити це можна двома способами – завантажити на Диск у порталі або в папку в адміністративній частині. Розглянемо обидва способи завантаження:1. Зайдіть в меню Диск, виберіть потрібну папку для шаблону та завантажте туди ваш файл-шаблон.
2. В адміністративній частині Бітрікс зайдіть у розділ Контент — Файли та папки. Натисніть Завантажити файл — вкажіть шлях до шаблону.
У будь-якому місці ланцюжку бізнес процесу додайте активити «Генератор документів» (у системі він може позначатися як Документ word із шаблону [mcart]):
Відкрийте налаштування активіті. У налаштуваннях дії Генератора прописуються поля, з яких братимуться дані для підстановки змінні поля шаблона.
Розглянемо докладніше поля налаштувань Генератора:
- Заголовок - ім'я даного активіті. Це особливо зручно, якщо їх дещо в ланцюжку бізнес-процесу. У цьому випадку створені файли з результатом будуть мати різні імена, задані вами в налаштуваннях кожного активіті;
- галочку «Обробляти поля у форматі 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 папки, вказано нижче.
- Далі потрібно додати правила для заміни змінних у шаблонному файлі на дані. Для встановлення в змінні шаблонного файлу в налаштуваннях дії потрібно прописати правила із зазначенням імені змінної та імені поля, з якого будуть братися дані. У лівій частині прописується ім'я змінної у шаблоні, а правій частині — ім'я поля, звідки потрібно взяти дані. Ім'я поля вказується у фігурних дужках. Поле даних можна вибрати зі списку, натиснувши кнопку з трьома крапками біля поля.
Увага! Якщо поле документа є списком, то до правила варто додати _printable. Якщо не виводяться інші типи полів, також спробуйте використовувати приставку _printable.
Наприклад: замість {=Document:PROPERTY_TIP_OPLATY} вкажіть {=Document:PROPERTY_TIP_OPLATY_printable}.Після заповнення всіх полів Генератора, натисніть кнопку «Зберегти. Потім збережіть зміни, внесені до бізнес-процесу (кнопка внизу).
Як подивитися ID диска.
ID диска ви можете подивитися наступним чином: в адміністративній частині Бітрікс зайдіть у Налаштування - Таблиці - виберіть у списку таблицю b_disk_storage, знайдіть потрібний вам диск за його назвою і подивіться у відповідній графі ID.
Як подивитися ID папки.
Зайдіть до меню Диск, виберіть потрібну папку. Поруч із назвою ви побачите поле з її ID. Якщо такого поля немає, зайдіть у налаштування та додайте відображення цього поля.
Як вивести список рядків з переходом на новий рядок.
Відповідь: Потрібно користуватися спеціальними xml тегами.
Наприклад, скористатися таким тегом
Тобто підставка рядок повинен мати вигляд:
Пункт1
Як додати посилання на згенерований файл
Дуже часто виникає необхідність виводити посилання на сформований документ.
Для цього можна скористатися значенням Посилання для скачування документа активити Документ Word із шаблону в Додаткові результати.
Посилання можна вивести в Повідомлення Живої стрічки, прописавши наступні значення:
1. Висновок через тег:
[P] Виводиться клікабельне слово «посилання», при натисканні на яке завантажується згенерований документ.
[P]2. Виведення через системну змінну: {=System:HostUrl}{=A14775_64625_42428_11813:Path}, де
{=A14775_64625_42428_11813:Path}-вибирається через вставку значення у додаткових результатах значення активіті «Посилання для скачування документів»
Виводиться посилання виду:
Як згенерувати у вихідному файлі таблицю довільного розміру
1. Скласти макет майбутньої таблиці у шаблонному файлі. У цьому прикладі LIST - це поле, яке потрібно буде вказати в налаштуваннях генератора для звернення до рядкових даних масиву, після точки вказується назва колонки. Так, у полі list.id будуть розміщені дані з масиву list[id] рядково. У цьому прикладі — це порядковий номер товару у таблице.
2. Сформувати масив. Він повинен мати такий вигляд:
[P][id] => Array
Далі рядково перераховуються всі поля масиву у форматі:
[fio] => Array
... [/ P]
[P][city] => Array
Кількість значень у стовпцях має бути однаковим, інакше таблиця буде сформована некоректно.
3. Серіалізувати масив:
serialize(ваш_масив);
Припустимо, масив був серіалізований в змінну hostlist. У такому разі налаштування параметрів Генератора буде виглядати так:
LIST={=Variable:hostlist}
Збережіть налаштування генератора.
Увага! Якщо поле документа є списком, до правила варто додати _printable. Якщо інші типи полів не виводяться, також спробуйте використовувати приставку _printable.
Наприклад: замість {=Document:PROPERTY_TIP_OPLATY} вкажіть {=Document:PROPERTY_TIP_OPLATY_printable}
Приклад PHP-коду:
$rootA = $this->GetRootActivity();
$table_list=array (
"id" => array (1,2,3), [/ P]
[p] "fio" => array ("Іванов Іван Іванович", "Петров Петро Петрович", "Сидоров Сидр Сидорович"),
" city " => array ( " Челябінськ " , " Владивосток " , " Перм " )
);
$table_str=serialize($table_list);
$rootA->SetVariable("hostlist",$table_str);