Настройка автоматического формирования отгрузочных документов 1С-Битрикс

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

Менеджер меняет статус заказа на «Отгружен» — накладная должна сформироваться сама. Вместо этого он открывает отдельный интерфейс, вручную вводит данные, которые уже есть в заказе. Это дублирование работы, которое убирается одним обработчиком события.

Событие смены статуса заказа

Точка входа — событие OnSaleStatusOrderChange модуля sale. Оно вызывается при каждой смене статуса. Параметры: ORDER_ID, STATUS_ID (новый статус), OLD_STATUS_ID.

Обработчик регистрируется в /bitrix/php_interface/init.php или в модуле:

AddEventHandler('sale', 'OnSaleStatusOrderChange', 'generateShipmentDoc');

function generateShipmentDoc($orderId, $newStatus, $oldStatus) {
    // Генерировать документ только при переходе в статус отгрузки
    if ($newStatus !== 'S') return; // 'S' - пример статуса отгрузки

    $order = \Bitrix\Sale\Order::load($orderId);
    if (!$order) return;

    generateInvoiceForOrder($order);
}

В новом API Битрикса (D7) событие называется OnSaleOrderSaved и передаёт объект заказа — рекомендуется использовать его вместо устаревшего.

Структура отгрузки в модуле sale

Отгрузка в Битриксе — объект \Bitrix\Sale\Shipment. Каждый заказ может иметь несколько отгрузок. Таблица b_sale_shipment хранит отгрузки с полями: ORDER_ID, DELIVERY_ID, STATUS_ID, PRICE_DELIVERY, CURRENCY, DEDUCTED (Y — товары списаны со склада).

Строки отгрузки — b_sale_shipment_item: SHIPMENT_ID, BASKET_ID, QUANTITY, RESERVED_QUANTITY.

При формировании отгрузочного документа нужно читать именно из b_sale_shipment_item, а не из b_sale_basket — при частичной отгрузке количества могут различаться.

Генерация PDF-накладной

Для генерации PDF используется внешняя библиотека — mpdf или tcpdf. В Битриксе нет встроенного PDF-генератора для документов, но есть механизм печатных форм через компонент bitrix:sale.order.invoice.

Программное создание PDF через mpdf:

function generateInvoiceForOrder(\Bitrix\Sale\Order $order) {
    $shipmentCollection = $order->getShipmentCollection();

    $items = [];
    foreach ($shipmentCollection as $shipment) {
        if ($shipment->isSystem()) continue;

        foreach ($shipment->getShipmentItemCollection() as $shipmentItem) {
            $basketItem = $shipmentItem->getBasketItem();
            $items[] = [
                'name'     => $basketItem->getField('NAME'),
                'quantity' => $shipmentItem->getQuantity(),
                'price'    => $basketItem->getPrice(),
                'sum'      => $basketItem->getPrice() * $shipmentItem->getQuantity(),
            ];
        }
    }

    ob_start();
    include __DIR__ . '/templates/invoice.php'; // шаблон с $items, $order
    $html = ob_get_clean();

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

    $pdfContent = $mpdf->Output('', 'S');

    // Сохранить файл
    $fileId = \CFile::SaveFile([
        'name'    => 'invoice_' . $order->getId() . '.pdf',
        'type'    => 'application/pdf',
        'content' => $pdfContent,
    ], 'sale/invoices');

    // Привязать к заказу через свойство или кастомную таблицу
    saveInvoiceFile($order->getId(), $fileId);
}

Прикрепление документа к заказу

Битрикс не имеет стандартного места для хранения файлов заказа. Варианты:

  • Свойство заказа типа "Файл" — добавляется через b_sale_order_props с типом FILE.
  • Кастомная таблица sale_order_documents с полями ORDER_ID, FILE_ID, DOC_TYPE, DATE_CREATE.
  • Сохранение в свойство инфоблока CRM-сделки если включён модуль crm.

Рекомендуется кастомная таблица — она не зависит от изменений в структуре свойств заказа.

Отправка документа менеджеру

После генерации документ отправляется на email менеджера или в CRM. Через событие OnSaleOrderSaved доступен ORDER_ID — по нему берётся ответственный менеджер из b_sale_order (поле RESPONSIBLE_ID) и отправляется письмо через \Bitrix\Main\Mail\Event::send() с шаблоном типа SALE_NEW_ORDER или кастомным.

Альтернатива — интеграция с модулем tasks: при смене статуса создаётся задача менеджеру со ссылкой на документ.