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