Разработка модуля печатных форм 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля печатных форм 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • 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С-Битрикс

В Битрикс нет встроенного механизма генерации документов. Заказ можно распечатать через браузер, но это даёт неформатированную страницу без реквизитов, подписей и фирменного стиля. Юридически значимые документы — счёт, накладная, акт — приходится формировать вручную в бухгалтерии. Модуль печатных форм закрывает этот пробел: менеджер нажимает кнопку в заказе и получает 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(),
        ];

        $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-реализации часто имеют ошибки в падежах, поэтому обычно пишем собственную под требования проекта.

Кнопка в административном заказе

Кнопка «Распечатать» добавляется в интерфейс заказа через обработчик события 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

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

Масштаб Состав Срок
Базовый 1–2 шаблона (счёт, акт), HTML→PDF, кнопка в заказе 4–6 дней
Стандартный + 3–5 шаблонов, ТОРГ-12 в XLSX, сохранение документов, вложение в email 8–12 дней
Расширенный + Редактор шаблонов в Admin UI, версионирование, пакетная генерация 14–20 дней