Как включить контроль остатков при неоперативном проведении в УТ 10.3

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

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

Почему 1С не контролирует остатки в прошлом периоде по умолчанию

Разберем причину такой архитектуры. Оперативное проведение — это фиксация факта здесь и сейчас. Программа проверяет текущий остаток в базе данных и разрешает или запрещает отгрузку. При неоперативном проведении системе пришлось бы рассчитывать остаток на каждый конкретный момент времени в прошлом для каждого документа, что создает огромную нагрузку на сервер при массовом перепроведении. Кроме того, 1С предполагает, что в прошлом периоде остатки уже должны быть выровнены процедурами закрытия месяца.

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

Способ 1: Программное включение контроля остатков

Для того чтобы заставить программу проверять остатки при неоперативном проведении, нам необходимо внести изменения в модули наборов записей регистров накопления. Основными регистрами в УТ 10.3, отвечающими за товарные остатки, являются ТоварыОрганизаций (учет в разрезе юридических лиц) и ТоварыНаСкладах (физическое наличие на складах).

Проанализируем ситуацию на примере регистра ТоварыОрганизаций. Нам нужно найти процедуру, отвечающую за контроль. Обычно это происходит в модуле набора записей регистра.

Разберем по шагам необходимые правки:

  1. Откроем конфигуратор и найдем регистр накопления ТоварыОрганизаций.
  2. Перейдем в модуль набора записей.
  3. Найдем вызов метода контроля остатков. Как правило, он обернут в условие проверки режима проведения.

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


// В модуле набора записей регистра ТоварыОрганизаций
// Находим блок вызова контроля остатков

// Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
    НаборДвижений.КонтрольОстатков(ЭтотОбъект, "Товары", СтруктураШапкиДокумента, Отказ, Заголовок);
//КонецЕсли;

Дополнительно следует обратить внимание на проверку прав пользователя. В УТ 10.3 существует механизм дополнительных прав, который может разрешать превышение остатка. Чтобы контроль работал жестко для всех, проанализируем функцию РазрешеноПревышениеОстаткаТоваровОрганизации в модуле УправлениеДопПравамиПользователей. Если мы хотим игнорировать эти разрешения при отладке, код может выглядеть так:


// В процедуре контроля остатков самого регистра
// Если УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровОрганизации(СтруктураШапкиДокумента.Организация) Тогда
//    возврат;
// КонецЕсли;

Важно: Аналогичные действия можно провести для регистра ТоварыНаСкладах, если вам нужен контроль физического наличия на конкретных складах, а не только по организации в целом.

Способ 2: Использование механизма проведения по партиям

Если вы не хотите менять программный код, выясним причину возникновения ошибок с помощью стандартного механизма партионного учета. В УТ 10.3 контроль партий — это второй эшелон проверки.

Проанализируем алгоритм работы:

  1. Если в настройках параметров учета (меню Сервис — Настройки учета — Настройки параметров учета) установлена галочка «Списывать партии при проведении документа», то при неоперативном проведении система будет пытаться найти конкретную партию товара (поступление).
  2. Если товара на момент документа в прошлом не хватает, документ выдаст ошибку в окно сообщений: «Недостаточно товара в наличии по партиям».

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

Способ 3: Аналитический метод через отчеты

Самый безопасный способ, не требующий внесения изменений в код и не замедляющий систему — это использование отчета «Ведомость по товарам на складах» или универсального отчета по регистру ТоварыНаСкладах.

Рассмотрим, как правильно настроить отчет для поиска «дыр» в учете:

  1. Выберем период, за который производилось групповое перепроведение.
  2. В настройках отчета (кнопка «Настройка») перейдем на вкладку «Отбор».
  3. Добавим условие: Конечный остаток — Меньше — 0.
  4. Важный нюанс: Чтобы увидеть минусы, которые возникали внутри периода (например, продали утром, а купили вечером), добавьте в группировку строк поле Период с детализацией День или даже Регистратор.

Проанализировав такой отчет, вы увидите все точки излома, где остаток ушел в отрицательное значение. Это позволит точечно исправить документы поступления или перемещения, не ломая логику системы программными правками.

Риски и последствия изменения кода

Выясним, к чему может привести включение контроля остатков в неоперативном режиме, предложенное в первом способе. Рассмотрим основные риски:

Рекомендации

Мы рекомендуем использовать программную правку (Способ 1) только как временную меру для разового поиска ошибок при групповом перепроведении в копии базы данных. Для повседневной работы в рабочей базе лучше использовать Восстановление последовательностей (меню Операции — Проведение документов — Восстановление последовательностей). Этот механизм штатно проходит по документам в хронологическом порядке и останавливается на ошибках, позволяя соблюсти методику учета 1С.

← На главную