Настройка инвентаризации в 1С-Битрикс: отладим учёт остатков

Инвентаризация ломается на этапе сверки: система показывает 50 единиц, физически — 47. Кто-то корректирует остаток вручную через `b_catalog_product`, минуя документооборот. Через неделю расхождения накапливаются снова, история исчезает. Такая ситуация встречается на каждом втором складе. На одном из
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка инвентаризации в 1С-Битрикс: отладим учёт остатков
Простой
~1 день

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

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    764
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    809
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1166

Инвентаризация ломается на этапе сверки: система показывает 50 единиц, физически — 47. Кто-то корректирует остаток вручную через b_catalog_product, минуя документооборот. Через неделю расхождения накапливаются снова, история исчезает. Такая ситуация встречается на каждом втором складе. На одном из проектов (сеть из 12 складов) удалось сократить время инвентаризации на 60% — внедрили поэтапный обход с мобильным терминалом. Среднее количество расхождений уменьшилось с 8% до 1.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 система для каждой строки:

  1. Читает текущий учётный остаток из b_catalog_store_product.
  2. Сравнивает с фактическим (AMOUNT из строки документа).
  3. Если фактическое меньше — создаёт расход (уменьшает AMOUNT).
  4. Если больше — создаёт приход (увеличивает AMOUNT).
  5. Обновляет суммарный 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 для всех товаров склада
Инвентаризация на нескольких складах одним документом Создаём отдельный документ для каждого склада
Отсутствие истории расхождений Внедряем кастомную таблицу снапшотов до проведения
Ручная корректировка таблиц Блокируем прямой доступ через триггеры и права доступа

Как ускорить инвентаризацию на больших складах?

Для складов с тысячами позиций стандартный интерфейс непригоден. Мы внедряем поэтапный обход: документ создаётся в статусе черновика, строки добавляются партиями через мобильный терминал или Excel-импорт. После завершения пересчёта документ проводится одной кнопкой. Это сокращает время инвентаризации в 3–4 раза.

Почему выбирают нас

Более 8 лет мы разрабатываем и сопровождаем проекты на 1С-Битрикс. За это время реализовали свыше 50 инвентаризационных систем для розничных сетей, оптовых складов и производств. Наш опыт подтверждают сертификаты и успешные кейсы.

Готовы настроить инвентаризацию в 1С-Битрикс под ваши задачи. Закажите консультацию — оценим проект за 1 день и предложим оптимальное решение. Получите стабильный учёт остатков без ручных правок.