Налаштування маршрутизації доставки на 1С-Bitrix
Маршрутизація доставки — це автоматичний вибір способу доставки, складу відправки та зони доставки залежно від адреси покупця. У Bitrix базова маршрутизація налаштовується через зони доставки та правила, але для складних сценаріїв з кількома складами та різними перевозниками потрібна додаткова логіка.
Зони доставки у Bitrix
Зони доставки зберігаються в b_sale_location — це ієрархічний довідник регіонів. Способи доставки (b_sale_delivery_service) прив'язуються до зон через b_sale_delivery_location. Коли покупець вибирає місто, Bitrix показує лише ті способи доставки, які працюють у цю зону.
Додайте прив'язку способу доставки до зони:
\Bitrix\Sale\Delivery\Services\Manager::save([
'ID' => $deliveryServiceId,
'ACTIVE' => 'Y',
'RESTRICTED_LOCATION' => [$locationId1, $locationId2],
]);
Вибір складу відправки за адресою
Логіка «який склад ближче до адреси доставки» у стандартному Bitrix відсутня. Реалізується через обробник события 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з маппінгом регіонів на склади відправки - Логіку вибору складу при створенні отправки
- Правила пріоритизації перевозників за вагою та регіоном
- Адміністративний інтерфейс управління правилами маршрутизації







