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