Розроблення модуля друкованих форм для 1С-Bitrix
У Bitrix немає вбудованого механізму генерації документів. Замовлення можна надрукувати через браузер, але це дає неформатовану сторінку без реквізитів, підписів та фірмового стилю. Юридично значущі документи — рахунок-фактура, накладна, акт — приходиться формувати вручну. Модуль друкованих форм закриває цей пробіл: менеджер натискає кнопку і отримує PDF.
Необхідні документи
Типовий набір для інтернет-магазину:
- Рахунок-фактура — реквізити продавця та покупця, таблиця товарів, загальна сума прописом
- Товарна накладна ТОРГ-12 — уніфікована форма з заповненими полями
- Акт виконаних робіт — для послуг
- УПД — універсальний передавальний документ
- Договір — з підстановкою даних покупця та параметрів замовлення
Набір документів визначається для конкретного проекту.
Підходи до генерації PDF
Підхід 1: HTML → PDF через mPDF/TCPDF — Шаблон документа пишеться як HTML/CSS, потім конвертується в PDF. Простіше редагувати — дизайнер працює зі звичайним HTML. Мінус: складні табличні форми з точним позиціюванням відтворюються гірше.
Підхід 2: PhpSpreadsheet → XLSX/PDF — Шаблон документа — Excel-файл із комірками та формулами. Дані підставляються в іменовані комірки, документ зберігається як XLSX або конвертується в PDF. Ідеальний для форм з точною табличною структурою (ТОРГ-12, УПД).
На практиці перший підхід для рахунків-фактур та актів, другий — для накладних.
Архітектура модуля
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(),
];
// ... більше даних
}
}
Генерація за запитом
На сторінці замовлення в адміністрації кнопка «Завантажити рахунок» запускає:
GET /bitrix/admin/order_print.php?ORDER_ID=123&DOCUMENT=invoice
Скрипт рендирує шаблон, передає до рендера, повертає PDF з відповідними заголовками.
Терміни розроблення
| Етап | Тривалість |
|---|---|
| Базова установка, рахунок + ТОРГ-12 | 8–10 днів |
| + Акт, УПД, Шаблони контракту | 12–16 днів |
| + Admin UI, пакетна генерація, відправлення email | 16–20 днів |







