Имя: Пароль:
1C
1С v8
Вопрос по RLS
0 Лялечка
 
15.03.12
10:35
Добрый день! Помогите, пожалуйста, с запросом. Ситуация следующая.
На регистр сведений "БизнесПроцессы" прописано ограничение по правам доступа:

ТекущаяТаблица Из #ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ ВЫБОР
           КОГДА ТекущаяТаблица.Ответственный = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Ответственный.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Ответственный.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Ответственный.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Инициатор = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Инициатор.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Инициатор.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Инициатор.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Исполнитель = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Исполнитель.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Исполнитель.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Исполнитель.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
               ТОГДА ИСТИНА
           ИНАЧЕ ВЫБОР
                   КОГДА ТекущаяТаблица.ПроектКО ЕСТЬ NULL  
                       ТОГДА ЛОЖЬ
                   ИНАЧЕ
                       ТекущаяТаблица.ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
                       ИЛИ ТекущаяТаблица.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                       ИЛИ ТекущаяТаблица.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                       ИЛИ ТекущаяТаблица.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   КОНЕЦ
       КОНЕЦ

Пользователь 1 является исполнителем бизнес-процесса. В регистре запись следующая:
БизнесПроцесс| Исполнитель    | ПроектКО |
------------------------------------------
Поручение 1  | Пользователь 1 |          |
------------------------------------------
Выполняю этот запрос в консоли запросов и получается, что пользователь доступа к бизнес-процессу не имеет, хотя является его исполнителем. Что я делаю не так?:( Заранее благодарна.
1 golden-pack
 
15.03.12
10:40
(0) Текст запроса из консоли
2 Лялечка
 
15.03.12
10:45
(1)
ВЫБРАТЬ
БизнесПроцессы.БизнесПроцесс Из РегистрСведений.CRM_БизнесПроцессы КАК БизнесПроцессы
ГДЕ ВЫБОР
           КОГДА БизнесПроцессы.Ответственный = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
               ТОГДА ИСТИНА
           ИНАЧЕ ВЫБОР
                   КОГДА БизнесПроцессы.ПроектКО ЕСТЬ NULL  
                       ТОГДА ЛОЖЬ
                   ИНАЧЕ
                       БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   КОНЕЦ
       КОНЕЦ
3 golden-pack
 
15.03.12
10:47
(2) В регистре Исполнитель - "Пользователь1" и &ТекущийПользователь = "Пользователь1" ?

Условие 100000% отработает  ИЛИ БизнесПроцессы.Исполнитель = &ТекущийПользователь
4 Лялечка
 
15.03.12
10:48
В регистре Исполнитель = Пользователь 1 и &ТекущийПользователь = Пользователь 1 я же сама его выбирала в консоли в параметры. Я вот тоже думала, что отработает, а не отрабатывает(((
5 golden-pack
 
15.03.12
10:50
(4) Не может быть.
6 golden-pack
 
15.03.12
10:51
Выбрать * ИЗ Справочник.Пользователи КАк Спр Где Спр.Ссылка = &ТекущийПользователь

?
7 Лялечка
 
15.03.12
10:51
(5) ну я не знаю...вот оно не отрабатывает
8 Лялечка
 
15.03.12
10:53
(6) не поняла, что сделать?
9 golden-pack
 
15.03.12
10:53
(8) выполнить запрос из (6) в консоли
10 Лялечка
 
15.03.12
10:54
ну выполнила и что? пользователя моего выбирает
11 Лялечка
 
15.03.12
10:54
Пользователь в справочнике точно есть
12 freddy_kind
 
15.03.12
10:55
насколько я знаю, без фотки не заработает))
13 golden-pack
 
15.03.12
10:55
БизнесПроцессы.БизнесПроцесс Из РегистрСведений.CRM_БизнесПроцессы КАК БизнесПроцессы ГДЕ  БизнесПроцессы.Исполнитель = &ТекущийПользователь

а так ?
14 Лялечка
 
15.03.12
10:57
И так мое поручение выбирает
15 Лялечка
 
15.03.12
10:58
(12) держите фото)
16 Лялечка
 
15.03.12
10:58
(12) хотя сначала и без фотки заработало)
17 freddy_kind
 
15.03.12
10:59
(16))) все таки это как то связано)
18 Лялечка
 
15.03.12
10:59
(17) ты помочь можешь чем-нибудь?
19 Лялечка
 
