Уявіть: інтернет-магазин на Бітрікс зростає, але клієнти скаржаться — не можна вибрати зручний час доставки. Стандартна форма пропонує лише дату, а кур'єрська служба вимагає слоти «з 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+ проектів з Бітрікс. Отримайте консультацію — напишіть у чат або на пошту. Замовте налаштування інтервалів і позбудьтеся втрат замовлень.







