Налаштування інтервалів часу доставки 1С-Бітрікс
Вибір часового інтервалу доставки — «з 10 до 14», «з 14 до 18», «з 18 до 22» — у 1С-Бітрікс реалізується не через стандартні налаштування служб доставки, а через властивості замовлення або кастомну форму оформлення. Стандартна служба доставки не має вбудованого механізму слотів — це поширена хибна думка.
Реалізація через властивість замовлення
Найпростіший варіант — додати властивість замовлення з типом «Список»:
Магазин → Налаштування → Властивості замовлення → Додати:
- Назва: «Інтервал доставки»
-
Код:
DELIVERY_TIME - Тип: Список
-
Значення:
10:00–14:00,14:00–18:00,18:00–22:00
Властивість прив'язується до конкретної служби доставки через умову в компоненті оформлення замовлення. У стандартному sale.order.ajax властивість відображається при виборі потрібної служби через JS-обробник.
Динамічне управління слотами
Реальний сценарій: кожен слот має обмежену місткість — 10 замовлень на інтервал. Реалізація через highload-блок:
| Поле | Тип | Опис |
|---|---|---|
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 у транзакції для уникнення подвійного бронювання.
Інтеграція з інтерфейсом оформлення замовлення
Для React/Vue-оформлення замовлення слоти завантажуються через окремий API-endpoint. Компонент відображає доступні слоти у вигляді кнопок або select — недоступні сірі, виключені з вибірки на сервері.
Терміни налаштування
| Варіант | Термін |
|---|---|
| Статичний список через властивість замовлення | 2–4 години |
| Динамічні слоти з обмеженням місткості | 1–2 дні |
| + інтеграція з календарем кур'єрів | 2–4 дні |







