Имя: Пароль:
1C
1С v8
Проблема с RLS
0 Dobby_Voy
 
30.09.11
12:30
Здравствуйте, осваиваю RLS, столкнулся с такой проблемой: есть справочник "Договоры контрагентов", у него на чтения у роли "Пользователь" стоит след типовой шаблон:
#Если &ИспользоватьОграничениеПоКонтрагенты ИЛИ &ИспользоватьОграничениеПоОрганизации #Тогда
ТекущаяТаблица
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ТекущаяТаблица
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
           СоставГруппы.Ссылка КАК ГруппаПользователей
       ИЗ
           Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
       ГДЕ
           СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
       ПО (ИСТИНА)
ГДЕ
НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL И НЕ ТекущаяТаблица.Организация ЕСТЬ NULL
И
   (НЕ 1 В
               (ВЫБРАТЬ ПЕРВЫЕ 1
                   1
               ИЗ
                   РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
                                           
                   #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
                   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
                   ПО Контрагенты.Ссылка = ТекущаяТаблица.Владелец
                   #КонецЕсли                                                                              
                   
                   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                       ПО
                           НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР
                                   
                                   #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
                                   КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                                       ТОГДА ЕСТЬNULL(Контрагенты.ГруппаДоступаКонтрагента, ЗНАЧЕНИЕ(Справочник.ГруппыДоступаКонтрагентов.ПустаяСсылка))
                                   #КонецЕсли
                                   
                                   #Если &ИспользоватьОграничениеПоОрганизации  #Тогда
                                   КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                       ТОГДА ЕСТЬNULL(ТекущаяТаблица.Организация, ЗНАЧЕНИЕ(Справочник.Организации.ВяткаМед))
                                   #КонецЕсли
                           
                               КОНЕЦ
                               И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа                                
                               И                                
                               
                               #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
                                   ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                                       ТОГДА НастройкиПравДоступаПользователей.ОбластьДанных В (ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.КонтрагентыДопИнформация), ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.КонтрагентыДанные))
                                   ИНАЧЕ
                                       НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)
                                   КОНЕЦ
                               #Иначе                                    
                                   НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)
                               #КонецЕсли
                               
                                                                                               
                               И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей
               ГДЕ                
                    НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
                          И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (
                                                                                 ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)
                                                                                 
                                                                                 #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
                                                                                 , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                                                                                 #КонецЕсли
                                                                                 
                                                                                 #Если &ИспользоватьОграничениеПоОрганизации #Тогда
                                                                                 , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                                                                 #КонецЕсли
                                                                                 
                                                                                 )
               
                   И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL))
#КонецЕсли
у нас в нем иерархия с группами, то есть храним договоры в папочках для удобства. После ограничения доступа к организациям, группы перестали выходить. я так понимаю потому что у договора есть организация, она проверяется на вхождение, а у группы организации нет, и выходит пустое значение и они не высвечиваются, ума не приложу как сделать что б папки не учавствовали в этом шаблоне, подскажите плиз.
1 Dobby_Voy
 
30.09.11
12:31
#Если &ИспользоватьОграничениеПоКонтрагенты ИЛИ &ИспользоватьОграничениеПоОрганизации #Тогда

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

                   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
                   ПО Контрагенты.Ссылка = ТекущаяТаблица.Владелец
                   #КонецЕсли                                                                              

                   
                   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                       ПО
                           НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР
                                   
                                   #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда

                                   КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                                       ТОГДА ЕСТЬNULL(Контрагенты.ГруппаДоступаКонтрагента, ЗНАЧЕНИЕ(Справочник.ГруппыДоступаКонтрагентов.ПустаяСсылка))
                                   #КонецЕсли

                                   
                                   #Если &ИспользоватьОграничениеПоОрганизации  #Тогда

                                   КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                       ТОГДА ЕСТЬNULL(ТекущаяТаблица.Организация, ЗНАЧЕНИЕ(Справочник.Организации.ВяткаМед))
                                   #КонецЕсли

                           
                               КОНЕЦ
                               И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа                                
                               И                                
                               
                               #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда

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

                                   НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)
                               #КонецЕсли

                               
                                                                                               
                               И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей
               ГДЕ                
                    НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
                          И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (
                                                                                 ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)
                                                                                 
                                                                                 #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда

                                                                                 , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                                                                                 #КонецЕсли

                                                                                 
                                                                                 #Если &ИспользоватьОграничениеПоОрганизации #Тогда

                                                                                 , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                                                                 #КонецЕсли

                                                                                 
                                                                                 )
               
                  И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL))
#КонецЕсли
2 Dobby_Voy
 
30.09.11
12:32
точнее так )
3 asady
 
30.09.11
12:32
(0) тупо при выборе в списке отключайте иерархический режим просмотра и всё увидишь
4 Dobby_Voy
 
30.09.11
12:33
мне они тоже не нужны, юзверам нужны
5 ДемонМаксвелла
 
30.09.11
14:10
Добавь ещё одну роль, и в ней чтение групп договоров дай всем
6 n0ther
 
30.09.11
14:20
(0) сделали так

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

и т.д. по списку
7 Рыжий Лис
 
30.09.11
14:44
(0) Можно просто дать всем права на пустую организацию.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс