Налаштування Click & Collect (замовлення онлайн - забрати в магазині) 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування Click & Collect (замовлення онлайн - забрати в магазині) 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування Click & Collect (замовлення онлайн — забрати в магазині) 1С-Бітрікс

Click & Collect — схема, при якій покупець оформляє замовлення в інтернет-магазині та забирає його у фізичній точці. У Бітрікс це реалізується через модуль доставки з типом «самовивіз» та прив'язкою до конкретних складів/точок. Нетривіальна частина — показати реальну наявність товару по кожній точці до оформлення замовлення, зарезервувати товар на конкретному складі та сповістити покупця про готовність.

Структура даних: точки самовивозу та склади

Бітрікс зберігає точки самовивозу в таблиці b_sale_location (для типу «Самовивіз»). Складська логіка — в b_catalog_store:

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;

Кожна точка самовивозу в Бітрікс може бути прив'язана до складу. Налаштування в Каталог → Склади — кожен склад має поле XML_ID для зіставлення з точкою доставки.

Служба доставки типу «Самовивіз»

В адміністративній панелі: Магазин → Доставка → Додати службу доставки → Тип: Самовивіз.

Програмне створення:

\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'   => 'UAH',
        'PRICE'      => 0,
    ]);
}

Вибір точки самовивозу в кошику

У шаблоні компонента оформлення замовлення (sale.order.ajax або sale.basket.order) — випадаючий список або карта з точками:

// Отримуємо активні склади з наявністю товарів з кошика
$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;
    }
}

Резервування на конкретному складі

Після вибору точки самовивозу — резервуємо товари на цьому складі, а не в загальному пулі:

// В обробнику збереження замовлення
\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()
            );
        }
    }
);

Властивість замовлення PICKUP_STORE_ID створюється як поле замовлення: Магазин → Налаштування → Властивості замовлення.

Терміни налаштування

Служба доставки самовивозу, вибір точки з перевіркою наявності, резервування на складі, збереження у властивості замовлення — 2–4 робочих дні залежно від складності наявної інфраструктури складів.