Как полностью скрыть документы в 1С:Бухгалтерия 3.0 с помощью RLS, чтобы они не отображались в списках и отчетах?

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

При настройке прав доступа в системе 1С часто возникает задача скрыть определенные документы от конкретных пользователей. Типичная ситуация: программист создает дополнительный реквизит (например, НеОтображатьДокумент), прописывает ограничение в роли через механизм RLS (Record Level Security), но результат оказывается частичным — пользователь не может зайти в документ, но по-прежнему видит его в списке или в бухгалтерских отчетах. В этой статье мы подробно разберем, почему так происходит и как добиться полного исчезновения данных из интерфейса.

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

Рассмотрим ситуацию, описанную в теме. Основная ошибка заключается в том, что ограничение накладывается не на все уровни доступа к данным. В системе 1С права «Чтение» и «Просмотр» работают по-разному. Если пользователь видит строку в списке, но получает ошибку при попытке открытия, значит, право на чтение ссылки документа у него осталось. Чтобы документ исчез из динамического списка полностью, условие RLS должно блокировать доступ к самому объекту на уровне базы данных.

Проанализируем основные причины «просачивания» данных:

  1. Ограничение только части полей: Если в конфигураторе в настройках RLS выбраны конкретные поля, а поле Ссылка не ограничено, объект будет виден.
  2. Отчеты строятся по регистрам: Такие отчеты, как «Карточка счета» или «Оборотно-сальдовая ведомость», берут данные не из документов, а из регистров бухгалтерии. Ограничив документ, вы не ограничили проводки.
  3. Аддитивность прав: В 1С права суммируются. Если у пользователя есть хотя бы одна роль, разрешающая чтение без условий, ваше ограничение в новой роли будет проигнорировано.

Шаг 1. Настройка ограничения на право «Чтение»

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

Рассмотрим пример запроса RLS для документа ПоступлениеНаРасчетныйСчет. В конфигураторе на вкладке «Права» выберите нужную роль и документ. Перейдите к праву Чтение. В нижней части окна будет колонка «Поля». Если вы оставите ее пустой или выберете «<Прочие поля>», ограничение применится ко всей записи.

Пример текста ограничения:

ТекущаяТаблица ГДЕ НЕ ТекущаяТаблица.НеОтображатьДокумент

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


ПоступлениеНаРасчетныйСчет ГДЕ ПоступлениеНаРасчетныйСчет.НеОтображатьДокумент = ЛОЖЬ

Выясним важный нюанс: если в колонке «Поля» вы укажете, например, только Номер и Дата, то пользователь увидит пустую строку со ссылкой «Объект не найден», но сама строка в списке останется. Для полного скрытия поле «Ссылка» должно подпадать под ограничение.

Шаг 2. Ограничение данных в отчетах (Регистры)

Посмотрим на ситуацию со стороны бухгалтера. Если он открывает отчет «Карточка счета», он видит движения по счету 51. Эти движения созданы документом ПоступлениеНаРасчетныйСчет. Даже если сам документ скрыт из списка, записи в регистре Хозрасчетный остаются доступными для чтения, так как на них RLS не настроен.

Чтобы скрыть данные из отчетов, необходимо прописать аналогичные условия для следующих объектов:

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


Хозрасчетный ГДЕ ВЫРАЗИТЬ(Хозрасчетный.Регистратор КАК Документ.ПоступлениеНаРасчетныйСчет).НеОтображатьДокумент = ЛОЖЬ
ИЛИ ВЫРАЗИТЬ(Хозрасчетный.Регистратор КАК Документ.СписаниеСРасчетногоСчета).НеОтображатьДокумент = ЛОЖЬ

Обратите внимание: использование оператора ВЫРАЗИТЬ обязательно, так как поле Регистратор имеет составной тип. Если типов документов много, такой запрос может замедлить работу системы. В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) рекомендуется использовать штатные механизмы групп доступа.

Шаг 3. Проверка ролей пользователя

Проанализируем состав ролей пользователя. В 1С 8.3 права работают по принципу «Разрешено все, что разрешено хотя бы одной ролью». Если у пользователя назначена типовая роль ЧтениеОбъектовБухгалтерии, в которой прописано право на чтение документов без RLS, то ваша самописная роль с ограничением не сработает.

Чтобы это исправить, выполните следующие действия:

  1. Откройте список ролей пользователя.
  2. Убедитесь, что нет ролей с полными правами.
  3. Если используются типовые роли, их придется либо модифицировать (добавить RLS), либо заменить на свои роли, где доступ ограничен.

Альтернативный вариант: Использование расширений и программной проверки

Иногда использование RLS слишком сильно нагружает систему (особенно при больших объемах данных в регистрах). В сообщении 9 на форуме предлагается программный метод. Хотя он не скрывает строку из списка полностью, он эффективно блокирует доступ к данным. Однако, если цель — именно визуальное отсутствие документа в интерфейсе, этот метод подходит только как дополнение.

Рассмотрим пример кода в расширении для формы документа или списка, чтобы ограничить видимость программно (через установку отбора):


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

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

Важные замечания по производительности

Механизм RLS добавляет дополнительные условия к каждому SQL-запросу, который платформа отправляет к СУБД. Если вы накладываете сложные условия на регистры бухгалтерии, отчеты могут начать формироваться значительно медленнее.

Рекомендации по оптимизации:

Подведем итог: чтобы документ исчез «бесследно», нужно закрыть право Чтение на уровне объекта (все поля) и обязательно прописать аналогичные фильтры для регистров, по которым этот документ делает движения. Только комплексный подход обеспечит корректное отображение данных в интерфейсе 1С:Бухгалтерия 3.0.

← На главную