Настройка статусов заказа 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' => 'ru',
'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 рабочих дня.







