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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка модуля генерации документов 1С-Битрикс
Средний
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1330
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    924
  • 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
    672
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    815
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    714
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1051

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

Типичная ситуация: оператор CRM тратит 10 минут на формирование счета в Word, копируя данные из заказа — ошибается в ставке НДС, и документ уходит клиенту. Или интернет-магазин генерирует сотни накладных в день через phpWord, а при изменении логотипа править каждую. 54-ФЗ требует фискализации, ошибка в реквизитах — штраф до 50 000 рублей. Мы разрабатываем модуль для Битрикс, который системно решает эти проблемы: шаблоны, переменные, версионирование, автоматическая генерация по событиям.

Проблемы, которые решаем

  • Ошибки в документах: не тот ИНН, неверная сумма, пропущенная ставка НДС. Ручной ввод приводит к 30% ошибок. Модуль исключает человеческий фактор: данные тянутся напрямую из заказа или сделки через провайдеры.
  • Медленная генерация: менеджер тратит 5–10 минут на один документ. При 200 заказах в день это более 30 часов работы. Автоматизация сводит генерацию к 200–500 мс на документ.
  • Несогласованность шаблонов: в Word-документах разных отделов разные шрифты, отступы, колонтитулы. Модуль централизует шаблоны с версионированием — изменения применяются сразу ко всем новым документам.
  • Несоответствие требованиям: отсутствие обязательных полей (КПП, ОКТМО, QR-код для налоговой). Настройка переменных и валидация шаблонов исключают такие пропуски.

Как работает модуль генерации документов?

Модуль vendor.docgen использует четыре ORM-таблицы:

  • 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

Каждый шаблон содержит JSON-схему переменных — модуль валидирует, что все обязательные поля присутствуют.

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

Переменные обёрнуты в {{....}}. Подстановка выполняется через провайдеры данных, которые регистрируются в настройках модуля. Пример провайдера для заказа:

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()),
        ];
    }
}

Провайдеров можно писать под любые сущности: сделки CRM, лиды, пользовательские профили. Типовой шаблон содержит 20–30 переменных, модуль не ограничивает количество.

Почему Twig лучше простой замены?

Простая замена str_replace ломается при вложенных данных и таблицах. Twig даёт циклы, условия, фильтры. Пример HTML-шаблона:

<h1>Счет № {{ORDER_NUMBER}}</h1>
<table>
{% for item in ITEMS %}
  <tr>
    <td>{{ item.name }}</td>
    <td>{{ item.quantity }}</td>
    <td>{{ item.price|number_format(2, ',', ' ') }}</td>
  </tr>
{% endfor %}
</table>

Twig компилируется в кэш — производительность на уровне ручной замены, а поддерживать шаблоны в десятки раз проще. Подробнее — в документации Twig и Wikipedia.

Как настроить шаблоны DOCX и HTML?

Для 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 Отличное 1-2 сек Установка на сервер Бесплатно
mPDF Хорошее 0.5 сек PHP-расширение Бесплатно
DocRaptor Отличное 1-3 сек Нет от $0.01/док

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

HTML-шаблоны

Альтернатива Word — HTML с CSS. Проще поддерживать, нет проблем с кодировками. Шаблон хранится в b_vendor_docgen_template в поле html_template. Конвертация через Twig и mPDF:

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

$mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4']);
$mpdf->WriteHTML($html);
$mpdf->Output($outputPath, 'F');

mPDF поддерживает колонтитулы, подписи, печати, QR-коды.

Как обеспечить безопасность и автоматизацию?

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

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

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

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

AddEventHandler('sale', 'OnSaleOrderPaid', ['\Vendor\DocGen\EventHandler', 'onOrderPaid']);

class EventHandler
{
    public static function onOrderPaid(\Bitrix\Main\Event $event): void
    {
        $orderId = $event->getParameter('id');
        DocGenerator::generate('invoice', 'sale_order', $orderId);
    }
}

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

Что входит в работу?

В результате вы получаете:

  • Рабочий модуль с ORM-таблицами и инсталлятором.
  • Набор шаблонов (3–5) для типовых документов.
  • Документацию по провайдерам данных и расширению.
  • Доступ к репозиторию с исходным кодом.
  • 1 час онлайн-обучения сотрудников.
  • Поддержку в течение 30 дней после сдачи.

Процесс работы

  1. Aналитика: изучаем бизнес-процессы и требования к документам.
  2. Проектирование: архитектура модуля, схема переменных, выбор конвертеров.
  3. Разработка: реализация модуля, создание шаблонов.
  4. Интеграция: настройка событий и автоматической генерации.
  5. Тестирование: до 3 итераций правок на вашем сервере.
  6. Деплой и обучение: передача документации, обучение сотрудников.

Ориентировочные сроки

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

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

Типичные ошибки при внедрении

  • Игнорирование валидации: если не проверять обязательные поля, может сгенерироваться документ с пустыми реквизитами. Наш модуль проверяет JSON-схему перед генерацией.
  • Неправильный выбор конвертера: mPDF не поддерживает сложные таблицы с объединёнными ячейками — для таких случаев нужен LibreOffice. Мы помогаем выбрать оптимальный вариант.
  • Отсутствие кэширования: при каждом вызове модуль считывает шаблон из БД. Рекомендуем включить кэширование через \Bitrix\Main\Data\Cache.

Опыт и гарантии

10+ лет в разработке на Битрикс, более 50 проектов по автоматизации документов. Работаем с шаблонами любого объёма — от простых счетов до многостраничных контрактов с QR-кодами и цифровыми подписями. Сертифицированные специалисты 1С-Битрикс. Соблюдаем сроки: 95% проектов сдаём вовремя. Свяжитесь с нами для обсуждения вашего проекта — получите чёткое ТЗ, сроки и индивидуальную стоимость. Закажите разработку модуля и исключите ошибки в документах навсегда.