Как ограничить просмотр учетного остатка по регистру накопления при проведении инвентаризации в 1С?

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

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

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

Особенности работы прав и RLS при проведении документов

Сформулируем главную техническую сложность: если полностью закрыть пользователю право на чтение регистра накопления ТоварыНаСкладах по конкретному складу (например, через RLS — Record Level Security), система перестанет корректно проводить оперативные документы (такие как РеализацияТоваровУслуг или ПеремещениеТоваров).

Рассмотрим, как платформа 1С обрабатывает проведение документов:

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

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

Способ 1. Скрытие колонок учета в документе и печатных формах

Самый простой и эффективный способ с точки зрения доработки — исключить возможность просмотра учетных данных непосредственно в форме документа ИнвентаризацияТоваровНаСкладе и исключить выдачу печатных форм с заполненным остатком.

Разберем по шагам, какие изменения необходимо внести:

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

Пример программного управления видимостью колонок при открытии формы документа:


Процедура ПриОткрытии()
    
    // Проверяем, имеет ли пользователь право видеть учетные остатки
    ПравоПросмотраОстатков = РольДоступна("ОтветственныйЗаУчет") Или РольДоступна("ПолныеПрава");
    
    ЭлементыФормы.Товары.Колонки.УчКоличество.Видимость = ПравоПросмотраОстатков;
    ЭлементыФормы.Товары.Колонки.Отклонение.Видимость    = ПравоПросмотраОстатков;
    
КонецПроцедуры

Способ 2. Временная блокировка отчетов остатков на время инвентаризации

Даже если скрыть колонки в документе, продвинутые пользователи могут сформировать отчет Ведомость по товарам на складах или Остатки товаров. Чтобы пресечь эту возможность, проанализируем варианты ограничения доступа к отчетности.

Создадим регистр сведений ПериодыЗапретаОтчетовПоСкладам со следующей структурой:

В модуле инициализации отчетов по остаткам (или в общем модуле при формировании отчета) добавим проверку наличия активного запрета. Если дата текущего сеанса входит в период проведения инвентаризации по выбранному складу, формирование отчета блокируется:


Функция ПроверитьЗапретФормированияОтчета(Склад, Пользователь) Экспорт

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ Первые 1
        |	1
        |ИЗ
        |	РегистрСведений.ПериодыЗапретаОтчетовПоСкладам КАК Запреты
        |ГДЕ
        |	Запреты.Склад = &Склад
        |	И Запреты.Пользователь = &Пользователь
        |	И &ТекущаяДата МЕЖДУ Запреты.ДатаНачала И Запреты.ДатаОкончания";
        
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Пользователь", Пользователь);
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    
    Возврат НЕ Запрос.Выполнить().Пустой();

КонецФункции

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

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

Для гарантированного исключения человеческого фактора рекомендуем применять следующие организационно-технические схемы:

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

← На главную