Настройка маршрутизации доставки на 1С-Битрикс
Маршрутизация доставки — это автоматический выбор способа доставки, склада отправки и зоны доставки в зависимости от адреса покупателя. В Битрикс базовая маршрутизация настраивается через зоны доставки и правила, но для сложных сценариев с несколькими складами и разными перевозчиками нужна дополнительная логика.
Зоны доставки в Битрикс
Зоны доставки хранятся в b_sale_location — это иерархический справочник регионов. Способы доставки (b_sale_delivery_service) привязываются к зонам через b_sale_delivery_location. Когда покупатель выбирает город, Битрикс показывает только те способы доставки, которые работают в эту зону.
Добавить привязку способа доставки к зоне:
\Bitrix\Sale\Delivery\Services\Manager::save([
'ID' => $deliveryServiceId,
'ACTIVE' => 'Y',
'RESTRICTED_LOCATION' => [$locationId1, $locationId2],
]);
Выбор склада отправки по адресу
Логика «какой склад ближе к адресу доставки» в стандартном Битрикс отсутствует. Реализуется через обработчик события OnSaleShipmentBeforeSave или через кастомный обработчик оформления заказа.
Простая реализация — таблица bl_store_zones с соответствием location_id → store_id. При создании отгрузки определяем регион из адреса доставки и назначаем склад:
$locationId = $order->getPropertyCollection()
->getItemByOrderPropertyCode('LOCATION')
?->getValue();
$storeId = StoreZoneTable::getStoreByLocation($locationId) ?? DEFAULT_STORE_ID;
$shipment->setField('DELIVERY_DOC_NUM', $storeId);
Приоритизация перевозчиков
При нескольких активных службах доставки можно автоматически предлагать оптимальную по стоимости или скорости. Создайте правила приоритизации в bl_delivery_rules:
| Поле | Описание |
|---|---|
location_group |
Регион или группа регионов |
order_weight_from / to |
Диапазон веса |
delivery_service_id |
Приоритетная служба доставки |
priority |
Порядок предложения |
Агент или компонент корзины при расчёте доставки сортирует доступные службы по этим правилам.
Настройка правил через административный раздел
Для управления правилами маршрутизации без редактирования кода создайте административный компонент. Используйте CAdminList или React-компонент в /local/admin/. Данные хранятся в b_option (для простых настроек) или в пользовательской таблице (для сложных).
Что настраиваем
- Зоны доставки в
b_sale_locationи привязку служб доставки к зонам - Таблицу
bl_store_zonesс маппингом регионов на склады отправки - Логику выбора склада при создании отгрузки
- Правила приоритизации перевозчиков по весу и региону
- Административный интерфейс управления правилами маршрутизации







