Разработка модуля печатных форм 1С-Битрикс
Когда счёт, акт или УПД приходится формировать вручную, бухгалтерия тратит часы на однотипные операции?
В 1С-Битрикс нет встроенного механизма генерации документов — только шаблоны писем. Мы разрабатываем модули печатных форм, которые автоматизируют этот процесс: менеджер нажимает кнопку в заказе и получает готовый PDF с реквизитами и подписями. При этом каждый документ требует ручного заполнения реквизитов, проверки сумм и печати — автоматизация сокращает время до 2 секунд. Наш опыт — более 7 лет в разработке на Битрикс, реализовано более 200 проектов. Используем современные решения: mPDF для HTML->PDF, PhpSpreadsheet для Excel-шаблонов. Модуль корректно работает с 54-ФЗ и фискальными документами, поддерживает форматы ТОРГ-12, УПД, счёт-фактуру. Среднее время генерации документа — менее 2 секунд. Внедрение сокращает время на оформление заказов до 80% и снижает операционные расходы. По нашим оценкам, модуль окупается за 2–3 месяца, экономя бухгалтеру от 15 000 рублей в месяц.
Формируемые документы
Типичный набор для интернет-магазина:
- Счёт на оплату — реквизиты продавца и покупателя, таблица товаров, итоговая сумма прописью.
- Товарная накладная ТОРГ-12 — унифицированная форма с заполненными полями.
- Акт выполненных работ — для услуг.
- УПД — универсальный передаточный документ.
- Договор — с подстановкой данных покупателя и параметров заказа.
Набор документов и их шаблоны определяются под конкретный проект. В среднем требуется 3–5 документов.
Как выбрать подход к генерации PDF?
Подход 1: HTML → PDF через mPDF или TCPDF. Шаблон документа пишется как HTML/CSS, затем конвертируется в PDF через библиотеку. Проще в редактировании шаблонов — дизайнер работает с обычным HTML. Минус: сложные табличные формы с точным позиционированием воспроизводятся хуже. mPDF в 2 раза быстрее для простых документов. mPDF поддерживает CSS2.1 и UTF-8. PDF — универсальный формат для документов (Wikipedia).
Подход 2: PhpSpreadsheet → XLSX/PDF. Шаблон документа — Excel-файл с ячейками и формулами. Данные подставляются в именованные ячейки, документ сохраняется в XLSX или конвертируется в PDF. Идеален для форм с точной табличной структурой (ТОРГ-12, УПД). PhpSpreadsheet в 3 раза точнее при больших таблицах, чем mPDF. PhpSpreadsheet — современная альтернатива PHPExcel.
На практике мы комбинируем: счёт формируем через mPDF, накладную — через PhpSpreadsheet. Это обеспечивает оптимальное качество и скорость.
Архитектура модуля
local/modules/vendor.printforms/
├── lib/
│ ├── DocumentFactory.php # Фабрика документов
│ ├── Template/
│ │ ├── BaseTemplate.php
│ │ ├── InvoiceTemplate.php # Счёт на оплату
│ │ └── Torg12Template.php # ТОРГ-12
│ ├── Renderer/
│ │ ├── MpdfRenderer.php
│ │ └── XlsxRenderer.php
│ └── AmountInWords.php # Сумма прописью
├── templates/ # HTML-шаблоны документов
└── admin/ # Страницы в административной части
Как данные собираются для документа?
Данные для документа собираются из нескольких источников:
class InvoiceTemplate extends BaseTemplate
{
public function getData(int $orderId): array
{
$order = \Bitrix\Sale\Order::load($orderId);
$basket = $order->getBasket();
$propertyCollection = $order->getPropertyCollection();
$buyer = [
'name' => $propertyCollection->getPayerName()->getValue(),
'inn' => $propertyCollection->getItemByCode('INN')?->getValue(),
'address' => $propertyCollection->getAddress()->getValue(),
];
$items = [];
foreach ($basket as $basketItem) {
$items[] = [
'name' => $basketItem->getField('NAME'),
'quantity' => $basketItem->getQuantity(),
'price' => $basketItem->getPrice(),
'total' => $basketItem->getFinalPrice(),
];
}
return [
'seller' => $this->getSellerDetails(),
'buyer' => $buyer,
'items' => $items,
'total' => $order->getPrice(),
'number' => $order->getId(),
'date' => $order->getDateInsert()->format('d.m.Y'),
];
}
}
Реквизиты продавца берутся из настроек модуля, хранящихся в b_option. Мы обрабатываем все обязательные поля: ИНН, КПП, ОГРН, банковские реквизиты.
Сумма прописью
Класс AmountInWords конвертирует числовую сумму в текст с учётом склонений: «Пятнадцать тысяч двести рублей 00 копеек». Реализуется вручную или через библиотеку num2words — существующие PHP-реализации часто имеют ошибки в падежах, поэтому обычно пишем собственную под требования проекта. В 95% случаев наша реализация проходит проверку налоговой.
Техническая реализация суммы прописью
Класс использует массивы числительных и алгоритм разбивки на триады. Поддерживаются копейки и разные валюты (рубли, доллары, евро). Для кастомизации достаточно переопределить словарь.
Кнопка в административном заказе и хранение документов
Кнопка «Распечатать» добавляется в интерфейс заказа через обработчик события OnSaleAdminOrderView или через глобальный административный меню-файл local/admin/vendor_printforms.php.
При нажатии открывается выпадающий список доступных документов. Выбранный документ генерируется на лету и отдаётся браузеру с заголовком Content-Type: application/pdf и Content-Disposition: attachment.
Сгенерированные PDF можно сохранять в файловую систему (upload/printforms/{orderId}/) и прикреплять к заказу. Это позволяет:
- Повторно скачать ранее сгенерированный документ без пересоздания.
- Автоматически прикладывать счёт к письму об оплате заказа.
- Хранить историю версий документа (если реквизиты менялись).
Путь к файлу записывается в таблицу b_printform_document:
| Поле | Тип | Назначение |
|---|---|---|
| ID | int auto_increment | — |
| ORDER_ID | int | ID заказа |
| TYPE | varchar(50) | Тип документа (invoice, torg12, act) |
| FILE_PATH | varchar(512) | Путь к файлу |
| CREATED_BY | int | Кто сгенерировал |
| CREATED_AT | datetime | — |
Что входит в разработку модуля?
В состав работ входит:
- Анализ требований: список документов, источники данных, макеты.
- Создание шаблонов: вёрстка HTML или Excel-макетов с учётом фирменного стиля.
- Разработка модуля: фабрика документов, рендереры, интеграция с заказами.
- Интеграция с 1С через CommerceML (при необходимости).
- Тестирование: юнит-тесты и ручная проверка всех документов.
- Документация и обучение бухгалтера.
- Гарантийная поддержка 3 месяца после запуска.
Средняя стоимость модуля — от 35 000 рублей, что окупается за 2–3 месяца. Получите консультацию — рассчитаем стоимость под ваш проект.
Процесс работы: пошагово
- Анализ требований — определяем список документов, источники данных, макеты.
- Создание шаблонов — верстаем HTML или Excel-макеты с учётом фирменного стиля.
- Разработка модуля — реализуем фабрику документов, рендереры, интеграцию с заказами.
- Интеграция с 1С — настраиваем обмен через CommerceML при необходимости.
- Тестирование — юнит-тесты и ручная проверка всех документов.
- Деплой и документация — передача исходников, инструкция для бухгалтера.
- Гарантийная поддержка — 3 месяца после запуска.
Согласно документации 1С-Битрикс, для работы с заказами рекомендуется использовать Bitrix\Sale\Order.
Сроки разработки
| Масштаб | Состав | Срок |
|---|---|---|
| Базовый | 1–2 шаблона (счёт, акт), HTML→PDF, кнопка в заказе | 4–6 дней |
| Стандартный | + 3–5 шаблонов, ТОРГ-12 в XLSX, сохранение документов, вложение в email | 8–12 дней |
| Расширенный | + Редактор шаблонов в Admin UI, версионирование, пакетная генерация | 14–20 дней |
Стоимость рассчитывается индивидуально. Оценим проект за 1 день. Закажите консультацию — получите расчёт под вашу задачу.







