Почему в списках 1С при работе с RLS появляется надпись «Объект не найден» и как это исправить?

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

При настройке прав доступа на уровне записей (RLS) в конфигурациях 1С:ERP, 1С:УТ 11 или 1С:КА 2 специалисты часто сталкиваются с ситуацией, когда в динамических списках вместо привычных данных отображается надпись <Объект не найден>. Это происходит, когда пользователь имеет право видеть сам документ (например, Счет на оплату), но у него нет прав на просмотр документа-основания, на который этот счет ссылается.

Рассмотрим подробно, почему это происходит и какими способами мы можем решить эту задачу, обеспечив корректное отображение данных без «битых» ссылок.

Природа появления «Объект не найден»

Важно понимать, что система работает корректно. Когда мы ограничиваем доступ к определенным подразделениям, RLS «закрывает» для пользователя просмотр связанных документов. Если Счет ссылается на Заказ, который пользователю недоступен, платформа не может отобразить реквизит Основание и подменяет его на <Объект не найден>. Это не ошибка базы данных, а защитная реакция механизма прав доступа.

Метод 1: Использование запроса с ограничением в динамическом списке

Если у нас есть возможность изменить запрос динамического списка (например, через расширение), мы можем программно исключить такие записи из выборки. Для этого мы используем конструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ и ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Рассмотрим пример реализации:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    т.Ссылка КАК Основание
ПОМЕСТИТЬ ОснованияСчетов
ИЗ
    Документ.ЗаказКлиента КАК т;

ВЫБРАТЬ
    т.Ссылка,
    т.Дата,
    т.Номер,
    т.Основание
ИЗ
    Документ.СчетНаОплатуКлиенту КАК т
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    ОснованияСчетов КАК ОснованияСчетов
ПО
    т.Основание = ОснованияСчетов.Ссылка

При использовании ВНУТРЕННЕЕ СОЕДИНЕНИЕ записи, для которых Основание недоступно (и превратилось в NULL или Объект не найден), просто не попадут в результирующую выборку. Это эффективный способ «отфильтровать» лишнее на уровне СУБД.

Метод 2: Настройка отборов в пользовательском режиме

Если мы хотим решить задачу без написания кода, мы можем воспользоваться стандартным механизмом настройки списков. Хотя этот метод менее защищен от действий пользователя, он подходит для быстрой настройки:

  1. Откройте нужный список документов.
  2. Перейдите в меню Еще -> Настроить список.
  3. На вкладке Отбор добавьте поле Основание.
  4. Установите условие, например, Заполнено.
  5. После настройки вы можете сохранить эти параметры как стандартные настройки для всех пользователей в разделе НСИ или через групповое сохранение настроек.

Однако помните: если у пользователя есть права на изменение настроек списка, он может снять этот отбор и увидеть скрытые данные. Для более надежной защиты используйте первый метод или настройку RLS.

Метод 3: Настройка шаблонов ограничений доступа

Наиболее правильным, профессиональным подходом является настройка самих шаблонов RLS в конфигураторе. Вместо ограничения только по одному типу документа, мы настраиваем правила доступа «цепочкой». Мы должны сформировать условие в роли так, чтобы доступ к Счету проверялся через доступность его Основания.

Рассмотрим шаги для реализации:

Такой подход обеспечивает централизованное управление безопасностью. Даже если пользователь попытается открыть документ через отчет или другой список, система автоматически применит те же правила доступа, исключая появление надписи <Объект не найден> или утечку конфиденциальной информации по другим подразделениям.

Итоги и рекомендации

Мы выяснили, что <Объект не найден> — это сигнал правильно работающего RLS, который закрывает данные от пользователя. Чтобы сделать работу комфортной:

Используя эти методы, мы сможем добиться чистоты интерфейса и безопасности данных в любой сложной системе, такой как 1С:ERP или 1С:Комплексная автоматизация.

← На главную