Інвентаризація ламається на етапі звірки: система показує 50 одиниць, фізично — 47. Хтось коригує залишок вручну через b_catalog_product, минаючи документообіг. Через тиждень розбіжності накопичуються знову, історія зникає. Така ситуація трапляється на кожному другому складі. На одному з проєктів (мережа з 12 складів) вдалося скоротити час інвентаризації на 60% — впровадили поетапний обхід з мобільним терміналом. Середня кількість розбіжностей зменшилася з 8% до 1.5%, що дозволило заощадити до 100 000 грн на рік. Точність обліку зросла в 5 разів порівняно з ручним введенням. Ми вирішуємо цю проблему налаштуванням інвентаризації в 1С-Бітрікс під ключ — з повним аудитом, автоматичним обнуленням та інтеграцією з 1С.
Як працює механізм інвентаризації в Бітріксі?
Інвентаризація в Бітріксі — документ типу I в b_catalog_docs. Відмінність від приходу/витрати: у рядках вказується не дельта, а фактична кількість. Система сама обчислює різницю з обліковими залишками і при проведенні застосовує коригування. Згідно з документацією 1С-Бітрікс, для створення використовується константа TYPE_STORE_ADJUSTMENT.
Поля b_catalog_docs для інвентаризації: DOC_TYPE = 'I', STORE_FROM та STORE_TO одночасно вказують на один склад (інвентаризація прив'язана до конкретного складу), STATUS.
Рядки в b_catalog_docs_element: AMOUNT — фактично перерахована кількість, AMOUNT_RESERVED — не використовується при інвентаризації. При проведенні система читає поточний AMOUNT з b_catalog_store_product для цього складу, обчислює різницю та застосовує її.
Створення документа інвентаризації:
$result = \Bitrix\Catalog\StoreDocumentTable::add([ 'DOC_TYPE' => \Bitrix\Catalog\StoreDocumentTable::TYPE_STORE_ADJUSTMENT, 'STATUS' => 'N', 'STORE_TO' => 1, 'TITLE' => 'Інвентаризація ' . date('d.m.Y'), 'DATE_DOCUMENT' => new \Bitrix\Main\Type\DateTime(), ]); TYPE_STORE_ADJUSTMENT — константа для типу I.
Збір фактичних залишків
Проблема інвентаризації в Бітріксі — немає вбудованого механізму для поетапного обходу складу. Стандартний інтерфейс вимагає вносити всі позиції одразу. Для великих складів це незручно.
Рішення — створювати документ у статусі N і доповнювати його рядки в міру перерахунку. Поки документ у чернетці, він не впливає на залишки. Рядки додаються через \Bitrix\Catalog\StoreDocumentElementTable::add(). Вже додані рядки оновлюються через update() по ID.
Для отримання списку всіх товарів на складі з поточними обліковими залишками:
$storeItems = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['STORE_ID' => 1, '>AMOUNT' => 0], 'select' => ['PRODUCT_ID', 'AMOUNT', 'QUANTITY_RESERVED'], 'order' => ['PRODUCT_ID' => 'ASC'], ]); Цей список служить основою для друкованої форми під перерахунок. Після фізичного перерахунку фактичні кількості вносяться в рядки документа.
Чому нульові залишки потрібно явно прописувати?
Якщо при інвентаризації фізично виявлено 0 одиниць, рядок у документ все одно потрібно додати з AMOUNT = 0. Без цього товар залишиться з попереднім обліковим залишком. Багато хто забуває про це — особливо при імпорті фактичних залишків з Excel. Автоматична інвентаризація через агента в 4 рази швидша за ручне введення через адміністративний інтерфейс.
Автоматичне додавання нульових рядків для всіх товарів складу:
// Отримати всі товари складу $existing = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['STORE_ID' => $storeId, '>AMOUNT' => 0], 'select' => ['PRODUCT_ID'], ])->fetchAll(); // Додати нульові рядки для відсутніх у документі foreach ($existing as $item) { if (!in_array($item['PRODUCT_ID'], $scannedProductIds)) { \Bitrix\Catalog\StoreDocumentElementTable::add([ 'DOC_ID' => $docId, 'ELEMENT_ID' => $item['PRODUCT_ID'], 'STORE_TO' => $storeId, 'AMOUNT' => 0, ]); } } Проведення та розрахунок розбіжностей
При виклику \Bitrix\Catalog\Document\DocManager::conductDocument($docId) для документа типу I система для кожного рядка:
- Читає поточний обліковий залишок з
b_catalog_store_product. - Порівнює з фактичним (
AMOUNTз рядка документа). - Якщо фактичне менше — створює витрату (зменшує
AMOUNT). - Якщо більше — створює прихід (збільшує
AMOUNT). - Оновлює сумарний
QUANTITYвb_catalog_product.
Товари, яких немає в рядках документа, при інвентаризації не зачіпаються. Це дозволяє проводити часткову інвентаризацію — лише певну категорію або зону складу.
Історія коригувань
Після проведення інвентаризації документ в b_catalog_docs залишається з STATUS = 'Y' і служить історичним записом. Для аудиту розбіжностей зручно запитувати документи за період з різницею облікової та фактичної кількості — це потребуватиме JOIN з b_catalog_store_product на момент проведення, який у стандартному Бітріксі не зберігається. За потреби повного аудиту потрібно додати кастомну таблицю знімків залишків до проведення.
Що входить у налаштування під ключ
Етапи проєкту
| Етап | Що робимо | Терміни |
|---|---|---|
| Аналітика | Вивчаємо поточну схему обліку, виявляємо розбіжності | 1-2 дні |
| Проектування | Розробляємо архітектуру кастомних модулів | 2-3 дні |
| Розробка | Пишемо агенти, додаємо знімки, доопрацьовуємо API | від 5 днів |
| Тестування | Перевіряємо на бойових даних, усуваємо баги | 2-3 дні |
| Документація | Готуємо інструкції для бухгалтерів та комірників | 1 день |
| Навчання | Демонструємо оновлений інтерфейс | 1 день |
| Підтримка | Гарантуємо виправлення помилок протягом 3 місяців | включено |
Типові помилки та методи їх запобігання
| Помилка | Рішення |
|---|---|
| Пропуск нульових залишків | Автоматичне додавання рядків з AMOUNT=0 для всіх товарів складу |
| Інвентаризація на кількох складах одним документом | Створюємо окремий документ для кожного складу |
| Відсутність історії розбіжностей | Впроваджуємо кастомну таблицю знімків до проведення |
| Ручне коригування таблиць | Блокуємо прямий доступ через тригери та права доступу |
Звірка з 1С-Бітрікс дозволяє уникнути розбіжностей, а фіксація надлишків та нестач в автоматичному режимі прискорює процес у 4 рази.
Як прискорити інвентаризацію на великих складах?
Для складів з тисячами позицій стандартний інтерфейс непридатний. Ми впроваджуємо поетапний обхід: документ створюється в статусі чернетки, рядки додаються партіями через мобільний термінал або Excel-імпорт. Після завершення перерахунку документ проводиться однією кнопкою. Це скорочує час інвентаризації в 3–4 рази.
Чому обирають нас
Понад 8 років ми розробляємо та супроводжуємо проєкти на 1С-Бітрікс. За цей час реалізували понад 50 інвентаризаційних систем для роздрібних мереж, оптових складів та виробництв. Наш досвід підтверджують сертифікати та успішні кейси. 8+ років на ринку, 50+ завершених проєктів — ось наші метрики.
Готові налаштувати інвентаризацію в 1С-Бітрікс під ваші завдання. Замовте консультацію — оцінимо проєкт за 1 день і запропонуємо оптимальне рішення. Отримайте стабільний облік залишків без ручних правок.







