Налаштування зон доставки в 1С-Бітрікс
Зони доставки визначають, які служби доставки доступні для кожного регіону, та дозволяють встановлювати різні тарифи для різних географічних областей. У 1С-Бітрікс зони реалізовані через механізм «Місцезнаходжень» — стандартний, але такий, що вимагає розуміння.
Як працюють місцезнаходження в 1С-Бітрікс
1С-Бітрікс зберігає ієрархію місцезнаходжень у таблицях b_sale_location та b_sale_location_name. Ієрархія: країна → регіон → район → місто. Кожне місцезнаходження має CODE (рядковий, наприклад RU-77 для Москви) та ID.
Служби доставки прив'язуються до місцезнаходжень у розділі Магазин → Налаштування → Служби доставки → [служба] → Місцезнаходження. Якщо місцезнаходження не додано — служба для нього недоступна.
Налаштування зон через адміністративний інтерфейс
Три сценарії налаштування зон:
Сценарій 1: Доставка тільки до певних міст Додаємо конкретні міста до списку місцезнаходжень служби. Служба буде доступна тільки для них.
Сценарій 2: Доставка по всій країні, крім деяких регіонів
Додаємо «Росія» як батьківське місцезнаходження. Служба доступна скрізь. Винятки реалізуються окремою логікою в обробнику (isCompatible()) або через створення кількох служб.
Сценарій 3: Різні тарифи для різних зон Створюємо кілька екземплярів однієї служби: «Доставка по Москві» (ціна 300 руб.), «Доставка по МО» (ціна 500 руб.), «Доставка по Росії» (за тарифом). Кожна прив'язана до своєї зони місцезнаходжень.
Кастомні зони через обмеження
Стандартні місцезнаходження 1С-Бітрікс не завжди збігаються із зонами доставки реальних служб. Кастомні зони реалізуються через таблицю-маппінг:
// Таблиця зон: city_name → zone_id
// Зберігається в інфоблоці або кастомній таблиці
$zoneTable = [
'Москва' => 'zone_1',
'Санкт-Петербург' => 'zone_1',
'Новосибірськ' => 'zone_2',
// ...
];
// В обробнику служби доставки:
protected function calculateConcrete(\Bitrix\Sale\Shipment $shipment): \Bitrix\Sale\Delivery\CalculationResult
{
$city = $this->getShipmentCity($shipment);
$zone = ZoneMapper::getZone($city);
$price = $this->getPriceByZone($zone);
// ...
}
Прив'язка вартості до зон
Вартість по зонах зберігається в налаштуваннях служби доставки (b_sale_delivery_service_params) або в окремій кастомній таблиці. Приклад структури:
| Зона | Мін. термін | Макс. термін | Ціна |
|---|---|---|---|
| zone_1 (Москва, СПб) | 1 | 2 | 300 |
| zone_2 (міста-мільйонники) | 2 | 4 | 450 |
| zone_3 (решта Росії) | 3 | 7 | 650 |
Перевірка зони в реальному часі
Для динамічного визначення зони за введеною адресою — AJAX-запит при введенні міста у форму замовлення. Визначаємо зону, оновлюємо список доступних служб і цін без перезавантаження сторінки.
Обмеження: коли стандартних зон не вистачає
Стандартний механізм місцезнаходжень 1С-Бітрікс спирається на довідник міст, який не завжди збігається з реальністю. Поширені проблеми:
- Покупець вводить «Новосибірськ» — в довіднику є. Вводить «Новосиб» або «НСК» — не знаходить.
- Служби доставки зонують територію інакше, ніж адміністративний поділ (наприклад, Московська область — одна зона, але ближнє Підмосков'я до 30 км — інший тариф).
- Розрахунок по зоні потрібен, але адреса містить тільки вулицю без міста — 1С-Бітрікс не знає зону.
У таких випадках зональний розрахунок повністю виноситься в код обробника служби доставки, а довідник місцезнаходжень 1С-Бітрікс використовується тільки для відображення форми (не для фільтрації служб).
Імпорт місцезнаходжень
При первинному налаштуванні магазину з нуля або при зміні структури місцезнаходжень — масовий імпорт через стандартний агент \Bitrix\Sale\Location\Admin\LocationHelper або безпосередньо в таблиці b_sale_location, b_sale_location_name. Для російського ринку використовується довідник ФІАС або КЛАДР, перетворений у формат 1С-Бітрікс. Готові набори даних постачаються у дистрибутиві 1С-Бітрікс та оновлюються через оновлення платформи.
Зони та валюта
Якщо магазин працює в кількох країнах — зони прив'язуються до країн, а кожна країна має свою валюту. 1С-Бітрікс підтримує кілька валют на сайті (Магазин → Налаштування → Валюти). Тариф служби доставки задається в базовій валюті сайту, конвертація відбувається автоматично за курсом ЦБ. При кастомних зонах вартість вказується явно в потрібній валюті в налаштуваннях служби.
Терміни виконання
Налаштування зон через стандартний інтерфейс місцезнаходжень — 1 робочий день. Кастомні зони з таблицею-маппінгом і динамічним розрахунком — 2–3 дні. Імпорт та актуалізація довідника місцезнаходжень (ФІАС/КЛАДР) — 0.5 дня.







