Товар ще не надійшов на склад, але картка вже в каталозі. Середній магазин втрачає 15-20% замовлень через відсутність попереднього замовлення. Стандартний Бітрікс показує кнопку «Немає в наявності» та пропонує підписку на сповіщення. Клієнт іде: він хоче купити зараз, а не чекати листа через тиждень. Ми вирішуємо це завдання функціоналом попереднього замовлення — клієнт оформлює замовлення на відсутній товар, фіксує ціну та місце в черзі. Магазин отримує прогнозований попит і менше втрачених лідів. На практиці це збільшує конверсію на 30% і знижує відтік клієнтів у 3 рази порівняно з підпискою на сповіщення.
Чому попереднє замовлення краще за сповіщення про надходження?
Модуль catalog.subscribe — це тільки підписка на email. Коли CATALOG_AVAILABLE стає Y, клієнту приходить лист. Ні замовлення, ні фіксації ціни, ні черги. Попереднє замовлення — повноцінне замовлення зі спеціальним статусом. Товар резервується, оплата може бути повною, частковою (завдаток) або відкладеною. При надходженні замовлення переводиться в обробку. За нашими даними, впровадження попереднього замовлення збільшує кількість успішних покупок відсутнього товару на 40-60%.
Як обійти обмеження кошика Бітрікс?
Головна технічна проблема: ядро не дозволяє додати до кошика товар із нульовим залишком. Метод \Bitrix\Catalog\Product\Basket::addProduct() перевіряє CATALOG_AVAILABLE і повертає помилку. Два робочих підходи:
Віртуальний склад попередніх замовлень. Створюється окремий склад «Попереднє замовлення» в Магазин → Склади. Для товарів, позначених для попереднього замовлення, на цьому складі встановлюється кількість, що дорівнює ліміту. Товар стає CATALOG_AVAILABLE = Y, а реальний склад порожній. При обробці менеджер бачить резерв на складі «Попереднє замовлення» та розуміє ситуацію. Плюс: не вимагає модифікації ядра. Мінус: викривляє залишки в звітах, потрібна дисципліна обміну з 1С.
Обробник події. Підписка на OnBeforeBasketAdd або OnSaleBasketItemBeforeSaved перехоплює перевірку наявності. Якщо товар позначений PREORDER_AVAILABLE = Y, валідація залишків пропускається. Цей спосіб у 5 разів чистіший архітектурно, але вимагає тестування з кожним оновленням модуля sale, оскільки механізм перевірки змінюється.
Інструкція: налаштування попереднього замовлення за 7 кроків
- Увімкніть властивість
PREORDER_AVAILABLEдля інфоблоку товарів. - Створіть додаткові статуси замовлення: PP (попереднє замовлення прийнято), PW (очікування поставки), PR (товар надійшов).
- Реалізуйте обробник
OnBeforeBasketAdd, який дозволяє додавання товару зPREORDER_AVAILABLE = Y. - Налаштуйте автоматичний перехід PP → PR через
OnStoreProductUpdateпри надходженні товару. - Додайте поле
PREORDER_LIMITу картку товару та перевіряйте його при додаванні до кошика. - Реалізуйте чергу:
ORDER BY DATE_INSERT ASCу вибірці попередніх замовлень. - Протестуйте сценарії: повна оплата, завдаток, часткова оплата при надходженні.
Статуси замовлення
Для попередніх замовлень створюються додаткові статуси в Магазин → Статуси замовлень:
| Код | Назва | Опис |
|---|---|---|
| PP | Попереднє замовлення прийнято | Замовлення створено, товар відсутній |
| PW | Очікування поставки | Товар замовлено у постачальника |
| PR | Товар надійшов | Можна переводити в збірку |
Автоматизація переходу PP → PR реалізується через обробник OnStoreProductUpdate. При зміні залишку на основному складі перевіряються замовлення в статусі PP із цим товаром. Якщо залишок достатній — статус змінюється на PR, клієнту надсилається сповіщення.
Як налаштувати часткову оплату?
Три стратегії:
Повна передоплата. Клієнт платить одразу. Проста схема, але ризикована для покупця — при зриві поставки потрібне повернення.
Завдаток. При оформленні створюється оплата на фіксований відсоток (зазвичай 10-20%). Реалізується через кастомне правило кошика або два Payment: перший — завдаток (активний), другий — залишок (відкладений). \Bitrix\Sale\Payment::setField('SUM', $depositAmount).
Оплата при надходженні. Замовлення без оплати. Коли товар приходить, менеджер активує платіж, клієнт отримує посилання. Для онлайн-оплати використовується \Bitrix\Sale\PaySystem\Service::initiatePay().
Ліміти та черга
Без лімітів попереднє замовлення перетворюється на проблему: 500 клієнтів оформили, а поставка — 50 одиниць. Ліміт задається через властивість товару PREORDER_LIMIT. Поточна кількість попередніх замовлень рахується запитом до b_sale_basket із фільтром IS_PREORDER = Y і зв'язком із незавершеними замовленнями. Черга формується за датою створення замовлення — ORDER BY DATE_INSERT ASC. При надходженні товару пріоритет надається раннім замовленням.
Що входить у роботу
- Аналіз вимог: визначення тригерів попереднього замовлення, лімітів, схем оплати.
- Проектування архітектури: вибір підходу (віртуальний склад або обробник).
- Реалізація: доопрацювання шаблону компонента
catalog.element, налаштування статусів, подій. - Інтеграція з платіжними системами (завдаток/повна передоплата).
- Тестування сценаріїв: від додавання до кошика до переходу статусів.
- Документація з підтримки та передача доступів.
- Навчання менеджерів роботі з попередніми замовленнями.
Строки
| Масштаб | Що входить | Строк |
|---|---|---|
| Базовий | Кнопка попереднього замовлення, віртуальний склад, статуси | від 4 днів |
| Повний | Завдаток, автоматична зміна статусів, ліміти, сповіщення, інтеграція з 1С | від 8 днів |
Вартість розраховується індивідуально після аудиту поточного проекту. Якщо бажаєте отримати консультацію або оцінити проект — зв'яжіться з нами. Наш досвід у розробці під Бітрікс дозволяє гарантувати стабільну роботу навіть при високих навантаженнях.
Детальніше про статуси замовлень: документація 1С-Бітрікс.
Замовте розробку попереднього замовлення та отримайте консультацію інженера безкоштовно. Ми реалізуємо функціонал, який збільшить виручку та скоротить кількість упущених замовлень.







