Налаштування єдиного складського обліку онлайн та офлайн 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування єдиного складського обліку онлайн та офлайн 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

Налаштування єдиного складського обліку онлайн та оффлайн 1С-Bitrix

Сайт показує «5 штук в наявності». У цей час у магазині продають останні три одиниці. Через годину онлайн-покупець оформляє замовлення на 4 штуки — і менеджер відмовляє. Це відбувається, коли онлайн та оффлайн працюють з різними базами залишків.

Джерела істини про залишки

У типовій конфігурації: 1С — головне джерело залишків, Bitrix — споживач. 1С знає про всі руху товару: поступлення, продажі онлайн, продажі оффлайн, інвентаризації, списання. Bitrix отримує актуальні дані через синхронізацію.

Проблема в частоті синхронізації. Стандартний обмін через CommerceML працює за розписанням — раз на 15–60 хвилин. За цей час у оффлайн-магазині можуть бути продані кілька одиниць, а сайт продовжує показувати старі залишки.

Негайне оновлення при оффлайн-продажі

Для мінімізації розходження — інтеграція касл з Bitrix у реальному часі. При кожній продажі на оффлайн-касі негайний webhook у Bitrix:

// /local/ajax/pos-sale-callback.php
$data = json_decode(file_get_contents('php://input'), true);

foreach ($data['items'] as $item) {
    $product = \CCatalogProduct::GetByID($item['sku']);
    if (!$product) continue;

    // Зменшуємо залишок на конкретному складі
    \Bitrix\Catalog\StoreProductTable::update(
        ['PRODUCT_ID' => $item['product_id'], 'STORE_ID' => $data['store_id']],
        ['AMOUNT' => new \Bitrix\Main\DB\SqlExpression('AMOUNT - ?', $item['quantity'])]
    );

    // Пересчитуємо суммарний залишок в b_catalog_product
    \CCatalogProduct::RecalcQuantity($item['product_id']);
}

RecalcQuantity() пересчитує b_catalog_product.QUANTITY як суму по всім складам у b_catalog_store_product. Після цього кеш товару має бути інвалідований — через BXClearCache(false, '/catalog/') або тегований кеш.

Резервування онлайн-залишків

Частая практика для магазинів із кількома каналами продажу: виділити окремий «онлайн-склад» в b_catalog_store, залишки якого призначені лише для інтернет-магазину. Фізично товар може бути на одному складі, але логічно розділений.

При цьому оффлайн-продажі зменшують «фізичний склад», а онлайн-замовлення резервуються з «онлайн-складу». Вночі 1С поповнює онлайн-склад з фізичного за заданою пропорцією.

Фізичний склад: 100 одиниць
Онлайн-квота: 30% = 30 одиниць → зберігається в b_catalog_store_product (STORE_ID = online_store)
Оффлайн-квота: 70% = 70 одиниць → не потрапляє в Bitrix

Це виключає ситуацію overselling, але зменшує доступний залишок для онлайн-продажів.

Робота з документами складського обліку

У Bitrix модуль catalog підтримує складські документи: \Bitrix\Catalog\Document\DocumentTable. Типи документів: A — поступлення, S — продаж, M — перемішення, R — повернення.

При проведенні документа через \Bitrix\Catalog\Document\DocumentController::conduct() автоматично пересчитуються залишки в b_catalog_store_product. Це правильний спосіб рухати залишки — через документи, а не прямим UPDATE.

Для оффлайн-продажів: при отриманні webhook від касл створюємо документ типу S з позиціями продажу та проводимо його. Це забезпечує повну історію руху товару та коректний складський облік.

Інвентаризація та звірка

Розходження між 1С та Bitrix неминучі. Важливо вміти їх знаходити. Раз на добу запускаємо агент-звірщик:

// Отримуємо залишки з 1С через REST API
$bx1cItems = get1cQuantities();

// Порівнюємо з b_catalog_store_product
foreach ($bx1cItems as $sku => $qty) {
    $bitrixQty = StoreProductTable::getList([
        'filter' => ['PRODUCT.XML_ID' => $sku],
        'select' => ['AMOUNT'],
    ])->fetch()['AMOUNT'] ?? 0;

    if (abs($bitrixQty - $qty) > 0) {
        logDiscrepancy($sku, $bitrixQty, $qty);
    }
}

Журнал розходжень дозволяє прийняти рішення: коректувати Bitrix за 1С (1С — головна) або сигналізувати про проблему в інтеграції.

Що налаштовуємо

  • Webhook-endpoint для отримання даних про продажи з оффлайн-касл
  • Оновлення b_catalog_store_product через документи типу S
  • Виклик RecalcQuantity() та інвалідацію кеша після кожного руху
  • Схему розділення залишків (онлайн-квота vs фізичний склад) при необхідності
  • Нічний агент-звірщик з 1С та логування розходжень