В типовой конфигурации 1С:Управление торговлей редакции 10.3 реализована методика, согласно которой контроль остатков товаров на складах и организаций производится только при оперативном проведении документа (то есть текущей датой и временем). Если пользователь проводит документ «задним числом» (неоперативно), система по умолчанию не проверяет наличие товара, что часто приводит к возникновению отрицательных остатков и «минусов» в учете. Рассмотрим, как изменить это поведение программно и какие стандартные инструменты помогут выявить ошибки в прошлом периоде.
Разберем причину такой архитектуры. Оперативное проведение — это фиксация факта здесь и сейчас. Программа проверяет текущий остаток в базе данных и разрешает или запрещает отгрузку. При неоперативном проведении системе пришлось бы рассчитывать остаток на каждый конкретный момент времени в прошлом для каждого документа, что создает огромную нагрузку на сервер при массовом перепроведении. Кроме того, 1С предполагает, что в прошлом периоде остатки уже должны быть выровнены процедурами закрытия месяца.
Однако на практике часто возникает задача: выполнить групповое перепроведение и сразу увидеть, где в цепочке документов возникла нехватка товара. Рассмотрим способы решения этой задачи.
Для того чтобы заставить программу проверять остатки при неоперативном проведении, нам необходимо внести изменения в модули наборов записей регистров накопления. Основными регистрами в УТ 10.3, отвечающими за товарные остатки, являются ТоварыОрганизаций (учет в разрезе юридических лиц) и ТоварыНаСкладах (физическое наличие на складах).
Проанализируем ситуацию на примере регистра ТоварыОрганизаций. Нам нужно найти процедуру, отвечающую за контроль. Обычно это происходит в модуле набора записей регистра.
Разберем по шагам необходимые правки:
ТоварыОрганизаций.Нам необходимо закомментировать проверку на оперативность, чтобы код контроля выполнялся всегда. Рассмотрим пример кода:
// В модуле набора записей регистра ТоварыОрганизаций
// Находим блок вызова контроля остатков
// Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
НаборДвижений.КонтрольОстатков(ЭтотОбъект, "Товары", СтруктураШапкиДокумента, Отказ, Заголовок);
//КонецЕсли;
Дополнительно следует обратить внимание на проверку прав пользователя. В УТ 10.3 существует механизм дополнительных прав, который может разрешать превышение остатка. Чтобы контроль работал жестко для всех, проанализируем функцию РазрешеноПревышениеОстаткаТоваровОрганизации в модуле УправлениеДопПравамиПользователей. Если мы хотим игнорировать эти разрешения при отладке, код может выглядеть так:
// В процедуре контроля остатков самого регистра
// Если УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровОрганизации(СтруктураШапкиДокумента.Организация) Тогда
// возврат;
// КонецЕсли;
Важно: Аналогичные действия можно провести для регистра ТоварыНаСкладах, если вам нужен контроль физического наличия на конкретных складах, а не только по организации в целом.
Если вы не хотите менять программный код, выясним причину возникновения ошибок с помощью стандартного механизма партионного учета. В УТ 10.3 контроль партий — это второй эшелон проверки.
Проанализируем алгоритм работы:
Для массовой проверки всех документов рассмотрит запуск обработки «Проведение по партиям» (меню Основная деятельность — Регламентные операции). Она последовательно перепроведет движения по партиям и выведет список всех документов, по которым образовался дефицит.
Самый безопасный способ, не требующий внесения изменений в код и не замедляющий систему — это использование отчета «Ведомость по товарам на складах» или универсального отчета по регистру ТоварыНаСкладах.
Рассмотрим, как правильно настроить отчет для поиска «дыр» в учете:
Конечный остаток — Меньше — 0.Период с детализацией День или даже Регистратор.Проанализировав такой отчет, вы увидите все точки излома, где остаток ушел в отрицательное значение. Это позволит точечно исправить документы поступления или перемещения, не ломая логику системы программными правками.
Выясним, к чему может привести включение контроля остатков в неоперативном режиме, предложенное в первом способе. Рассмотрим основные риски:
Мы рекомендуем использовать программную правку (Способ 1) только как временную меру для разового поиска ошибок при групповом перепроведении в копии базы данных. Для повседневной работы в рабочей базе лучше использовать Восстановление последовательностей (меню Операции — Проведение документов — Восстановление последовательностей). Этот механизм штатно проходит по документам в хронологическом порядке и останавливается на ошибках, позволяя соблюсти методику учета 1С.