Разработка модуля генерации документов 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля генерации документов 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка модуля генерации документов 1С-Битрикс

Генерация документов — счетов, актов, договоров, накладных — встречается в каждом втором проекте на Битрикс. Стандартных инструментов для этого нет: ни в sale, ни в crm. Задачу обычно решают «на коленке» через phpWord или вообще вручную. Модуль даёт системный подход: шаблоны, переменные, версионирование, подписи.

Где это нужно

Типичные сценарии: автоматический счёт после оформления заказа в интернет-магазине, договор при регистрации пользователя в B2B-разделе, акт выполненных работ по закрытой сделке CRM, коммерческое предложение для менеджера. В каждом случае документ должен формироваться мгновенно, содержать актуальные данные и выглядеть профессионально.

Архитектура модуля

Модуль vendor.docgen со следующими таблицами:

  • b_vendor_docgen_template — шаблоны документов: id, name, type (order/contract/act/offer), format (docx/pdf), template_file, variables_schema, version, is_active
  • b_vendor_docgen_document — сгенерированные документы: id, template_id, entity_type, entity_id, file_id (в b_file), status, generated_at, generated_by
  • b_vendor_docgen_variable — зарегистрированные переменные: name, source_class, description

Система переменных

Каждая переменная в шаблоне обёрнута двойными фигурными скобками: {{ORDER_NUMBER}}, {{CLIENT_NAME}}, {{ITEMS_TABLE}}. Переменные регистрируются через провайдеры:

class OrderVariableProvider implements VariableProviderInterface
{
    public function getVariables(int $entityId): array
    {
        $order = \Bitrix\Sale\Order::load($entityId);
        $props = $order->getPropertyCollection();

        return [
            'ORDER_NUMBER'   => $order->getField('ACCOUNT_NUMBER'),
            'ORDER_DATE'     => $order->getDateInsert()->format('d.m.Y'),
            'ORDER_SUM'      => number_format($order->getPrice(), 2, ',', ' '),
            'ORDER_CURRENCY' => $order->getCurrency(),
            'CLIENT_NAME'    => $props->getPayerName(),
            'CLIENT_INN'     => $props->getUserProp('INN')?->getValue(),
            'CLIENT_ADDRESS' => $props->getAddress(),
            'ITEMS_TABLE'    => $this->buildItemsTable($order->getBasket()),
        ];
    }
}

Провайдеры регистрируются в настройках модуля и автоматически подставляются при генерации в зависимости от типа документа.

Генерация DOCX

Шаблоны Word обрабатываются через PhpWord:

$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($templatePath);

foreach ($variables as $name => $value) {
    if (is_array($value)) {
        // Таблица — клонируем строки
        $templateProcessor->cloneRow('ITEM_NAME', count($value));
        foreach ($value as $i => $item) {
            $templateProcessor->setValue("ITEM_NAME#{$i}", $item['name']);
            $templateProcessor->setValue("ITEM_QTY#{$i}", $item['quantity']);
            $templateProcessor->setValue("ITEM_PRICE#{$i}", $item['price']);
        }
    } else {
        $templateProcessor->setValue($name, htmlspecialchars($value));
    }
}

$outputPath = '/upload/vendor_docgen/' . uniqid() . '.docx';
$templateProcessor->saveAs($outputPath);

Конвертация в PDF

DOCX генерируется быстро, но клиент часто хочет PDF. Конвертация — самое болезненное место. Варианты:

  • LibreOffice в headless-режиме: libreoffice --headless --convert-to pdf file.docx — лучшее качество, требует установки на сервер
  • PhpSpreadsheet + мPDF — для документов на основе HTML-шаблонов, проще в управлении стилями
  • DocRaptor / PDF Rocket — облачные сервисы, не требуют ПО на сервере

Выбор конвертора — параметр в настройках модуля. По умолчанию: mPDF для HTML-шаблонов, LibreOffice для DOCX.

HTML-шаблоны

Альтернатива Word-шаблонам — HTML с CSS. Проще поддерживать, нет проблем с кодировками. Шаблон хранится прямо в b_vendor_docgen_template в поле html_template, переменные подставляются через простой поиск-замену или через Twig:

$loader = new \Twig\Loader\ArrayLoader(['doc' => $template['HTML_TEMPLATE']]);
$twig = new \Twig\Environment($loader);
$html = $twig->render('doc', $variables);

// Конвертация в PDF через mPDF
$mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4']);
$mpdf->WriteHTML($html);
$mpdf->Output($outputPath, 'F');

Хранение и доступ

Готовый файл сохраняется через \CFile::SaveFile() в таблицу b_file — стандартный механизм Битрикс. Ссылка для скачивания генерируется через \CFile::GetPath(). В b_vendor_docgen_document хранится file_id и метаданные.

Доступ к документу проверяется по принадлежности: пользователь может скачать документ, связанный с его заказом или профилем. Менеджеры CRM — документы своих сделок. Администраторы — все.

Автоматическая генерация по событиям

Документ можно генерировать автоматически при наступлении события Битрикс:

// В init.php или через обработчик в инсталляторе модуля
AddEventHandler('sale', 'OnSaleOrderPaid', ['\Vendor\DocGen\EventHandler', 'onOrderPaid']);

// В классе обработчика
public static function onOrderPaid(\Bitrix\Main\Event $event): void
{
    $orderId = $event->getParameter('id');
    DocGenerator::generate('invoice', 'sale_order', $orderId);
    // → автоматически прикрепляет документ к заказу и отправляет покупателю
}

Сроки разработки

Этап Срок
Архитектура, ORM-таблицы, инсталлятор 1 день
Система переменных и провайдеры данных 2 дня
Генерация DOCX (PhpWord) 2 дня
Генерация PDF (mPDF или LibreOffice) 1 день
HTML-шаблоны через Twig 1 день
Хранение, доступ, скачивание 1 день
Автоматическая генерация по событиям 1 день
Административный интерфейс шаблонов 2 дня
Тестирование 1 день

Итого: 12 рабочих дней. Сложная вёрстка документов с колонтитулами, подписями и печатями — +2 дня.