Почему пользователь не видит договоры контрагентов в УТ 11.5 и как настроить RLS?

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

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

Анализ структуры шаблона RLS для договоров контрагентов

Посмотрим на типовой шаблон RLS, который платформа применяет к справочнику Справочник.ДоговорыКонтрагентов:


#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениямРасширенный( "Справочник.ДоговорыКонтрагентов","Чтение","",
"ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияПартнеров КАК Т2
ПО Т2.Родитель = Т.Партнер
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов.Филиалы КАК Т3
ПО Т3.Ссылка = Т.Ссылка",
"",
"ГруппыПартнеров","Т2.Партнер",
"И (","Организации","Т.Организация","ИЛИ","Организации","Т3.Организация",") 
И","ХозяйственныеОперации","Т.ХозяйственнаяОперация",
"И (","Подразделения","Подразделение",")","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","")
#КонецЕсли

Проанализируем эту конструкцию. В шаблоне четко выделяются две ветки работы механизма подсистемы БСП «Управление доступом»:

  1. Производительный (универсальный) режим: если параметр сеанса &ОграничениеДоступаНаУровнеЗаписейУниверсально равен значению Истина, выполняется директива #ДляОбъекта(""). В этом случае сложный запрос с проверками не вычисляется на лету. Платформа проверяет права по специальным регистрам ключей доступа.
  2. Классический режим: ветка #ПоЗначениямРасширенный. Здесь платформа формирует динамический запрос, соединяя текущую таблицу договора с регистром сведений РегистрСведений.ИерархияПартнеров и табличной частью Филиалы. Проверка строится через логическое «И» по следующим видам доступа: ГруппыПартнеров, Организации, ХозяйственныеОперации и Подразделения.

Основные причины, почему договор не виден пользователю

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

  1. Задержка или сбой обновления ключей доступа (универсальный режим): при включенном производительном режиме права рассчитываются регламентным заданием в фоновом режиме. Пока запись находится в очереди в регистрах сведений ОбновлениеКлючейДоступаТекущие или ОбновлениеКлючейДоступаПериодические, доступ к объекту блокируется, так как ключ доступа для него еще не рассчитан в регистре КлючиДоступаКОбъектам.
  2. Пустые значения реквизитов договора: в классическом режиме условия связаны логическим оператором И. Если в профиле группы доступа включено ограничение по подразделениям или хозяйственным операциям по схеме «Все запрещены, кроме разрешенных», а в договоре реквизит Подразделение или ХозяйственнаяОперация не заполнен, платформа воспринимает пустую ссылку как отдельное запрещенное значение и полностью отсекает строку.
  3. Не заполнена группа доступа у партнера: вид доступа ГруппыПартнеров проверяет не сам элемент справочника Партнеры, а значение его реквизита ГруппаДоступа. Если реквизит пуст, а пользователю назначены только определенные группы партнеров, договор показан не будет.
  4. Нарушение целостности регистра иерархии: соединение идет через РегистрСведений.ИерархияПартнеров (Т2.Родитель = Т.Партнер). Если регламентные задания по актуализации иерархии завершились с ошибкой или данные регистра повреждены, левое соединение возвращает NULL, что ломает проверку ограничений.
  5. Недостаточно прав на организацию или филиал: договор проверяется на доступность организации шапки (Т.Организация) либо организаций из табличной части филиалов (Т3.Организация). Если у пользователя нет доступа к указанной организации, объект скрывается.

Методы диагностики: как выяснить, что именно мешает

Вместо того чтобы отключать RLS через расширение, разберем по шагам правильные инструменты диагностики проблемы:

  1. Стандартный отчет по правам доступа: открываем карточку проблемного договора под полными правами, нажимаем меню Еще и выбираем пункт Права доступа. Отчет показывает детальную раскладку по видам ограничений для выбранного пользователя и подсвечивает не прошедшие проверку реквизиты.
  2. Проверка очереди обновления прав: перейдем в раздел Администрирование — Обслуживание — Управление доступом. Обратим внимание на статус фонового обновления прав. Если висит очередь нерассчитанных объектов, запускаем срочное обновление вручную.
  3. Программная проверка в режиме отладки: мы можем программно проверить, почему объект недоступен в контексте сеанса пользователя, выполнив вызов метода подсистемы БСП:
    
    ЗначениеДоступа = Новый Структура("Договор", ВыбранныйДоговор);
    Если Не УправлениеДоступом.ПроверитьДоступ("Чтение", ЗначениеДоступа) Тогда
        // Анализируем причину отказа через контекст параметров ограничений
    КонецЕсли;
    
  4. Анализ технологического журнала: настроим сбор событий DBMSSQL или DBPOSTGRS с фильтрацией по имени справочника. В лог запишется результирующий SQL-запрос с блоком WHERE, сформированным платформой, что позволит точно увидеть, какое из условий вернуло Ложь.

Как решить проблему без отключения ограничений

Для восстановления видимости договоров без нарушения безопасности учета выполним следующие действия:

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