Налаштування автоматичної зміни статусів замовлення 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С-Бітрікс

Ручна зміна статусів менеджером — вузьке місце. При обсязі від 100 замовлень на день на це витрачається значний час, зростає ризик забутих замовлень. Автоматизація закриває типові сценарії: «перевести до Підтверджено після оплати», «скасувати якщо передоплата не надійшла за 24 години», «перевести до Доставлено після підтвердження від транспортної компанії».

Автозміна статусу при оплаті

Подія OnSalePaymentPaid спрацьовує, коли платіжний модуль позначає оплату проведеною — і при ручному підтвердженні менеджером, і при автоматичному IPN від платіжної системи:

AddEventHandler('sale', 'OnSalePaymentPaid', function(\Bitrix\Main\Event $event) {
    $payment = $event->getParameter('ENTITY');
    $order = $payment->getOrder();

    if ($payment->isPaid() && $order->getField('STATUS_ID') === 'WAIT_PREPAY') {
        $order->setField('STATUS_ID', 'F');
        $order->save();
    }
});

Автоскасування після закінчення часу

Реалізується через агент Бітрікс — він запускається за розкладом і перевіряє замовлення без оплати:

// Реєстрація агента (одноразово)
\CAgent::AddAgent(
    'Local\Sale\OrderAgents::cancelUnpaidOrders();',
    'local',
    'N',
    3600, // кожну годину
    '',
    'Y',
    \ConvertTimeStamp(time() + 3600, 'FULL'),
);

class OrderAgents
{
    public static function cancelUnpaidOrders(): string
    {
        $deadline = new \Bitrix\Main\Type\DateTime();
        $deadline->add('-24 hours');

        $result = \Bitrix\Sale\Internals\OrderTable::getList([
            'filter' => [
                'STATUS_ID'    => 'WAIT_PREPAY',
                '<DATE_INSERT' => $deadline,
            ],
            'select' => ['ID'],
            'limit'  => 50,
        ]);

        while ($row = $result->fetch()) {
            $order = \Bitrix\Sale\Order::load($row['ID']);
            if ($order) {
                $order->setField('STATUS_ID', 'CANCEL');
                $order->save();
            }
        }

        return 'Local\Sale\OrderAgents::cancelUnpaidOrders();';
    }
}

Ліміт 50 замовлень за ітерацію захищає від таймауту при великому накопиченому обсязі.

Автоматизація через бізнес-процеси

Для складних ланцюжків з умовами та затримками — бізнес-процеси Sale (Інтернет-магазин → Бізнес-процеси замовлень). Доступні тригери:

  • За статусом — запуск при переході до певного статусу
  • За оплатою — при підтвердженні або поверненні платежу
  • За часом — через N годин/днів після створення або зміни статусу

Приклад: «Через 2 години після переходу до Передано кур'єру — надіслати SMS із запитом оцінки». Реалізується без коду через конструктор BP.

Інтеграція зі статусами транспортних компаній

// Webhook від ТК — POST /bitrix/tools/delivery_webhook.php
$trackNumber    = $_POST['track'];
$deliveryStatus = $_POST['status'];

$shipmentResult = \Bitrix\Sale\Internals\ShipmentTable::getList([
    'filter' => ['TRACKING_NUMBER' => $trackNumber],
    'select' => ['ORDER_ID'],
]);

if ($shipment = $shipmentResult->fetch()) {
    $order = \Bitrix\Sale\Order::load($shipment['ORDER_ID']);
    $statusMap = ['delivered' => 'D', 'returned' => 'RETURN_INIT', 'lost' => 'PROBLEM'];
    $newStatus = $statusMap[$deliveryStatus] ?? null;

    if ($newStatus && $order) {
        $order->setField('STATUS_ID', $newStatus);
        $order->save();
    }
}

Автозавершення доставлених замовлень

Перехід до «Закрито» через 14 днів після доставки без претензій:

public static function completeDeliveredOrders(): string
{
    $deadline = new \Bitrix\Main\Type\DateTime();
    $deadline->add('-14 days');

    $result = \Bitrix\Sale\Internals\OrderTable::getList([
        'filter' => ['STATUS_ID' => 'D', '<DATE_STATUS' => $deadline],
        'select' => ['ID'],
        'limit'  => 100,
    ]);

    while ($row = $result->fetch()) {
        $order = \Bitrix\Sale\Order::load($row['ID']);
        if ($order) {
            $order->setField('STATUS_ID', 'CLOSED');
            $order->save();
        }
    }

    return 'Local\Sale\OrderAgents::completeDeliveredOrders();';
}

Терміни виконання

Автозміна при оплаті та один агент автоскасування — 3–5 годин. Повна автоматизація з інтеграцією ТК, бізнес-процесами та кількома агентами — 1–3 робочих дні.