Налаштування автоматичного формування відвантажувальних документів 1С-Бітрікс

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

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування автоматичного формування відправних документів 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: при зміні статусу створюється завдання менеджеру зі посиланням на документ.