При настройке прав доступа на уровне записей (RLS) в конфигурациях 1С:ERP, 1С:УТ 11 или 1С:КА 2 специалисты часто сталкиваются с ситуацией, когда в динамических списках вместо привычных данных отображается надпись <Объект не найден>. Это происходит, когда пользователь имеет право видеть сам документ (например, Счет на оплату), но у него нет прав на просмотр документа-основания, на который этот счет ссылается.
Рассмотрим подробно, почему это происходит и какими способами мы можем решить эту задачу, обеспечив корректное отображение данных без «битых» ссылок.
Важно понимать, что система работает корректно. Когда мы ограничиваем доступ к определенным подразделениям, RLS «закрывает» для пользователя просмотр связанных документов. Если Счет ссылается на Заказ, который пользователю недоступен, платформа не может отобразить реквизит Основание и подменяет его на <Объект не найден>. Это не ошибка базы данных, а защитная реакция механизма прав доступа.
Если у нас есть возможность изменить запрос динамического списка (например, через расширение), мы можем программно исключить такие записи из выборки. Для этого мы используем конструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ и ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Рассмотрим пример реализации:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
т.Ссылка КАК Основание
ПОМЕСТИТЬ ОснованияСчетов
ИЗ
Документ.ЗаказКлиента КАК т;
ВЫБРАТЬ
т.Ссылка,
т.Дата,
т.Номер,
т.Основание
ИЗ
Документ.СчетНаОплатуКлиенту КАК т
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
ОснованияСчетов КАК ОснованияСчетов
ПО
т.Основание = ОснованияСчетов.Ссылка
При использовании ВНУТРЕННЕЕ СОЕДИНЕНИЕ записи, для которых Основание недоступно (и превратилось в NULL или Объект не найден), просто не попадут в результирующую выборку. Это эффективный способ «отфильтровать» лишнее на уровне СУБД.
Если мы хотим решить задачу без написания кода, мы можем воспользоваться стандартным механизмом настройки списков. Хотя этот метод менее защищен от действий пользователя, он подходит для быстрой настройки:
Основание.Заполнено.Однако помните: если у пользователя есть права на изменение настроек списка, он может снять этот отбор и увидеть скрытые данные. Для более надежной защиты используйте первый метод или настройку RLS.
Наиболее правильным, профессиональным подходом является настройка самих шаблонов RLS в конфигураторе. Вместо ограничения только по одному типу документа, мы настраиваем правила доступа «цепочкой». Мы должны сформировать условие в роли так, чтобы доступ к Счету проверялся через доступность его Основания.
Рассмотрим шаги для реализации:
Основание.RLS суммируются по логике ИЛИ.Такой подход обеспечивает централизованное управление безопасностью. Даже если пользователь попытается открыть документ через отчет или другой список, система автоматически применит те же правила доступа, исключая появление надписи <Объект не найден> или утечку конфиденциальной информации по другим подразделениям.
Мы выяснили, что <Объект не найден> — это сигнал правильно работающего RLS, который закрывает данные от пользователя. Чтобы сделать работу комфортной:
Используя эти методы, мы сможем добиться чистоты интерфейса и безопасности данных в любой сложной системе, такой как 1С:ERP или 1С:Комплексная автоматизация.