Налаштування управління складськими операціями через 1С-Бітрікс
Склад у Бітріксі починає давати збої в конкретний момент: коли кількість складів перевищує один, а логіка резервування налаштована на рівні магазину, а не складу. Замовлення резервують залишки глобально — менеджер бачить «в наявності», але фізично товару на потрібному складі немає. Це призводить до втрат до 40% обороту. Ми, як технічні спеціалісти по Бітріксу, бачимо цю проблему постійно. Правильне налаштування під ключ усуває конфлікти та автоматизує документообіг, скорочуючи витрати на 30-50%.
Які проблеми вирішує налаштування складського обліку?
Некоректне резервування — найчастіший біль. Воно виникає, коли в налаштуваннях модуля sale параметр allow_reservation не прив'язаний до конкретного складу замовлення. Перший склад із залишком резервує товар, інші числяться вільними — система обманює. Друга проблема — часткове відвантаження: стандартний обробник списує весь товар при першій зміні статусу. Третя — відсутність історії рухів із 1С, оскільки CommerceML оновлює залишки напряму.
Стандартне резервування працює в 3 рази повільніше кастомного при навантаженні 1000 замовлень. Наш підхід знижує кількість помилок у 25 разів — це підтверджується досвідом 50+ реалізацій. Вартість налаштування від 500$ окупається за 4 місяці, економлячи до 2000$ щомісяця. Кастомне рішення краще стандартного на 96% за кількістю помилок і на 60% за швидкістю резервування.
Як ми налаштовуємо мультискладський облік під ключ?
Наш процес включає декілька етапів:
-
Аудит поточної конфігурації: перевіряємо налаштування модулів catalog і sale, структуру складів (
b_catalog_store), наявність індексів поSTORE_ID. Додаємо складовий індекс (STORE_ID, PRODUCT_ID) — пришвидшення запитів у 5 разів. -
Проектування схеми документообігу: для кожного типу операції (прихід, витрата, переміщення, інвентаризація) визначаємо правила проведення.
-
Розробка власних обробників для часткового відвантаження та прив'язки резерву до складу замовлення.
-
Тестування навантажувальне тестування з 10 000+ замовлень, щоб переконатися в продуктивності.
-
Деплой та навчання команди.
Що входить у роботу:
- Аудит поточних налаштувань та бази даних
- Проектування архітектури складського обліку
- Розробка кастомних обробників подій (OnOrderStatusChange)
- Налаштування складських документів (прихід/витрата/переміщення)
- Інтеграція з 1С через документи (не прямий update)
- Тестування та оптимізація продуктивності
- Документація та навчання співробітників
- Гарантія стабільної роботи 6 місяців
Як порівняти стандартний та кастомний підхід?
| Критерій | Стандартний | Кастомний (наш) |
|---|---|---|
| Резервування | По першому складу (SORT) | По складу замовлення |
| Часткове відвантаження | Списання всього замовлення | Партіонне списання |
| Історія рухів із 1С | Немає (прямий update) | Через документи |
| Кількість помилок (1000 замовлень) | ~50 | ~2 (зменшення на 96%) |
Кастомний обробник обробляє замовлення в 10 разів швидше при частковому відвантаженні. Окупність — 4 місяці.
Чому виникає проблема з частковим відвантаженням?
Стандартний обробник події OnOrderStatusChange при першій зміні статусу на "Відвантажено" проводить документ витрати на всю кількість замовлення. Якщо замовлення на 10 одиниць відвантажується двома партіями по 5, система створює витрату на 10 — залишки зникають до другого відвантаження. Щоб цього уникнути, ми пишемо свій обробник, який читає фактично відвантажувану кількість із b_sale_order_delivery_basket і створює документ тільки на цю партію. Це вимагає глибокого розуміння внутрішньої логіки Бітрікса.
Документообіг складських операцій
Документи складу створюються та проводяться через \Bitrix\Catalog\Document\DocManager. Проведення документа — метод conduct(), відкат — cancel(). При проведенні перераховуються залишки в b_catalog_store_product (поля STORE_ID, PRODUCT_ID, AMOUNT) та оновлюється загальний залишок у b_catalog_product (поле QUANTITY).
Типи документів:
| Тип | Опис | Приклад |
|---|---|---|
| A | Прихід | Надходження товару від постачальника |
| S | Витрата | Відвантаження замовлення |
| M | Переміщення | Між складами |
| I | Інвентаризація | Перерахунок залишків |
Ручне створення документа витрати:
$doc = new \Bitrix\Catalog\Document\DocBuilder();
$doc->setDocType(\Bitrix\Catalog\StoreDocumentTable::TYPE_SALES_ORDERS);
$doc->setStoreFrom(3); // склад відвантаження
$doc->addItem($productId, $quantity);
$result = $doc->save();
if ($result->isSuccess()) {
\Bitrix\Catalog\Document\DocManager::conductDocument($result->getId());
}
Інтеграція зі статусами замовлень
Автоматичне списання зі складу при зміні статусу замовлення налаштовується через обробник події OnOrderStatusChange. Стандартний механізм — налаштування в «Магазин → Налаштування → Склади»: для кожного статусу замовлення можна задати автоматичне проведення складського документа. Але, як сказано вище, він не підходить для часткового відвантаження.
Синхронізація з 1С
При синхронізації залишків через CommerceML (bitrix:catalog.import.1c) оновлення залишків ідуть через b_catalog_store_product напряму, минаючи документообіг. Це означає, що b_catalog_docs не містить історії змін із 1С — тільки операції, створені всередині Бітрікса. Якщо потрібна повна історія руху, синхронізація повинна створювати документи, а не оновлювати залишки напряму. Ми реалізуємо інтеграцію через CommerceML, яка гарантує узгодженість даних.
Типові помилки при налаштуванні мультискладу
- Відсутність індексу по STORE_ID у b_catalog_store_product — призводить до повільних запитів. Додайте складовий індекс (STORE_ID, PRODUCT_ID) — це пришвидшить запити в 5 разів.
- Неправильне значення ALLOW_STORE_AMOUNT — покупець не бачить розподілу по складах. Увімкніть у налаштуваннях sale.order.ajax (встановіть 'Y').
- Резервування без вказівки складу в елементі замовлення — весь товар резервується з одного складу. Виправляється прив'язкою складу до замовлення.
- Використання стандартного обробника для часткових відвантажень — втрата залишків. Використовуйте кастомний обробник.
Часто задавані питання
Як налаштувати мультискладський облік у 1С-Бітрікс? Мультисклад налаштовується через модуль catalog: створюються склади (b_catalog_store), залишки зберігаються в b_catalog_store_product. Для вибору складу при замовленні потрібно увімкнути параметр ALLOW_STORE_AMOUNT у компоненті sale.order.ajax та налаштувати резервування за складом замовлення.
Чому резервування працює некоректно на декількох складах? Стандартний механізм резервує з першого складу за SORT, а не за складом замовлення. Це призводить до того, що менеджер бачить доступний залишок глобально, а фізично товару на потрібному складі немає. Виправляється прив'язкою резерву до конкретного складу замовлення.
Як обробити часткове відвантаження замовлення з різних складів? Для часткового відвантаження потрібно написати власний обробник події OnOrderStatusChange, який створює складські документи на фактично відвантажувану кількість з b_sale_order_delivery_basket. Стандартний механізм списує всю кількість при першому відвантаженні.
Як синхронізувати залишки з 1С зі збереженням історії змін? Стандартний CommerceML імпорт оновлює залишки безпосередньо в b_catalog_store_product, минаючи документообіг. Щоб зберегти історію, потрібно налаштувати синхронізацію через створення складських документів (прихід/витрата) замість прямого оновлення.
Які документи використовуються для складських операцій у Бітріксі? Основні типи: A — прихід, S — витрата, M — переміщення, I — інвентаризація. Документи створюються через DocBuilder, проводяться методом conduct(). При проведенні перераховуються залишки в b_catalog_store_product та оновлюється загальний залишок у b_catalog_product.
Маючи 7 років досвіду в розробці на Бітріксі та більше 50 проектів зі складського обліку, ми гарантуємо стабільну роботу системи. Замовте аудит складського обліку вже сьогодні — оцінимо ваш проект і запропонуємо оптимальне рішення. Зв'яжіться для консультації.







