Имя: Пароль:
1C
 
Оптимальный запрос по иерархии
0 DomenER
 
19.09.25
11:54
всем привет.

Есть регистр сведений содержащий перечень подразделений к которым должен иметь доступ пользователь. И в нём же есть признак доступа к подчинённым подразделениям

Подр1   :   A01 Иерарх:A01
--Подр2 :   A02 Иерарх:A01A02
----Подр3 :   A03 Иерарх:A01A02A03

В регистре доступа прописано сотруднику Подр2 и ДоступИерархии "Да"
Сотрудник имеет доступ к Подр2 с иерархией подразделений ниже, т.е. к подразделениям A02 и A03

Как в запросе выбрать перечень подразделений к которым есть доступ?
1 aka MIK
 
19.09.25
11:57
Родитель.Родитель.Родитель
2 Волшебник
 
19.09.25
11:58
ВЫБРАТЬ Ссылка
ИЗ Справочник.Подразделения
ГДЕ Ссылка В ИЕРАРХИИ(ВЫБРАТЬ Подр Из РегистрСведений.ДоступныеПодразделения ГДЕ Сотр = &Сотр И ДоступИерархии)
ИЛИ Ссылка В (ВЫБРАТЬ Подр Из РегистрСведений.ДоступныеПодразделения ГДЕ Сотр = &Сотр И НЕ ДоступИерархии)
3 DomenER
 
19.09.25
11:58
Спасибо. попробую
4 aka MIK
 
19.09.25
12:02
В реальных задачах надо выбирать подразделения в соединении, а там В ИЕРАРХИИ не сработает.

Иначе задача совсем не интересная
5 Волшебник
 
19.09.25
12:43
Правильнее настроить RLS и тогда запрос будет тривиальный
ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка
ИЗ Справочник.Подразделения
6 DomenER
 
19.09.25
13:02
(5) Так и планируется. В модуле сеанса определить подразделения в фиксированный массив, а в правах RLS прописать в запросе ПодразделениеСсылка В (&МойПараметрСеанса)
7 Волшебник
 
19.09.25
13:21
(6) Грамотно.
8 DiMel_77
 
19.09.25
16:52
(6) Велосипед изобретаете? Посмотрите в ЗУП, как сделано ограничение доступа на чтение штатного расписания. Там насколько я помню заведен регистр сведений "Подчиненность подразделений организаций", который содержит транзитивно-замкнутую таблицу иерархии подразделений. Этот регистр перестраивается каждый раз при записи элемента справочника "Подразделения" и по нему настроена RLS на чтение справочника "Штатное расписание" (ограничение можно посмотреть в роли "ЧтениеШтатногоРасписания"). А уже с транзитивно замкнутого регистра иерархию можно элементарно собрать обычным запросом без всяких "В ИЕРАРХИИ" и "Родитель.Родитель.Родитель*".
9 aka MIK
 
19.09.25
17:35
(8) 👍
AdBlock убивает бесплатный контент. 1Сергей