Налаштування BOPIS (Buy Online, Pick Up In Store) 1С-Бітрікс
BOPIS — сценарій, при якому покупець оформлює замовлення онлайн, але забирає його у фізичному магазині. Звучить просто, але за цим стоїть зв'язка кількох модулів: управління складами, геолокація магазинів, резервування залишків, сповіщення про готовність замовлення.
Компоненти Бітрікс для BOPIS
У Бітрікс BOPIS будується на трьох стандартних модулях:
sale — управління замовленнями. Способи доставки створюються через CSaleDelivery::Add(). Для самовивозу створюється окремий спосіб з нульовою вартістю та типом PICKUP.
catalog — управління складами. Склади (магазини самовивозу) зберігаються в b_catalog_store. Залишки по складах — в b_catalog_store_product. Ключові поля: STORE_ID, PRODUCT_ID, AMOUNT.
sale.location — локації. Прив'язка магазинів до міст через b_sale_location і b_sale_location_service.
Модель даних для мережі магазинів
Кожен фізичний магазин налаштовується як склад у b_catalog_store:
-
TITLE— назва магазину -
ADDRESS— адреса для відображення покупцю -
GPS_N,GPS_S— координати для карти -
PHONE— контактний телефон -
SCHEDULE— графік роботи (довільний текст або JSON-структура) -
IMAGE_ID— посилання на фото магазину зb_file
Час роботи зручніше зберігати як JSON в окремому UF-полі UF_SCHEDULE_JSON:
{"mon": "10:00-21:00", "tue": "10:00-21:00", "sun": "11:00-20:00"}
Вибір магазину на етапі оформлення замовлення
На сторінці оформлення замовлення покупець бачить карту або список магазинів з актуальними залишками обраного товару. Запит доступності:
$storeData = CCatalogStoreProduct::GetList(
['STORE_ID' => 'ASC'],
['PRODUCT_ID' => $productId, '>AMOUNT' => 0],
false,
false,
['STORE_ID', 'AMOUNT']
);
Список складів з ненульовим залишком відображається на карті через Yandex Maps API або Leaflet. Координати беруться з b_catalog_store.GPS_N і b_catalog_store.GPS_S.
Резервування товару при виборі магазину
При виборі конкретного магазину та оформленні замовлення залишок у b_catalog_store_product зменшується на кількість замовлення. У Бітрікс це відбувається автоматично при списанні через модуль каталогу, якщо увімкнено налаштування резервування:
Налаштування → Інтернет-магазин → Налаштування → Резервування та відвантаження → «Резервувати при оформленні»
Але для BOPIS резервування має бути прив'язане до конкретного складу (магазину). Це потребує доопрацювання: у стандартний обробник події OnSaleOrderSaved додається логіка резервування залишку саме на складі, обраному покупцем. Склад передається через властивість замовлення STORE_ID.
Сповіщення про готовність до видачі
Зміна статусу замовлення на «Готовий до видачі» (кастомний статус, наприклад READY_PICKUP) надсилає SMS та/або email покупцю. Обробник:
AddEventHandler('sale', 'OnSaleStatusOrder', function($orderId, $statusId) {
if ($statusId === 'READY_PICKUP') {
// Відправка SMS через шлюз
// Відправка email через CEvent::Send()
}
});
Що входить у налаштування
- Створення складів-магазинів у
b_catalog_storeз координатами та розкладом - Налаштування способу доставки «Самовивіз» у модулі
sale - Компонент вибору магазину з картою і відображенням залишків
- Резервування залишку на конкретному складі при оформленні замовлення
- Кастомний статус замовлення «Готовий до видачі» та сповіщення при його встановленні
- Адміністративний інтерфейс для співробітника магазину (зміна статусу замовлення)







