Имя: Пароль:
1C
1С v8
Как настроить разграничение доступа к документам в зависимости
,
0 MP-40
 
27.07.12
12:38
Привет!
Подскажите, как настроить разграничение доступа к документам в зависимости от реквизитов в карточке пользователей? База - старая переделенная торговля на 1с81. В карточке пользователей есть реквизит подразделение, так вот, необходимо чтобы пользователи могли открывать только документы с совпадающим значением подразделения (или подразделением подчиненным подразделению пользователя). Может есть какие типовые механизмы, чтобы такое сделать?
1 John83
 
27.07.12
12:40
насколько помню, типовых механизмов ограничений по подразделениям нет...
смотри, как сделано по тем же организациям
2 IronDemon
 
27.07.12
12:44
"В карточке" - в РС ПраваДоступаПользователей?
3 MP-40
 
27.07.12
12:47
(2) не, это реквизит справочника Пользователи.
4 MP-40
 
27.07.12
12:50
В регистре права доступа пользователей вроде ссылки на конкретные объекты, а не на тип объекта (т.е. например - документ вида Заказ покупателя). Планирую потом сделать дополнительное разграничение и еще по какому-то реквизиту. Только не найду как это сделать по простому.
5 IronDemon
 
27.07.12
12:51
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ ВЫБОР
   КОГДА 1 В
               (ВЫБРАТЬ ПЕРВЫЕ 1
                   1 КАК ПолеОтбора
               ГДЕ
                   ВЫБОР
                       КОГДА ТекущаяТаблица.#Параметр(1) ССЫЛКА Справочник.Подразделения
                               И (НЕ ТекущаяТаблица.#Параметр(1) = ЗНАЧЕНИЕ(Справочник.Подразделения.ПустаяСсылка))
                           ТОГДА ВЫБОР
                                   КОГДА 1 В
                                           (ВЫБРАТЬ ПЕРВЫЕ 1
                                               1 КАК ПолеОтбора
                                           ИЗ
                                               (ВЫБРАТЬ
                                                   1 КАК ПолеОтбора
                                               ) КАК Оптимизация ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
                                                   ПО
                                                       ПраваДоступаПользователей.Пользователь В (&ГруппыТекущегоПользователя)
                                                       И ПраваДоступаПользователей.ОбластьДанных = &ОбластьДанныхМенеджераПоПродажам
                                                       И ВЫРАЗИТЬ(ПраваДоступаПользователей.ОбъектДоступа КАК Справочник.Склады).Подразделение В
                                                           (ВЫБРАТЬ
                                                               Подразделения.Ссылка
                                                           ИЗ
                                                               Справочник.Подразделения КАК Подразделения
                                                           ГДЕ
                                                               Подразделения.Ссылка = ТекущаяТаблица.#Параметр(1)
                                                       
                                                           ОБЪЕДИНИТЬ ВСЕ
                                                       
                                                           ВЫБРАТЬ
                                                               Подразделения.Родитель
                                                           ИЗ
                                                               Справочник.Подразделения КАК Подразделения
                                                           ГДЕ
                                                               Подразделения.Ссылка = ТекущаяТаблица.#Параметр(1)
                                                       
                                                           ОБЪЕДИНИТЬ ВСЕ
                                                       
                                                           ВЫБРАТЬ
                                                               Подразделения.Родитель.Родитель
                                                           ИЗ
                                                               Справочник.Подразделения КАК Подразделения
                                                           ГДЕ
                                                               Подразделения.Ссылка = ТекущаяТаблица.#Параметр(1)))
                                       ТОГДА ИСТИНА
                                   ИНАЧЕ ЛОЖЬ
                               КОНЕЦ
                       ИНАЧЕ ИСТИНА
                   КОНЕЦ)
       ТОГДА ИСТИНА
   ИНАЧЕ ЛОЖЬ
КОНЕЦ

Меняй шаблон :)
6 MP-40
 
27.07.12
12:56
(5) я с этим никогда не работал, эм.. это шаблон ограничения для роли так?
7 IronDemon
 
27.07.12
13:07
Да, чтобы в каждом ограничении не писать запрос.
8 IronDemon
 
27.07.12
13:08
Запрос для изменения:

ВЫБРАТЬ
   Оптимизация.ПолеОтбора
ИЗ
   (ВЫБРАТЬ
       1 КАК ПолеОтбора) КАК Оптимизация
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
       ПО (ПраваДоступаПользователей.Пользователь В (&ГруппыТекущегоПользователя))
           И (ПраваДоступаПользователей.ОбластьДанных = &ОбластьДанныхМенеджераПоПродажам)
           И (ВЫРАЗИТЬ(ПраваДоступаПользователей.ОбъектДоступа КАК Справочник.Склады).Подразделение В
               (ВЫБРАТЬ
                   Подразделения.Ссылка
               ИЗ
                   Справочник.Подразделения КАК Подразделения
               ГДЕ
                   Подразделения.Ссылка = &Параметр
           
               ОБЪЕДИНИТЬ ВСЕ
           
               ВЫБРАТЬ
                   Подразделения.Родитель
               ИЗ
                   Справочник.Подразделения КАК Подразделения
               ГДЕ
                   Подразделения.Ссылка = &Параметр
           
               ОБЪЕДИНИТЬ ВСЕ
           
               ВЫБРАТЬ
                   Подразделения.Родитель.Родитель
               ИЗ
                   Справочник.Подразделения КАК Подразделения
               ГДЕ
                   Подразделения.Ссылка = &Параметр))
9 MP-40
 
27.07.12
13:12
(8) а зачем один и тот же запрос с самим собой объединять?
10 MP-40
 
27.07.12
13:12
т.е. :

ВЫБРАТЬ
                   Подразделения.Родитель
               ИЗ
                   Справочник.Подразделения КАК Подразделения
               ГДЕ
                   Подразделения.Ссылка = &Параметр
           
               ОБЪЕДИНИТЬ ВСЕ
           
               ВЫБРАТЬ
                   Подразделения.Родитель.Родитель
               ИЗ
                   Справочник.Подразделения КАК Подразделения
               ГДЕ
                   Подразделения.Ссылка = &Параметр