Настройка зон доставки на 1С-Битрикс
Зоны доставки в Битрикс — это механизм, позволяющий привязывать правила доставки (обработчики, тарифы, условия) к конкретным географическим регионам. Без грамотно настроенных зон один и тот же метод доставки будет предлагаться покупателям из Владивостока и Москвы с одинаковой ценой — что бессмысленно.
Как устроены зоны в Битрикс
Зоны доставки живут в таблице b_sale_location_group. Каждая зона — набор локаций (городов, регионов, стран) из справочника b_sale_location. Обработчик доставки привязывается к зонам через «Ограничения» (\Bitrix\Sale\Delivery\Restrictions).
Три уровня ограничений:
-
По локации (
\Bitrix\Sale\Delivery\Restrictions\ByLocation) — зоны из справочника - По сумме заказа — минимальная/максимальная сумма для активации метода
- По весу — диапазон веса отправления
Настройка через административный интерфейс
Стандартный путь: «Магазин → Настройки → Службы доставки». Для каждой службы:
- Вкладка «Ограничения» → «Добавить ограничение» → «Местоположение»
- Выбрать зоны, для которых метод доступен
- Для разных зон можно создать несколько экземпляров одного обработчика с разными тарифами
Типовая структура зон для интернет-магазина с доставкой по РФ:
| Зона | Состав | Метод доставки |
|---|---|---|
| Москва | Москва и область | Курьер, СДЭК, Boxberry |
| Крупные города | Города 500к+ | СДЭК, Boxberry, ПЭК |
| Регионы РФ | Остальная Россия | Почта России, СДЭК |
| СНГ | Беларусь, Казахстан, прочие | Почта России (EMS) |
Программная настройка зон
use Bitrix\Sale\Location\LocationTable;
use Bitrix\Sale\Location\GroupLocationTable;
// Создание группы (зоны)
$group = \Bitrix\Sale\Location\GroupTable::add([
'CODE' => 'ZONE_MOSCOW_REGION',
]);
$groupId = $group->getId();
// Добавление локаций в группу
$locationIds = LocationTable::getList([
'filter' => ['NAME.NAME' => ['Москва', 'Московская область']],
'select' => ['ID'],
])->fetchAll();
foreach ($locationIds as $loc) {
GroupLocationTable::add([
'LOCATION_ID' => $loc['ID'],
'GROUP_ID' => $groupId,
]);
}
Динамические зоны и кастомные ограничения
Стандартных ограничений по локации не всегда достаточно. Пример: зона «Москва в пределах МКАД» — её в справочнике нет. Решение: кастомный класс ограничения.
class ByMoscowRingRoadRestriction extends \Bitrix\Sale\Delivery\Restrictions\Base
{
public static function getSortedCode(): string { return 'BY_MKAD'; }
public static function check(array $params, int $serviceId): bool
{
$locationCode = $params['LOCATION'] ?? '';
// Проверяем по коду КЛАДР или собственной геобазе
return self::isInsideMkad($locationCode);
}
public static function getClassTitle(): string { return 'Внутри МКАД'; }
}
Класс регистрируется в init.php:
\Bitrix\Sale\Delivery\Restrictions\Manager::register(ByMoscowRingRoadRestriction::class);
Работа с локациями покупателя
При оформлении заказа Битрикс определяет локацию через свойство заказа с типом LOCATION. Из этого свойства берётся код локации, который сверяется с зонами обработчиков. Если локация не заполнена — все обработчики доступны.
// Получить текущую локацию из заказа
$locationProp = $order->getPropertyCollection()->getDeliveryLocation();
$locationCode = $locationProp?->getValue();
// Найти зоны, в которые попадает локация
$groups = \Bitrix\Sale\Location\GroupLocationTable::getList([
'filter' => ['LOCATION.CODE' => $locationCode],
'select' => ['GROUP_ID'],
])->fetchAll();
Сроки
| Состав | Срок |
|---|---|
| Стандартная настройка зон через админку | 1 день |
| + Программная настройка + кастомные ограничения | 2–3 дня |







