Как устранить расхождения в товароучетных регистрах 1С:ERP и почему расходятся «Ведомость по товарам на складах» и «Остатки и доступность товаров»?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

В процессе эксплуатации систем 1С:ERP Управление предприятием, Комплексная автоматизация (КА 2) или Управление торговлей (УТ 11) пользователи и администраторы регулярно сталкиваются с крайне неприятной проблемой: данные в отчетах «Ведомость по товарам на складах» и «Остатки и доступность товаров» начинают разъезжаться. На складе физически лежит одно количество товара, а система резервирования или подбора в заказах показывает совершенно другие цифры.

В этой статье мы подробно разберем, по каким причинам ломается товароучетный механизм в ERP, какие регистры за это отвечают, как правильно локализовать ошибку и какими инструментами можно выровнять остатки без вреда для последующего закрытия месяца.

Выясняем причины: почему расходятся отчеты по остаткам

Для начала давайте разберем архитектуру подсистемы учета запасов. В современных версиях 1С:ERP (начиная с ERP 2.5 / УТ 11.5) произошел концептуальный переход на новый механизм распределения запасов. Рассмотрим основные контуры учета, которые работают параллельно:

  1. Складской (физический) контур. Данные этого контура отражают фактическое наличие товаров в местах хранения. Основным источником данных для него является регистр накопления ТоварыНаСкладах. Именно по нему строится классический отчет «Ведомость по товарам на складах».
  2. Финансовый контур (организации). Отвечает за юридическое владение запасами конкретными организациями предприятия. Ведется в разрезе организаций и видов запасов в регистре накопления ТоварыОрганизаций. На его основе рассчитывается себестоимость в регистре СебестоимостьТоваров.
  3. Контур распределения и доступности. Отвечает за резервирование, свободные остатки и обеспечение заказов. Ранее за это отвечал регистр накопления СвободныеОстатки. Однако в современных редакциях этот регистр упразднен, а расчет доступности выполняется динамически на основании регистра сведений РаспределениеЗапасов. Именно отсюда берет данные отчет «Остатки и доступность товаров».

Рассмотрим подробнее ключевые триггеры, которые приводят к рассинхронизации этих контуров:

1. Сбои из-за «Кода строки» в цепочках Заказ-Накладная

В прикладных решениях 1С:ERP связь между строками товарной части документов «Заказ клиента» (или «Заказ поставщику») и «Реализация товаров и услуг» (или «Приобретение товаров и услуг») осуществляется через специальный реквизит — Код строки (КодСтроки). Это служебный числовой идентификатор. Рассмотрим ситуацию: пользователь создал заказ, провел его, затем создал на основании реализацию. Позже менеджер зашел в исходный заказ, удалил строку и добавил ее заново. В этот момент связь по КодСтроки порвалась.

В результате в регистре ЗаказыКлиентов зависает развернутое сальдо: по старому коду строки числится вечный недопоставленный остаток (или перепоставка), а по новому — необеспеченный резерв. Внешне заказ может выглядеть закрытым, но в регистрах обеспечения останется «мусор», который искажает отчет «Остатки и доступность товаров».

2. Нарушение последовательности ордерного склада

Если на предприятии используется ордерная схема документооборота, то складские документы («Расходный ордер на товары») и финансовые накладные («Реализация товаров и услуг») проводятся независимо. До тех пор, пока складской ордер не переведен в статус «Отгружено», товар продолжает числиться на складе физически, но финансово он уже может быть списан. Несвоевременное отражение ордеров или проведение документов «задним числом» гарантированно ломает оперативную доступность.

3. Обновление конфигурации и смена алгоритмов

Разработчики фирмы «1С» регулярно оптимизируют механизмы проведения (например, переход на «Новый Интеркампани» или оптимизация алгоритмов обеспечения). При обновлении релиза запускаются фоновые обработчики обновления, которые призваны пересчитать остатки. Если в базе присутствуют старые незакрытые заказы или ручные корректировки, обработчики могут отработать некорректно, из-за чего регистр сведений РаспределениеЗапасов заполнится с ошибками.

---

Как сверить и упорядочить данные: пошаговый план

Давайте разберем практические шаги, которые помогут нам найти расхождения и восстановить порядок в учете.

Шаг 1. Использование штатной обработки пересчета распределения запасов

