Битрикс. Генерация документов PDF из БП

Постановка задачи

Написать бизнес-процесс по составлению документа, все данные взять из компании в CRM.

Как это выглядит

Пару слов...

Схема довольна проста, сложность тогда, для меня крылась в php - коде, для генерации. Что, как, где вытаскивать, для меня было в новинку CRM в битриксе, документация была на высоте просто) В итоге я с этим справился, приведу снова пару слов об алгоритме работы и дополнительно то что нужно было проделать.

Описание

Первая мысль - это заголовок договора, как известно договора все подписывают и они обычно под номерами, у меня стоял формат: 04 / 16 (сначала номер потом за какой год). Мысль хранить список договоров в базе была одной из первых, но потом появилось предложение хранить их списком в битриксе, куда заносить даты и номера договоров + сами файлы и ставить коммент. Не будет же бухгалтер лезть в БД и искать данные.

Создан был список, потратил пару дней на освоение работы с ним, особенно доставила работа с файлами битрикса. Итак первая проблема решилась, номер договора будет браться из списка и инкрементиться для текущего года, который выбран.

Создаем БП, ставим переменную - дата подписания. Отлично данные из шапки стандартного договора есть (номер, дата, город). Теперь вопрос стоял - как получить реквизиты нужной компании. Поискав информацию как, я конкретного способа тогда не нашел, было дело в октябре 2016, может сейча уже есть что. Тогда мысль была следующей - создавать свои поля для реквизитов, но идея не прижилась и я потратил неделю на то чтобы все-таки научиться вынимать все реквизиты. Тогда кстати был баг, который разработчики пофиксили спустя пару месяцев - не заходилось в редактирование названий реквизитов через CRM - Настройки ... Фиксил я это прописав в ЧПУ нужные правила для этих страниц.

В общем сам алгоритм для генерации в php-коде для БП был таким:

  1. Берем значение переменной из БП, где хранится ID компании
  2. Берем дату подписания, предварительно взяв на этом шаге еще и год, для дальнейшего номера договора
  3. Ищем максимальный номер для этого года в списке с договорами. Список под конкретным ID, так что GetIBlockElementList($list_id) получаем и проходимся по нему.
  4. Инкрементим номер если нашелся, если не нашлось, ставим 1 номер, поскольку новый год
  5. Дальше получаем данные по компании зная ее ID через CCrmCompany::GetListEx
  6. Получаем реквизиты компании, где ENTITY_TYPE_ID - тип компании, ENTITY_ID - ID компании, PRESET_ID - ID пресета (1 - ООО, 2 - ИП, 3 - Физ.) смотрим в сторону \Bitrix\Crm\EntityRequisite(), пишем фильтр по тому что нам нужно, а именно туда вносим ENTITY_TYPE_ID и ENTITY_ID
  7. Реквизитов может быть много, последний внесенный из CRM, в массиве будет первым, мне нужен был последний, поэтому я не пользовался циклом, а сразу взял элемент под нулевым индексом.
  8. Это еще не все, реквизиты раскиданы по сущностям, чтобы вытащить факт. и юр. адреса, лезем сюда Bitrix\Crm\EntityAddress(), пишем тот же фильтр, только '=ENTITY_ID' => $req_id, ID уже реквизитов на предыдущем шаге
  9. С банком такая же история как и с адресом, БИК, Корр. счет, хранятся там
  10. На этом этапе все реквизиты уже вытянуты, остались ген. дир или ФИО ИП, для них я создал свои поля - фамилия и инициалы (не спорю, вариант брать из реквизитов и парсить ФИО лучше дублирования информации, но до этих полей нужно еще добраться, а фамилия и инициалы в дальнейшем еще будут использоваться, поэтому я выбрал такой путь - создать отдельно доп. поля)
  11. Дальше дело за малым - подставить в шаблон договора то что вытянули. Написать легкий CSS для будущего документа и создать его с помощью mPDF
  12. На этом дело не заканчивается, нужно это богатство закинуть в список с договорами.
  13. Вот теперь все.
Последний этап - добавить файл договора на диск в битрикс, для этого достаточно средств из конструктора БП

Комментарии (0)

Написать комментарий