Как отключить контроль остатков при проведении для администраторов в 1С:УНФ 1.6?

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

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

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

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

Анализ типового механизма проверки остатков

Проанализируем, как в типовом коде 1С:УНФ 1.6 инициируется контроль остатков. В модулях менеджеров документов (например, РасходнаяНакладная, ЗаказПокупателя, ПеремещениеЗапасов) в процедурах проведения и контроля (таких как ВыполнитьКонтроль) присутствует прямая проверка значения константы:


Если НЕ Константы.КонтролироватьОстаткиПриПроведении.Получить() Тогда
    Возврат;
КонецЕсли;

Также в конфигурации присутствует общий модуль УправлениеНебольшойФирмойСервер, в котором объявлена экспортная функция ВыполнитьКонтрольОстатков(), возвращающая булево значение в зависимости от опций системы.

Определение прав текущего пользователя

Для корректного определения прав администратора не рекомендуется использовать жесткую конструкцию РольДоступна("ПолныеПрава"), так как в конфигурациях на базе БСП (Библиотеки стандартных подсистем) администратору могут назначаться роли АдминистраторСистемы или специализированные профили групп доступа.

Стандартным и безопасным способом проверки полных прав является обращение к функции подсистемы пользователей:

Полноправный = Пользователи.ЭтоПолноправныйПользователь();

При необходимости можно создать в расширении отдельную роль (например, РазрешитьПроведениеБезКонтроляОстатков) и проверять доступность именно этой роли через РольДоступна(), что позволит раздавать разрешение не только администраторам, но и отдельным доверенным менеджерам.

Реализация через расширение конфигурации

Чтобы изменения не затирались при последующих обновлениях релиза 1С:УНФ, выполним доработку через расширение конфигурации. Разберем по шагам порядок действий:

  1. Создадим новое расширение конфигурации в режиме Конфигуратор (тип назначения — Адаптация или Дополнение).
  2. Добавим в расширение общий модуль УправлениеНебольшойФирмойСервер и переопределим функцию ВыполнитьКонтрольОстатков() с помощью аннотации &Вместо.
  3. Добавим в расширение модули менеджеров необходимых документов списания и изменим поведение процедуры ВыполнитьКонтроль.

Посмотрим на пример переопределения функции в общем модуле УправлениеНебольшойФирмойСервер:


&Вместо("ВыполнитьКонтрольОстатков")
Функция Расш1_ВыполнитьКонтрольОстатков()
    // Если пользователь обладает полными правами — отключаем контроль
    Если Пользователи.ЭтоПолноправныйПользователь() Тогда
        Возврат Ложь;
    КонецЕсли;
    
    // Для остальных пользователей вызываем стандартную логику
    Возврат ПродолжитьВызов();
КонецФункции

Далее перехватим процедуру контроля в модуле менеджера конкретного документа (например, Документ.РасходнаяНакладная):


&Вместо("ВыполнитьКонтроль")
Процедура Расш1_ВыполнитьКонтроль(Отказ, ДополнительныеСвойства)
    // Проверяем, нужно ли текущему пользователю выполнять контроль
    Если НЕ УправлениеНебольшойФирмойСервер.ВыполнитьКонтрольОстатков() Тогда
        Возврат;
    КонецЕсли;
    
    // Если контроль нужен — выполняем стандартную процедуру документа
    ПродолжитьВызов(Отказ, ДополнительныеСвойства);
КонецПроцедуры

Важные последствия отключения контроля остатков

При внедрении данного решения необходимо учитывать особенности партионного учета и расчета себестоимости в 1С:УНФ:

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