Типова проблема: покупець оформлює самовивіз, приїжджає в магазин, а товару на полиці немає. Причина — не налаштована жорстка прив'язка до складів і не перевіряється реальна наявність перед резервуванням. Ми такі ситуації виключаємо через правильну конфігурацію Click & Collect. Наш досвід — понад 50 проєктів на Бітрікс, сертифіковані інженери з гарантією результату.
Click & Collect (онлайн-замовлення з самовивозом) — один із найзатребуваніших сценаріїв у ритейлі, особливо після пандемії. Але без коректної роботи з залишками та резервуванням він приносить більше проблем, ніж користі. Покупець обирає точку, де товару немає, або дві людини одночасно замовляють останню одиницю — і хтось іде ні з чим розчарований. Правильна реалізація на 1С-Бітрікс вирішує ці завдання на рівні архітектури: жорстка прив'язка точок до складів, перевірка залишків у кошику перед резервуванням, резервування при оформленні замовлення. Нижче — як це працює на практиці з прикладами коду.
Чому важливо прив'язувати точки самовивозу до складів?
Кожна точка самовивозу має бути жорстко прив'язана до конкретного складу через XML_ID. Тільки так система розуміє, які залишки показувати. Без цієї прив'язки самовивіз перетворюється на лотерею. Ми використовуємо стандартні таблиці Бітрікс: b_catalog_store та b_catalog_store_product. Приклад запиту для перевірки залишків:
SELECT s.ID, s.TITLE, s.ADDRESS, sp.AMOUNT FROM b_catalog_store s JOIN b_catalog_store_product sp ON sp.STORE_ID = s.ID WHERE sp.PRODUCT_ID = ? AND s.ACTIVE = 'Y' AND sp.AMOUNT > 0 ORDER BY s.SORT ASC; Документація 1С-Бітрікс: управління складами
Як додати службу доставки «Самовивіз»
В адміністративній панелі: Магазин → Доставка → Додати службу доставки → Тип: Самовивіз. Вкажіть найменування, активуйте її, налаштуйте вартість (зазвичай нуль). Програмне створення через API дає більшу гнучкість — можна умовні правила та інтеграцію з 1С:
\Bitrix\Main\Loader::includeModule('sale'); $deliveryService = \Bitrix\Sale\Delivery\Services\Manager::getList([ 'filter' => ['CODE' => 'self_pickup'], ])->fetch(); if (!$deliveryService) { \Bitrix\Sale\Delivery\Services\Manager::add([ 'NAME' => 'Самовивіз з магазину', 'CODE' => 'self_pickup', 'ACTIVE' => 'Y', 'CLASS_NAME' => '\Bitrix\Sale\Delivery\Services\Base', 'CURRENCY' => 'RUB', 'PRICE' => 0, ]); } Як обрати точку самовивозу в кошику?
У шаблоні компонента sale.order.ajax виводимо список точок з перевіркою залишків. Приклад:
// Отримуємо активні склади з наявністю товарів з кошика $basketItems = $order->getBasket(); $productIds = []; foreach ($basketItems as $item) { $productIds[] = $item->getProductId(); } $storesResult = \Bitrix\Catalog\StoreTable::getList([ 'filter' => ['ACTIVE' => 'Y'], 'select' => ['ID', 'TITLE', 'ADDRESS', 'GPS_N', 'GPS_S'], 'order' => ['SORT' => 'ASC'], ]); $availableStores = []; while ($store = $storesResult->fetch()) { $allAvailable = true; foreach ($productIds as $productId) { $stockResult = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['PRODUCT_ID' => $productId, 'STORE_ID' => $store['ID']], 'select' => ['AMOUNT'], ])->fetch(); if (!$stockResult || $stockResult['AMOUNT'] < $basketItems->getQuantityByProductId($productId)) { $allAvailable = false; break; } } if ($allAvailable) { $availableStores[] = $store; } } Як налаштувати резервування: покрокова інструкція
Резервування — критичний етап, від якого залежить надійність Click & Collect. При неправильній реалізації втрачаються товари та виникають конфлікти з покупцями.
-
Створіть користувацьку властивість замовлення
PICKUP_STORE_IDчерезМагазин → Налаштування → Властивості замовлення. Тип — список або рядок з посиланням на таблицю складів. -
Додайте обробник події
OnSaleOrderBeforeSaved. У ньому отримайте ID вибраного складу з властивості замовлення та перевірте залишки ще раз перед бронюванням. -
Викличте резервування для кожного товару кошика через
\Bitrix\Catalog\StoreProductTable::reserveProduct. Переконайтеся, що функція повертає успіх перед збереженням замовлення.
Приклад обробника:
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderBeforeSaved', function (\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $pickupStoreId = $order->getPropertyCollection() ->getItemByOrderPropertyCode('PICKUP_STORE_ID') ?->getValue(); if (!$pickupStoreId) return; foreach ($order->getBasket() as $basketItem) { \Bitrix\Catalog\StoreProductTable::reserveProduct( $basketItem->getProductId(), (int)$pickupStoreId, $basketItem->getQuantity(), $order->getId() ); } } ); Деталі роботи обробника
Обробник спрацьовує до збереження замовлення — резервування відбувається атомарно. Якщо резервувати не вдалося (наприклад, товару немає на складі), замовлення не зберігається, а користувач бачить помилку. Це захищає від подвійних продажів.Сповіщення та статуси замовлень самовивозу
Після вибору точки та резервування товару потрібно організувати сповіщення покупцеві. Коли замовлення перейде в статус «Готовий до видачі» (зазвичай після обробки в 1С), система надсилає email та SMS на номер з профілю: адреса магазину, години роботи, що взяти з собою. Для постійних клієнтів рекомендується особистий кабінет з відстеженням статусу в реальному часі. Реалізація через події OnSaleOrderStatusChange та шаблони листів. Наш досвід показує, що правильні сповіщення знижують кількість неявок на 20–30%.
Що входить в роботу?
| Етап | Тривалість | Результат |
|---|---|---|
| Аналітика | 0.5 дня | Схема складів, список точок |
| Налаштування служби доставки | 1 день | Готова служба самовивозу |
| Розробка вибору точки | 1–2 дня | Виведення точок з залишками в кошику |
| Резервування | 1 день | Обробник OnSaleOrderBeforeSaved |
| Сповіщення та статуси | 1 день | Email та SMS при готовності до видачі |
| Інтеграція з 1С (опціонально) | 2–3 дні | Обмін залишками по CommerceML |
| Тестування та документація | 1 день | Інструкція для менеджерів |
Під ключ: від 7 робочих днів. Гарантія 6 місяців на доопрацювання. Сертифікат 1С-Бітрікс.
Порівняння: вбудований механізм vs кастомне рішення
| Параметр | Вбудований самовивіз | Кастомне рішення з HL-блоками |
|---|---|---|
| Гнучкість | Фіксована логіка | Повна свобода |
| Швидкість впровадження | 1–2 дні | 3–5 днів |
| Синхронізація з 1С | Через склади | Будь-яка ERP |
Кастомне рішення краще вбудованого за гнучкістю в 2–3 рази, але вимагає більше часу та ресурсів на реалізацію.
Для розрахунку вартості та термінів вашого проєкту — зв'яжіться з нами. Замовте консультацію з налаштування Click & Collect.
Додаткова інформація: документація по службам доставки.







