Представьте: интернет-магазин на Битрикс растёт, но клиенты жалуются — нельзя выбрать удобное время доставки. Стандартная форма предлагает только дату, а курьерская служба требует слоты «с 10 до 14» или «с 18 до 22». Мы сталкивались с этим десятки раз за 5+ лет работы с Битрикс. Решение неочевидно: встроенные службы доставки не умеют управлять интервалами. Приходится реализовывать через свойства заказа или кастомный интерфейс. Один из наших клиентов — интернет-магазин продуктов — терял до 30% заказов из-за отсутствия выбора времени. После внедрения динамических слотов конверсия выросла на 15%. Другой клиент, с сезонными пиками, сталкивался с double booking при пиковой нагрузке — решили через транзакции и тегированное кэширование.
Почему стандартная служба доставки не подходит?
Распространённое заблуждение — думать, что в Битрикс достаточно включить опцию «интервал времени» в настройках доставки. На самом деле механизма слотов нет ни в одной штатной службе. Нужно либо использовать свойства заказа (тип «Список»), либо разрабатывать динамическую систему на highload-блоках. Первый вариант — быстрый, но статичный. Второй — гибкий, но требует программирования.
Как реализовать динамические слоты с ограничением вместимости?
Самый частый запрос от клиентов — «слоты с лимитами». Например, на интервал 10:00–14:00 можно принять только 10 заказов. Реализация через highload-блок DeliverySlots:
| Поле | Тип | Описание |
|---|---|---|
UF_DATE |
Дата | Дата доставки |
UF_SLOT |
Строка | Интервал (10:00–14:00) |
UF_CAPACITY |
Число | Максимум заказов |
UF_BOOKED |
Число | Забронировано |
При выборе даты и слота в корзине выполняется AJAX-запрос к кастомному компоненту:
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity('DeliverySlots'); $slots = $entity::getList([ 'filter' => [ 'UF_DATE' => $date, '<=UF_BOOKED' => 'UF_CAPACITY - 1', ], 'select' => ['UF_SLOT', 'UF_CAPACITY', 'UF_BOOKED'], ]); После подтверждения заказа — UF_BOOKED увеличивается внутри транзакции, чтобы избежать double booking. Это надёжнее, чем проверка на фронте. Для ускорения работы используем тегированное кэширование: список слотов кэшируется на 1 минуту, при обновлении UF_BOOKED кэш сбрасывается.
Как настроить статический список интервалов за 4 шага
- Создайте свойство заказа типа «Список» с нужными интервалами (например, «10:00–14:00», «14:00–18:00»).
- Привяжите свойство к службе доставки в настройках модуля «Торговый каталог».
- В компоненте оформления заказа укажите параметр
PROPERTIESс кодом свойства. - Добавьте условие вывода свойства только для нужной службы доставки.
Этот подход подходит для магазинов с простой логистикой до 50 заказов в день. Если нужны лимиты или интеграция с календарём курьеров — используйте динамические слоты.
Что входит в работу?
При заказе настройки интервалов доставки под ключ мы:
- анализируем требования и текущую архитектуру,
- выбираем оптимальный вариант (статический список / динамические слоты / интеграция с курьерским API),
- проектируем highload-блоки и настраиваем кэширование,
- реализуем кастомный компонент выбора слота с валидацией,
- тестируем на нагрузку и деплоим в продакшн,
- передаём документацию и обучаем вашу команду.
Гарантируем, что система не «упадёт» при пиковых заказах — используем тегированное кэширование и асинхронную проверку слотов. Все операции обновления бронирований выполняются в транзакциях, исключая двойные записи.
Какой подход выбрать: статический список или динамические слоты?
Статический список (свойство заказа с типом «Список») — для магазинов с простой логистикой до 50 заказов в день. Динамические слоты с highload-блоком дают контроль вместимости в реальном времени — лучше в 3 раза для интернет-магазинов с сезонными пиками. А интеграция с календарём курьеров (например, через REST API курьерской службы) позволяет полностью автоматизировать планирование.
Типичные ошибки при настройке
-
Double booking: возникает, если не использовать транзакции при обновлении
UF_BOOKED. Всегда оборачивайте запись вBitrix\Main\Application::getConnection()->startTransaction()и коммитьте только после успешного обновления. -
Тайм-ауты при пиковой нагрузке: решаются кэшированием списка слотов на 1 минуту (тегированный кэш). Настроить можно через
\Bitrix\Main\Data\Cache::createInstance(). -
Некорректное отображение устаревших слотов: удаляйте прошедшие слоты через агент ежедневно. Например,
CAgent::AddAgent(...).
Сроки настройки
| Вариант | Срок |
|---|---|
| Статичный список через свойство заказа | 2–4 часа |
| Динамические слоты с ограничением вместимости | 1–2 дня |
| + интеграция с календарём курьеров | 2–4 дня |
Стоимость рассчитывается индивидуально после анализа ваших задач. Мы предлагаем бесплатную консультацию: опишите свою ситуацию — инженер подберёт оптимальное решение. Опыт — 5+ лет, 100+ проектов по Битрикс. Получите консультацию — пишите в чат или на почту. Закажите настройку интервалов и избавьтесь от потерь заказов.







