Почему не работает контроль отрицательных остатков в 1С:УПП и КА 1.1 и как его настроить?

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

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

Где находятся настройки контроля остатков в УПП и КА 1.1

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

  1. Откроем справочник Пользователи (меню «Справочники > Предприятие > Пользователи»).
  2. В форме нужного пользователя нажмем кнопку Перейти (или пункт Дополнительные сведения в командной панели).
  3. Выберем пункт Значения дополнительных прав пользователя. Если для пользователя назначен типовой Профиль пользователя, настройки редактируются в самом профиле.
  4. В открывшемся списке параметров проверим значения следующих настроек:
    • Разрешить превышение остатка товаров организации (отвечает за контроль остатков по конкретному юридическому лицу);
    • Разрешить превышение остатка товаров на складе (отвечает за контроль физического наличия на выбранном месте хранения).

Если эти флаги сняты (или установлены в значение Ложь), система должна блокировать проведение расходных документов при нехватке товара. Однако на практике блокировка часто не срабатывает из-за системных ограничений платформы и конфигурации.

Причина 1. Наличие роли «Полные права» у пользователя

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

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

Причина 2. Неоперативное проведение документов

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

  1. Оперативное проведение возможно исключительно текущим временем (текущей датой сеанса). В момент оперативного проведения система проверяет фактические остатки на складе в режиме «здесь и сейчас». Если товара не хватает, проведение отменяется с ошибкой.
  2. Неоперативное проведение выполняется всегда, когда дата документа меньше текущей даты или проведение запускается задним числом. В типовых алгоритмах УПП и КА 1.1 контроль остатков при неоперативном проведении намеренно отключен разработчиками 1С.

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

Особенности РАУЗ и ошибка о суммовой оценке

Часто пользователи путают контроль физических остатков с механизмами расширенной аналитики учета затрат (РАУЗ). При проведении документа может появляться служебное сообщение: «Для номенклатуры движения сформировались без суммовой оценки по регламентированному учету».

Проанализируем природу этого сообщения:

  1. Это системное предупреждение, а не отказ от проведения. Оно не означает, что контроль остатков прервал транзакцию.
  2. РАУЗ и складской учет ведутся в совершенно разных регистрах. Контроль количественных остатков осуществляется по регистрам накопления ТоварыНаСкладах и ТоварыОрганизаций, в то время как стоимостная оценка рассчитывается по регистру УчетЗатрат.
  3. Предупреждение появляется тогда, когда на момент списания система не может определить стоимость партии (например, в учетной политике задана оценка по плановой себестоимости, но тип цен плановой себестоимости не заполнен, либо товар списан раньше фактического оприходования). Окончательная стоимость и закрытие минусов по суммам выполняются регламентным документом Расчет себестоимости выпуска в конце месяца.

Важно: регулярное списание товара в минус при включенном РАУЗ критически опасно. Расчет себестоимости в РАУЗ выполняется методом решения системы линейных уравнений (СЛАУ). Отрицательные остатки на счетах учета МПЗ приводят к нарушению сходимости итерационного алгоритма, из-за чего регламентная операция начинает выдавать многомиллионные искажения в себестоимости.

Способы решения: как включить контроль задним числом

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

Способ 1. Доработка неоперативного контроля через подписку на событие

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

При реализации контроля «задним числом» критически важно учитывать подводный камень остатков в будущем. Недостаточно просто проверить остаток на дату проводимого документа. Если неделю назад на складе числилось 10 единиц, мы списываем 10 единиц, но позавчера уже было списано еще 5 единиц, то проведение сегодняшней накладной недельной датой уведет в минус остаток позавчерашнего дня. Следовательно, запрос должен контролировать минимальный остаток на всем интервале от даты документа до текущего момента.

Посмотрим на пример логики проверки в модуле подписки на событие:


Процедура ПроверитьОстаткиПриПроведении(Источник, Отказ, РежимПроведения) Экспорт

    // Пропускаем проверку, если проведение уже прервано
    Если Отказ Тогда
        Возврат;
    КонецЕсли;

    // Исключаем полные права при необходимости жесткого контроля
    Если Не РольДоступна("ПолныеПрава") Тогда
        
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |   ТаблицаОстатков.Номенклатура,
        |   ТаблицаОстатков.КоличествоОстаток КАК Остаток
        |ИЗ
        |   РегистрНакопления.ТоварыНаСкладах.Остатки(&ГраницаКонтроля, Склад = &Склад И Номенклатура В (&СписокНоменклатуры)) КАК ТаблицаОстатков
        |ГДЕ
        |   ТаблицаОстатков.КоличествоОстаток < 0";
        
        // Устанавливаем границу на конец текущего дня или момент времени документа
        Граница = Новый Граница(Источник.МоментВремени(), ВидГраницы.Включая);
        Запрос.УстановитьПараметр("ГраницаКонтроля", Граница);
        Запрос.УстановитьПараметр("Склад", Источник.Склад);
        Запрос.УстановитьПараметр("СписокНоменклатуры", Источник.Товары.ВыгрузитьКолонку("Номенклатура"));
        
        Результат = Запрос.Выполнить();
        Если Не Результат.Пустой() Тогда
            Выборка = Результат.Выбрать();
            Пока Выборка.Следующий() Цикл
                Сообщить("Недостаточно остатка по товару: " + Выборка.Номенклатура);
            КонецЦикла;
            Отказ = Истина;
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

Способ 2. Организация обмена через COM-соединение

Если документы переносятся из внешних баз (например, «Альфа-Авто» или сторонних систем) через COM-соединение, необходимо настроить процесс интеграции следующим образом:

  1. Создать отдельного сервисного пользователя без роли ПолныеПрава (например, с ролью «Оператор обмена»), которому назначены стандартные права на ввод и проведение документов.
  2. В регистре дополнительных прав для этого пользователя убедиться, что флаги превышения остатков отключены.
  3. В коде выгрузки вызывать метод проведения Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный) исключительно в тех случаях, когда дата документа совпадает с текущей датой.
  4. Учитывать, что точка останова в процедурах проведения при COM-соединении не сработает до тех пор, пока на сервере 1С не будет включен режим отладки (параметр -debug) и в конфигураторе не будет активирована отладка внешних соединений.

Способ 3. Организационные и контрольные меры

Если внесение изменений в типовую конфигурацию нежелательно, стабилизировать учет можно комбинацией типовых механизмов:

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