15.03.12
11:01
(13) если в консоли принудительно не задавать текущее подразделение, то записи выбираются, но все равно не все, и те, которые нужны не попадают
20 golden-pack
 
15.03.12
11:09
(19) непонятно.

исходя из (6) и (13) ---> (2) должно работать
21 Лялечка
 
15.03.12
11:10
Вот такой запрос отрабатывает правильно:

ВЫБРАТЬ
БизнесПроцессы.БизнесПроцесс Из РегистрСведений.CRM_БизнесПроцессы КАК БизнесПроцессы
ГДЕ ВЫБОР
           КОГДА БизнесПроцессы.Ответственный = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
               ТОГДА ИСТИНА
           ИНАЧЕ  ЛОЖЬ
               
       КОНЕЦ

Как только в ИНАЧЕ добавляю

ВЫБОР
                   КОГДА БизнесПроцессы.ПроектКО ЕСТЬ NULL  
                       ТОГДА ЛОЖЬ
                   ИНАЧЕ
                       БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   КОНЕЦ

Сразу все не работает(((
22 Лялечка
 
15.03.12
11:14
почему он вообще в ИНАЧЕ лезет, если у меня испольнитель = Пользователь1
23 Лялечка
 
15.03.12
11:19
БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение

Эти 4 строчки все портят(( если вместо них ЛОЖЬ просто написать, то работает(((
24 Лялечка
 
15.03.12
11:56
ни у кого больше нет соображений никаких?:( получается, что если поручение не привязано к проекту, то пользователь не имеет к нему доступа, даже если является исполнителем...кто подскажет как исправить запрос?
25 Конфигуратор1с
 
15.03.12
12:01
(23) "БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение" а почему не "БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение в иерархии(&ТекущееПодразделение)"?
26 Лялечка
 
15.03.12
12:06
(24) потому что это RLS там В ИЕРАРХИИ нельзя использовать
27 Конфигуратор1с
 
15.03.12
12:07
(26)тогда сорри - я с рлс не работал
28 Лялечка
 
15.03.12
12:11
(27) да разницы практически никакой. Почему-то запрос все время выполняет секцию ИНАЧЕ...ну почему такое может быть?
29 155153144627
 
15.03.12
13:34
(21)

ВЫБОР
                   КОГДА БизнесПроцессы.ПроектКО ЕСТЬ NULL  
                       ТОГДА ЛОЖЬ
                   ИНАЧЕ
                        Когда БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                       Тогда Истина
                   КОНЕЦ
30 Лялечка
 
15.03.12
14:25
(29) ничего не изменилось, все так же не работает((
31 Лялечка
 
15.03.12
14:25
(29)
ИНАЧЕ ВЫБОР
                   КОГДА БизнесПроцессы.ПроектКО ЕСТЬ NULL  
                       ТОГДА ЛОЖЬ
                   ИНАЧЕ Выбор
                       КОГДА
                       БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                       ИЛИ БизнесПроцессы.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                      ТОГДА ИСТИНА
                      Конец
                   КОНЕЦ
       КОНЕЦ
32 golden-pack
 
15.03.12
16:59
(31) откуда БизнесПроцессы.ПроектКО ---> NULL ? Составной тип ?
33 Лялечка
 
15.03.12
17:02
(32) я уже поменяла на БизнесПроцессы.ПроектКО = ЗНАЧЕНИЕ(Справочник.ПроектыКО.ПустаяСсылка)
34 Лялечка
 
15.03.12
17:03
ограничение прописано на право "Чтение" и на строчке кода

НаборБП = РегистрыСведений.CRM_БизнесПроцессы.СоздатьНаборЗаписей();
       НаборБП.Отбор.БизнесПроцесс.Установить(БизнесПроцесс.Ссылка);
       НаборБП.Прочитать();

все валится и выдается сообщение, недостаточно прав доступа.
Я не понимаю в чем причина:(
38 Лялечка
 
15.03.12
17:28
(35) ТекущийПользователь и ТекущееПодразделение это параметры сеанса
39 Лялечка
 
15.03.12
17:29
(36) результата никакого((
41 vde69
 
15.03.12
17:30
(0) АФИГЕТЬ!!!

БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение

во первых в RLS просто нельзя юзать через две точки (будут тормоза)
во вторых что вернет все условие если подразделение только 2 уровня?


БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель.Родитель - будет NULL
а значит и все условие будет возвращать ложь
42 Лялечка
 
15.03.12
17:32
(40) редактирую точно ту роль
43 Лялечка
 
15.03.12
17:33
(41) как проверить иерархию? нужно, чтобы пользователь, который по иерархии находится выше, имел доступ к бизнес-процессам
44 Лялечка
 
15.03.12
17:36
(36) если убрать условие:

ВЫБОР
           КОГДА
                       ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
               ИЛИ ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
               ИЛИ ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
               ИЛИ ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
               ТОГДА ИСТИНА
           ИНАЧЕ ЛОЖЬ
           КОНЕЦ

то выводится то, что надо, но необходимо еще проверять наличие участника в проекте, и если он там есть, то он также должен видеть этот бизнес-процесс, даже, если он не инициатор, исполнитель или ответственный
46 Лялечка
 
15.03.12
17:41
(45)да, табличная часть справочника
48 Лялечка
 
15.03.12
17:53
(47) ок, спасибо, завтра попробую, рабочий день закончен, да и голова уже готова взорваться
49 Лялечка
 
16.03.12
11:36
Добрый день! Обращаюсь по вчерашнему вопросу снова:( Никак ничего не получается(( Переписала запрос:

ВЫБРАТЬ
   БизнесПроцессы.БизнесПроцесс
ИЗ
   РегистрСведений.CRM_БизнесПроцессы КАК БизнесПроцессы
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчастникиПроектаКО.СрезПоследних КАК УчастникиПроектаКОСрезПоследних
       ПО БизнесПроцессы.ПроектКО = УчастникиПроектаКОСрезПоследних.ПроектКО.Ссылка
ГДЕ
   ВЫБОР
           КОГДА БизнесПроцессы.Ответственный = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Ответственный.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Инициатор.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                   ИЛИ БизнесПроцессы.Исполнитель.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
               ТОГДА ИСТИНА
           ИНАЧЕ ВЫБОР
                   КОГДА БизнесПроцессы.ПроектКО <> ЗНАЧЕНИЕ(Справочник.ПроектыКО.ПустаяСсылка)
                       ТОГДА УчастникиПроектаКОСрезПоследних.УчастникПроекта.Ссылка = &ТекущийПользователь
                           ИЛИ УчастникиПроектаКОСрезПоследних.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
                           ИЛИ УчастникиПроектаКОСрезПоследних.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
                           ИЛИ УчастникиПроектаКОСрезПоследних.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение
                   ИНАЧЕ ЛОЖЬ
               КОНЕЦ
       КОНЕЦ

Выполняю запрос в консоли ТекущийПользователь = Пользователь1. Все работает правильно. Пишу тот же запрос в RLS на чтение для регистра БизнесПроцессы. Захожу под Пользователем1 и пытаюсь выполнить отказ от задачи по бизнес-процессу "Поручение". На строчке кода:
НаборБП = РегистрыСведений.CRM_БизнесПроцессы.СоздатьНаборЗаписей();
       НаборБП.Отбор.БизнесПроцесс.Установить(БизнесПроцесс.Ссылка);
       НаборБП.Прочитать();
Выдается ошибка: У пользователя недостаточно прав на исполнение операции.

Не понимаю, что не так. Кто-нибудь может помочь? Уже 2 дня бьюсь с проблемой((
Заранее благодарна.
50 vde69
 
16.03.12
11:41
ВЫБРАТЬ
   БизнесПроцессы.БизнесПроцесс
ИЗ
   РегистрСведений.CRM_БизнесПроцессы КАК БизнесПроцессы
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчастникиПроектаКО.СрезПоследних КАК УчастникиПроектаКОСрезПоследних
       ПО БизнесПроцессы.ПроектКО = УчастникиПроектаКОСрезПоследних.ПроектКО.Ссылка
ГДЕ
   ВЫБОР
           КОГДА БизнесПроцессы.Ответственный = &ТекущийПользователь
                   ИЛИ БизнесПроцессы.Подразделение В &МассивТекущехПодразделений
               ТОГДА ИСТИНА
           ИНАЧЕ ВЫБОР
                   КОГДА БизнесПроцессы.ПроектКО <> ЗНАЧЕНИЕ(Справочник.ПроектыКО.ПустаяСсылка)
                       ТОГДА УчастникиПроектаКОСрезПоследних.УчастникПроекта.Ссылка = &ТекущийПользователь
                           ИЛИ
                   ИЛИ УчастникиПроектаКОСрезПоследних.ПодразделениеУчастникаПроекта В &МассивТекущехПодразделений



только структуру полей придется доработать и параметр сеанса
51 Лялечка
 
16.03.12
11:45
(50) спасибо конечно...а в параметре сеанса, что будет содержаться?
52 Лялечка
 
16.03.12
11:47
(50) так почему может такое получиться, что в консоли все выполняется нормально, а в RLS запросе не выполняется??(( блин, не думала, что такая простая задача, как проверить 3 условия, может вызвать столько проблем... При чем эта фигня только при отказе от задачи...если задачу выполнить, а не отказаться, то все хорошо... может все же в чем-то еще причина, а не в запросе совсем...
53 vde69
 
16.03.12
12:03
(51) фиксированый массив разрешенного подразделения и всех его родителей.

(52) по тому, что чумадан... RLS вообще сложная штука для понимания
54 155153144627
 
16.03.12
12:05
ТекущаяТаблица Из #ТекущаяТаблица КАК ТекущаяТаблица

ГДЕ ВЫБОР
           КОГДА ТекущаяТаблица.Ответственный = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Ответственный.Подразделение В &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Инициатор = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Инициатор.Подразделение В &ТекущееПодразделение
                   ИЛИ ТекущаяТаблица.Исполнитель = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Исполнитель.Подразделение В &ТекущееПодразделение
               ТОГДА ИСТИНА
           КОГДА
                   ТекущаяТаблица.ПроектКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение В &ТекущееПодразделение
               ТОГДА ИСТИНА
           ИНАЧЕ ЛОЖЬ
   КОНЕЦ
55 Лялечка
 
16.03.12
12:16
(54) Нельзя проверять только подразделение текущего пользователя. Нужно, чтобы руководитель пользователя, так же имел доступ к бизнес-процессам подчиненного, а руководитель в орг.структуре стоит выше
56 Лялечка
 
16.03.12
12:19
(53) спасибо. По сути просто добавить еще параметр сеанса и установить его, так я поняла?
57 155153144627
 
16.03.12
12:29
(55) Ну так у руководителя "текущее подразделение" должно и быть выше в структуре подразделений. И если бизнес процесс ввел его подчиненный, то подразделение подчиненного будет входить в группу - подразделение руководителя.
58 155153144627
 
16.03.12
12:31
ИЛИ ТекущаяТаблица.Ответственный.Подразделение В &ТекущееПодразделение
ИЛИ ТекущаяТаблица.Инициатор.Подразделение В &ТекущееПодразделение
ИЛИ ТекущаяТаблица.Исполнитель.Подразделение В &ТекущееПодразделение
ИЛИ ТекущаяТаблица.ПроектКО.УчастникиПроекта.УчастникПроекта.Подразделение В &ТекущееПодразделение

- вот эти условия же дают доступ руководителю.
59 Лялечка
 
16.03.12
12:36
(58) логично конечно...сейчас попробую...только в RLS все равно ничего не хочет работать:(((
60 155153144627
 
16.03.12
12:37
Опаньки и не только ему, а всем кто входит в подразделение выше...
61 155153144627
 
16.03.12
12:40
У меня был случай, когда я тоже два дня колупал RLS, а потом оказалось другой прог назначил всем пользователям дополнительно еще одну роль, которая открывала все что я пытался заблокировать...
62 Лялечка
 
16.03.12
12:40
(60) вот вот...уже попробовала
63 Лялечка
 
16.03.12
12:41
(61) я один программист на эту конфигурацию, так что не может быть такого варианта
64 155153144627
 
16.03.12
12:42
(59) "Не хочет работать" - ошибку выдает или не блокирует записи?
65 Лялечка
 
16.03.12
12:46
(59) выдает ошибку у пользователя не достаточно прав((
66 Лялечка
 
16.03.12
12:49
(64) в консоли запрос работает, но при программном доступе к регистру сведений, метод Прочитать(), выдается ошибка "У пользователя недостаточно прав". Ошибку закрываю, задачу выполняю (вариант выполнения "Отказ") и все ок, без ошибки. Но при этом у бизнес процесса не проставляется вариант завершения "Неудачно"
67 155153144627
 
16.03.12
12:51
А у данного пользователя есть право на чтение ПроектКО и его полей? Если нет, то надо дать, и закрывать через RLS.
68 Лялечка
 
16.03.12
12:52
На справочник ПроектКО тоже права на чтение ограничены:

ПроектыКО ГДЕ (ПроектыКО.УчастникиПроекта.УчастникПроекта = &ТекущийПользователь
           ИЛИ ПроектыКО.ЭтоГруппа = ИСТИНА
           ИЛИ ПроектыКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель = &ТекущееПодразделение
           ИЛИ ПроектыКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель = &ТекущееПодразделение
           ИЛИ ПроектыКО.УчастникиПроекта.УчастникПроекта.Подразделение.Родитель.Родитель.Родитель = &ТекущееПодразделение)
69 Лялечка
 
16.03.12
12:55
А вот в RLS когда права ограничены, нужно выбрать поля, если стоит "Прочие поля" что это значит?
70 Мыш
 
16.03.12
13:18
(69) Выбери поле "Ссылка" и по нему убери ограничение. Добавь ещё одну строку. Там будет "Прочие" - это все остальные. На них ограничение ставь.
Это нужно чтоб некоторые поля всегда были доступны.
71 Лялечка
 
16.03.12
13:20
(70) на регистре нет поля ссылка
72 Мыш
 
16.03.12
13:25
(71) В курсе. Эт я для примера, сори. Чтоб было понимание, откуда берутся "Прочие". Это все поля, кроме указанных явно.
73 Лялечка
 
16.03.12
13:26
(72) спасибо.
74 Лялечка
 
16.03.12
13:27
(73) я уже начинаю думать, что моя задача неразрешима...
75 vde69
 
16.03.12
13:27
прочие поля - это те которые не идентифицируют обьект

для справочника - все кроме ссылки
для регистра - все кроме измерений
76 vde69
 
16.03.12
13:28
(74) твоя задача довольно проста и банальна, я ее тебе уже расписал, нужно только немного ручками поработать
77 155153144627
 
16.03.12
13:33
"Недостаточно прав" ругается же если предприятие, что пользователь пытается открыть то что ему запрещено в конфигураторе. RLS же просто не покажет данные.
Проверяй права пользователя на доступ к Участникам проекта и справочнику Подразделения.
78 Лялечка
 
16.03.12
13:39
(77) к справочнику Подразделения доступ вообще не ограничен, к Участникам проекта он имеет доступ, если имеет доступ к проекту. Если он в проекте участвует, то доступ к проекту он уже имеет
79 Лялечка
 
16.03.12
14:46
(76) ох, спасибо тебе большое. Все же добавила параметр сеанса, прописала ограничения и вроде как отказы стали обрабатываться:)))) (ура!), правда с доступом к регистру все равно что-то не так, что-то лишнее мне выводит, надо проверить еще запрос.
Еще маленький вопросик, а если пользователю поменять подразделение во время сеанса, то получится небольшой косячок...
80 vde69
 
16.03.12
15:15
(79) если хочешь иметь RLS которые будут отслеживать изменения прав в течении дня, то или делаешь переодическое перезаполнение параметра или нужно будет перейти на РС и с ним джойнить

параметр сеанса быстрее работает и с ним все более читабельно, РС более универсален зато более тормозной
81 Лялечка
 
16.03.12
15:18
(80) и все же права ограничены неправильно. Строчка:

ИЛИ БизнесПроцессы.Подразделение В &МассивТекущехПодразделений

дает пользователю из отдела1 видеть все поручения всех остальных сотрудников из отдела1
82 Лялечка
 
16.03.12
15:19
(80) но все равно огромное спасибо!) что-то хоть стало яснее
83 Лялечка
 
16.03.12
17:46
Не работает:( Параметр сеанса установила:

МассивЗначений = ПолучитьПодразделенияДляДоступа();
   ПараметрыСеанса.МассивДоступныхПодразделений = Новый ФиксированныйМассив(МассивЗначений);

Функция ПолучитьПодразделенияДляДоступа() Экспорт
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    Подразделения.Ссылка КАК Подразделение
                  |ИЗ
                  |    Справочник.Подразделения КАК Подразделения
                  |ГДЕ
                  |    Подразделения.Ссылка В ИЕРАРХИИ(&ПользовательПодразделение)";
   
    Запрос.УстановитьПараметр("ПользовательПодразделение", ПараметрыСеанса.ТекущийПользователь.Подразделение);
   
    ВыборкаПодразделений = Запрос.Выполнить().Выбрать();
         
    МассивПодразделений = Новый Массив;
    Пока ВыборкаПодразделений.Следующий() Цикл
       МассивПодразделений.Добавить(ВыборкаПодразделений.Подразделение);    
    КонецЦикла;    
    Возврат МассивПодразделений;
   
КонецФункции

Запрос RLS:

ТекущаяТаблица Из #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчастникиПроектаКО КАК УчастникиПроектаКО
       ПО ТекущаяТаблица.ПроектКО = УчастникиПроектаКО.ПроектКО
ГДЕ ВЫБОР
           КОГДА ТекущаяТаблица.Исполнитель = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Исполнитель.Подразделение В (&МассивДоступныхПодразделений)
                   ИЛИ ТекущаяТаблица.Инициатор = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Инициатор.Подразделение.Родитель В (&МассивДоступныхПодразделений)
                   ИЛИ ТекущаяТаблица.Ответственный = &ТекущийПользователь
                   ИЛИ ТекущаяТаблица.Ответственный.Подразделение.Родитель В (&МассивДоступныхПодразделений)
               ТОГДА ИСТИНА
           ИНАЧЕ ВЫБОР
                   КОГДА ТекущаяТаблица.ПроектКО <> ЗНАЧЕНИЕ(Справочник.ПроектыКО.ПустаяСсылка)
                       ТОГДА УчастникиПроектаКО.УчастникПроекта.Ссылка = &ТекущийПользователь
                        ИЛИ УчастникиПроектаКО.УчастникПроекта.Подразделение.Родитель В (&МассивДоступныхПодразделений)
                   КОНЕЦ
                 КОНЕЦ

Пользователь1 = ТекущийПользователь, он же является ИсполнителемЗадачи. В &МассивДоступныхПодразделений подразделение текущего пользователя. При отказе от задачи ошибка "Недостаточно прав доступа! (НаборРС.Прочитать())". Если в &МассивДоступныхПодразделений добавить все подразделения, то все работает.
Ничего не изменилось((
84 155153144627
 
16.03.12
19:17
Такой вопрос, а исполнитель, инициатор и ответственный являются участниками проекта?
85 155153144627
 
16.03.12
19:20
Если да, тогда создайте новую роль, поставьте полные права.
И на чтение бизнес процесса поставьте

ТекущаяТаблица Из #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчастникиПроектаКО КАК УчастникиПроектаКО
       ПО ТекущаяТаблица.ПроектКО = УчастникиПроектаКО.ПроектКО
ГДЕ УчастникиПроектаКО.УчастникПроекта.Ссылка = &ТекущийПользователь
   ИЛИ УчастникиПроектаКО.УчастникПроекта.Подразделение.Родитель В (&МассивДоступныхПодразделений)
86 vde69
 
16.03.12
22:46
(83) блин да сколько раз говорить, что в RLS НЕЛЬЗЯ использовать неразыменованые значения (более одной точки), точнее можно тольке финя получается :)

лажа:

ТекущаяТаблица.Инициатор.Подразделение.Родитель
ТекущаяТаблица.Ответственный.Подразделение.Родитель
87 Лялечка
 
19.03.12
09:23
(84) в том и дело, что если в поручении проект заполнен, то все ок работает, а вот если проект не заполнен, то получается фигня.
88 Лялечка
 
19.03.12
09:40
(86) блин, я не хочу регистр переделывать, он используется очень часто в других объектах. К тому же половина закрытых функций, которые касаются бизнес-процессов. Не хватало, чтобы у меня еще из-за этого косяки полезли другие
89 155153144627
 
19.03.12
10:03
А может сделать так, в параметре сеанса хранить список пользователей: текущего и тех кто под ним?
И запрос упростить:

ТекущаяТаблица Из #ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ
ТекущаяТаблица.Ответственный В &СписПользователей
ИЛИ ТекущаяТаблица.Инициатор В &СписПользователей
ИЛИ ТекущаяТаблица.Исполнитель В &СписПользователей
90 Лялечка
 
19.03.12
10:04
(89) я уже так и сделала

ТекущаяТаблица.Исполнитель.Подразделение В (&МассивДоступныхПодразделений)

только не список пользователей храню, а список доступных подразделений
91 Лялечка
 
19.03.12
10:07
параметр сеанса заполняется правильно, только вот если в поручении нет проекта, то почему-то не проверяется, является пользователь исполнителем, инициатором или ответственным, а ему сразу закрыт доступ к строке регистра. А вот если пользователю разрешить доступ ко всем подразделениям, то все работает хорошо, только тогда у него есть доступ ко всем записям регистра "Бизнес-процессы", а это плохо
Закон Брукера: Даже маленькая практика стоит большой теории.