Прежде чем прибегать к написанию обработок или ручному вмешательству, необходимо запустить встроенный механизм исправления распределения запасов. В интерфейсе этот инструмент по умолчанию скрыт. Выполним следующие действия:

  1. Откроем главное меню 1С и перейдем в «Функции для технического специалиста» (в старых версиях — «Все функции»).
  2. В разделе «Обработки» найдем обработку с именем «Исправление ошибок в регистре сведений "Распределение запасов"» (или аналогичную по ключевому слову «Распределение запасов»).
  3. Запустим обработку. Она выполнит сопоставление фактических остатков на складах с текущими потребностями по заказам и автоматически перезапишет поврежденные записи в регистре сведений РаспределениеЗапасов.

Во многих случаях этот шаг полностью решает проблему расхождения отчета «Остатки и доступность» с реальным складским наличием.

Шаг 2. Анализ и исправление кодов строк в заказах

Если штатная обработка не помогла, велика вероятность зависания остатков по причине нарушения связей в заказах. Чтобы выявить такие заказы, проанализируем движения по регистру ЗаказыКлиентов (или ЗаказыПоставщикам). Нам необходимо найти документы, у которых есть остатки по регистру, но при этом статус заказа установлен в значение «Закрыт».

Для исправления порванных связей можно использовать следующий программный метод очистки зависших остатков. Разберем пример кода на языке 1С, который принудительно «схлопывает» остатки в регистре накопления:


// Пример очистки зависших движений по закрытым заказам
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЗаказыКлиентовОстатки.ЗаказКлиента КАК ЗаказКлиента,
    |	ЗаказыКлиентовОстатки.Номенклатура КАК Номенклатура,
    |	ЗаказыКлиентовОстатки.Характеристика КАК Характеристика,
    |	ЗаказыКлиентовОстатки.КодСтроки КАК КодСтроки,
    |	ЗаказыКлиентовОстатки.СуммаОстаток КАК КоличествоОстаток
    |ИЗ
    |	РегистрНакопления.ЗаказыКлиентов.Остатки(&Период, ЗаказКлиента.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовКлиентов.Закрыт)) КАК ЗаказыКлиентовОстатки";

Запрос.УстановитьПараметр("Период", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();

Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        // Создаем запись корректировки для обнуления остатка по конкретному коду строки
        НаборЗаписей = РегистрыНакопления.ЗаказыКлиентов.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(Выборка.ЗаказКлиента);
        
        // Здесь мы можем либо скорректировать движения самого заказа, 
        // либо сформировать движения через документ "Корректировка регистров".
        // Рекомендуется использовать штатный документ "Корректировка регистров", 
        // чтобы не перепроводить старые закрытые периоды.
    КонецЦикла;
КонецЕсли;

Шаг 3. Использование сторонних обработок сверки с Инфостарта

Для детальной сверки контуров ТоварыНаСкладах и ТоварыОрганизаций разработано множество готовых решений на портале Infostart. Рекомендуем обратить внимание на публикации автора Доржи Демидова (в частности, статьи по детальному устройству товародвижения в УТ 11 / ERP). Готовые внешние отчеты позволяют:

---

Стоит ли использовать документ «Корректировка регистров»?

Часто у разработчиков возникает соблазн написать простую обработку, которая считывает остатки по всем регистрам, находит расхождения и делает выравнивающие движения с помощью универсального документа «Корректировка регистров».

Внимание! Это крайне опасный путь для 1С:ERP. Проанализируем, почему этот метод может создать еще больше проблем:

Правильный подход: корректировать остатки нужно только через первичные документы (например, «Списание недостач товаров», «Оприходование излишков товаров», «Корректировка назначения товаров») или использовать штатные документы «Корректировка регистров» только для очистки регистров заказов и обеспечения (где нет стоимостной оценки и аналитики себестоимости).

Резюме

Для поддержания порядка в товароучетных регистрах 1С:ERP придерживайтесь следующих правил:

  1. Регулярно (минимум раз в месяц перед закрытием периода) запускайте обработку исправления регистра РаспределениеЗапасов.
  2. Обучите пользователей правильной работе с заказами: запретите удаление строк в проведенных заказах, если на их основании уже введены накладные (вместо удаления следует использовать статус строки «Отменено»).
  3. Контролируйте ордерный склад и не допускайте «зависания» складских ордеров в промежуточных статусах.
← На главную