В процессе эксплуатации систем 1С:ERP Управление предприятием, Комплексная автоматизация (КА 2) или Управление торговлей (УТ 11) пользователи и администраторы регулярно сталкиваются с крайне неприятной проблемой: данные в отчетах «Ведомость по товарам на складах» и «Остатки и доступность товаров» начинают разъезжаться. На складе физически лежит одно количество товара, а система резервирования или подбора в заказах показывает совершенно другие цифры.
В этой статье мы подробно разберем, по каким причинам ломается товароучетный механизм в ERP, какие регистры за это отвечают, как правильно локализовать ошибку и какими инструментами можно выровнять остатки без вреда для последующего закрытия месяца.
Для начала давайте разберем архитектуру подсистемы учета запасов. В современных версиях 1С:ERP (начиная с ERP 2.5 / УТ 11.5) произошел концептуальный переход на новый механизм распределения запасов. Рассмотрим основные контуры учета, которые работают параллельно:
ТоварыНаСкладах. Именно по нему строится классический отчет «Ведомость по товарам на складах».ТоварыОрганизаций. На его основе рассчитывается себестоимость в регистре СебестоимостьТоваров.СвободныеОстатки. Однако в современных редакциях этот регистр упразднен, а расчет доступности выполняется динамически на основании регистра сведений РаспределениеЗапасов. Именно отсюда берет данные отчет «Остатки и доступность товаров».Рассмотрим подробнее ключевые триггеры, которые приводят к рассинхронизации этих контуров:
В прикладных решениях 1С:ERP связь между строками товарной части документов «Заказ клиента» (или «Заказ поставщику») и «Реализация товаров и услуг» (или «Приобретение товаров и услуг») осуществляется через специальный реквизит — Код строки (КодСтроки). Это служебный числовой идентификатор. Рассмотрим ситуацию: пользователь создал заказ, провел его, затем создал на основании реализацию. Позже менеджер зашел в исходный заказ, удалил строку и добавил ее заново. В этот момент связь по КодСтроки порвалась.
В результате в регистре ЗаказыКлиентов зависает развернутое сальдо: по старому коду строки числится вечный недопоставленный остаток (или перепоставка), а по новому — необеспеченный резерв. Внешне заказ может выглядеть закрытым, но в регистрах обеспечения останется «мусор», который искажает отчет «Остатки и доступность товаров».
Если на предприятии используется ордерная схема документооборота, то складские документы («Расходный ордер на товары») и финансовые накладные («Реализация товаров и услуг») проводятся независимо. До тех пор, пока складской ордер не переведен в статус «Отгружено», товар продолжает числиться на складе физически, но финансово он уже может быть списан. Несвоевременное отражение ордеров или проведение документов «задним числом» гарантированно ломает оперативную доступность.
Разработчики фирмы «1С» регулярно оптимизируют механизмы проведения (например, переход на «Новый Интеркампани» или оптимизация алгоритмов обеспечения). При обновлении релиза запускаются фоновые обработчики обновления, которые призваны пересчитать остатки. Если в базе присутствуют старые незакрытые заказы или ручные корректировки, обработчики могут отработать некорректно, из-за чего регистр сведений РаспределениеЗапасов заполнится с ошибками.
---
Давайте разберем практические шаги, которые помогут нам найти расхождения и восстановить порядок в учете.
Прежде чем прибегать к написанию обработок или ручному вмешательству, необходимо запустить встроенный механизм исправления распределения запасов. В интерфейсе этот инструмент по умолчанию скрыт. Выполним следующие действия:
РаспределениеЗапасов.Во многих случаях этот шаг полностью решает проблему расхождения отчета «Остатки и доступность» с реальным складским наличием.
Если штатная обработка не помогла, велика вероятность зависания остатков по причине нарушения связей в заказах. Чтобы выявить такие заказы, проанализируем движения по регистру ЗаказыКлиентов (или ЗаказыПоставщикам). Нам необходимо найти документы, у которых есть остатки по регистру, но при этом статус заказа установлен в значение «Закрыт».
Для исправления порванных связей можно использовать следующий программный метод очистки зависших остатков. Разберем пример кода на языке 1С, который принудительно «схлопывает» остатки в регистре накопления:
// Пример очистки зависших движений по закрытым заказам
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКлиентовОстатки.ЗаказКлиента КАК ЗаказКлиента,
| ЗаказыКлиентовОстатки.Номенклатура КАК Номенклатура,
| ЗаказыКлиентовОстатки.Характеристика КАК Характеристика,
| ЗаказыКлиентовОстатки.КодСтроки КАК КодСтроки,
| ЗаказыКлиентовОстатки.СуммаОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ЗаказыКлиентов.Остатки(&Период, ЗаказКлиента.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовКлиентов.Закрыт)) КАК ЗаказыКлиентовОстатки";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Создаем запись корректировки для обнуления остатка по конкретному коду строки
НаборЗаписей = РегистрыНакопления.ЗаказыКлиентов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.ЗаказКлиента);
// Здесь мы можем либо скорректировать движения самого заказа,
// либо сформировать движения через документ "Корректировка регистров".
// Рекомендуется использовать штатный документ "Корректировка регистров",
// чтобы не перепроводить старые закрытые периоды.
КонецЦикла;
КонецЕсли;
Для детальной сверки контуров ТоварыНаСкладах и ТоварыОрганизаций разработано множество готовых решений на портале Infostart. Рекомендуем обратить внимание на публикации автора Доржи Демидова (в частности, статьи по детальному устройству товародвижения в УТ 11 / ERP). Готовые внешние отчеты позволяют:
СебестоимостьТоваров, которые приводят к ошибкам расчета себестоимости при закрытии месяца.---
Часто у разработчиков возникает соблазн написать простую обработку, которая считывает остатки по всем регистрам, находит расхождения и делает выравнивающие движения с помощью универсального документа «Корректировка регистров».
Внимание! Это крайне опасный путь для 1С:ERP. Проанализируем, почему этот метод может создать еще больше проблем:
КлючиАналитикиУчетаНоменклатуры). Если вы вручную скорректируете количество в регистре СебестоимостьТоваров или ТоварыОрганизаций, но не учтете хэш аналитики, система выдаст ошибку при закрытии месяца.Правильный подход: корректировать остатки нужно только через первичные документы (например, «Списание недостач товаров», «Оприходование излишков товаров», «Корректировка назначения товаров») или использовать штатные документы «Корректировка регистров» только для очистки регистров заказов и обеспечения (где нет стоимостной оценки и аналитики себестоимости).
Для поддержания порядка в товароучетных регистрах 1С:ERP придерживайтесь следующих правил:
РаспределениеЗапасов.