Как запретить проведение документов в 1С:УПП при неполном списании партий?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

В программном продукте 1С:Управление производственным предприятием (УПП) пользователи часто сталкиваются с ситуацией, когда документ Требование-накладная или другие документы списания выдают сообщения о нехватке партий, но при этом успешно проводятся. Это создает путаницу в учете, так как количественный остаток на складе может уйти в минус или списаться некорректно по себестоимости. Разберем детально, почему это происходит и как настроить систему для жесткого запрета таких операций.

Анализируем причину: оперативное и неоперативное проведение

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

Однако, как выяснилось в ходе обсуждения, ситуация меняется при проведении документа «задним числом» (неоперативно). Рассмотрим, что происходит в коде системы: при неоперативном проведении проверка партий выполняется, сообщение об ошибке выводится в окно сообщений, но флаг Отказ не устанавливается в значение Истина. Это штатное поведение для многих старых конфигураций, предполагающее, что при исправлении прошлых периодов пользователь осознает свои действия.

Проверяем права доступа и настройки пользователей

Прежде чем приступать к программированию, нам необходимо проверить административные настройки. Выясним, нет ли у пользователя прав, позволяющих игнорировать контроль остатков. Пройдем по следующим пунктам:

  1. Перейдем в интерфейс «Администрирование пользователей» — «Настройки пользователя».
  2. Найдем флаг «Разрешить превышение остатка товаров на складе». Если этот флаг установлен, система будет игнорировать отсутствие физического товара на конкретном складе.
  3. Обратим внимание на настройку «Разрешить превышение остатка по организации». В крупных базах, где ведется учет по нескольким юридическим лицам, этот флаг может позволять списывать товар, который числится за другой организацией, что также приводит к «пустым» партиям.

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

Настройка параметров учета запасов

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

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

Влияние РАУЗ на списание партий

Важно выяснить, какой режим учета затрат используется в вашей базе. Если включена РАУЗ (Расширенная аналитика учета затрат), то классический партионный учет в момент проведения документа практически не ведется. В режиме РАУЗ контроль остатков работает иначе, а окончательная себестоимость и списание формируются только регламентным документом Расчет себестоимости в конце месяца. Если вы используете РАУЗ, то требовать от Требования-накладной мгновенного списания партий бессмысленно — это архитектурная особенность системы.

Программное решение проблемы

Если типовые настройки не обеспечивают нужной жесткости контроля при неоперативном проведении, мы можем внести изменения в код. Рассмотрим пример, как можно принудительно запретить проведение документа, если возникли ошибки списания.

Обычно логика списания партий сосредоточена в процедуре ДвиженияПоПартиям или вызывается из модуля документа в процедуре ОбработкаПроведения. Нам нужно найти место, где анализируется результат списания. Посмотрим на примерный фрагмент кода, который можно внедрить:


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

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

Механизм Intercompany (Интеркампани)

Разберем еще одну ситуацию: наличие в базе нескольких организаций. Если используется механизм Intercompany (передача товаров между организациями), система может сознательно разрешать отрицательные остатки в течение месяца. Предполагается, что на момент продажи товара у организации "А" его может не быть, но он есть у организации "Б". Позже, обработка «Оформление передач товаров» создаст необходимые документы поступления партий.

Если ваша цель — запретить любое списание без наличия партий здесь и сейчас, вам придется отключить возможность использования отрицательных остатков по организациям в настройках параметров учета или настройках прав пользователей.

Итоги и рекомендации

Подводя итоги, для решения проблемы «проведения без партий» выполним следующие шаги:

  1. Проверим оперативность: Убедимся, что пользователи понимают разницу в контроле при проведении текущим временем и задним числом.
  2. Настроим права: Снимем флаги «Разрешить превышение остатка» во всех вариациях в настройках пользователя.
  3. Глобальные параметры: Проверим установку флага «Останавливать проведение при нехватке партий».
  4. Корректировка кода: При необходимости внесем правки в ОбработкаПроведения, чтобы переменная Отказ принимала значение Истина при наличии сообщений о нехватке партий, независимо от режима проведения.

Помните, что жесткий запрет на проведение документов задним числом при нехватке партий может существенно замедлить работу бухгалтерской службы, так как потребует строгого соблюдения последовательности ввода документов (сначала поступление, потом списание).

← На главную