Налаштування статусів замовлення 1С-Бітрікс
Кожне замовлення проходить через ланцюжок статусів: «Прийнято» → «Обробляється» → «Передано в доставку» → «Доставлено». Стандартна поставка 1С-Бітрікс дає базовий набір, який рідко збігається з реальним операційним процесом. Статус «На погодженні» для корпоративних замовлень, «Очікує передоплату», «Резерв підтверджено», «Повернення ініційовано» — все це потребує налаштування.
Структура статусів
Статуси зберігаються в таблиці b_sale_status. Ключові атрибути:
- ID — код (латиниця + цифри), використовується в коді та інтеграціях
-
Тип —
O(замовлення) абоD(доставка/відвантаження) - Колір — для візуального виділення в списку замовлень
- «Є статусом скасування» — автоматично знімає резерви з товарів
- «Замовлення виконано» — позначає замовлення завершеним, блокує ряд операцій
Статуси відвантажень (D) — окрема сутність для багатовідвантажувальної моделі.
Додавання статусу через API
use Bitrix\Sale\OrderStatus;
$result = OrderStatus::add([
'ID' => 'WAIT_PREPAY',
'TYPE' => 'O',
'NOTIFY_BUYER' => 'Y',
'COLOR' => '#f0a500',
'SORT' => 25,
]);
\Bitrix\Sale\Internals\StatusLangTable::add([
'STATUS_ID' => 'WAIT_PREPAY',
'LID' => 'ua',
'NAME' => 'Очікує передоплату',
'DESCRIPTION' => 'Замовлення підтверджено, очікуємо надходження оплати',
]);
Зміна статусу в коді
$order = \Bitrix\Sale\Order::load($orderId);
if ($order) {
$order->setField('STATUS_ID', 'WAIT_PREPAY');
$saveResult = $order->save();
if (!$saveResult->isSuccess()) {
$errors = $saveResult->getErrorMessages();
}
}
При зміні статусу автоматично спрацьовують події OnSaleStatusOrderChange та OnSaleOrderSaved. Якщо статус позначено прапором «Повідомляти покупця» — відправляється лист через шаблони поштових подій.
Матриця допустимих переходів
Обмеження переходів між статусами через обробник події:
AddEventHandler('sale', 'OnSaleOrderBeforeSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
if ($order->isNew()) return;
$oldStatus = $order->getField('STATUS_ID');
// Отримання нового статусу через changedFields
$changedFields = $order->getFields()->getChangedValues();
$newStatus = $changedFields['STATUS_ID'] ?? $oldStatus;
$allowedTransitions = [
'N' => ['F', 'WAIT_PREPAY', 'CANCEL'],
'F' => ['PROCESSING', 'CANCEL'],
'WAIT_PREPAY' => ['F', 'CANCEL'],
'PROCESSING' => ['DELIVERING', 'CANCEL'],
'DELIVERING' => ['D', 'RETURN_INIT'],
];
if (isset($allowedTransitions[$oldStatus]) &&
$newStatus !== $oldStatus &&
!in_array($newStatus, $allowedTransitions[$oldStatus])) {
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
new \Bitrix\Sale\ResultError("Перехід із {$oldStatus} до {$newStatus} заборонено"),
'sale'
);
}
});
Типові набори статусів
Стандартний B2C:
Новий → Підтверджено → Збирається → Передано в доставку → Доставлено / Скасовано
B2B із погодженням:
Новий → На погодженні → Очікує передоплату → Підтверджено → У виробництві → Готовий до відвантаження → Відвантажено → Закрито
З поверненнями:
До основного ланцюжка: Повернення ініційовано → Товар отримано → Повернення виконано
Зміна статусу відвантаження
$shipmentCollection = $order->getShipmentCollection();
foreach ($shipmentCollection as $shipment) {
if (!$shipment->isSystem()) {
$shipment->setField('STATUS_ID', 'DELIVERING');
}
}
$order->save();
Терміни виконання
Налаштування 5–8 статусів із назвами та кольорами — 2–4 години. Налаштування з матрицею переходів, інтеграцією з 1С та кастомними сповіщеннями — 1–2 робочі дні.







