8.х Управление константой ограничением RLS

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем TylerDurdenIII, 26 июн 2015.

  1. TopicStarter Overlay
    TylerDurdenIII
    Offline

    TylerDurdenIII

    Регистрация:
    19 фев 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток.

    У меня установлено ограничение RLS на справочник и есть константа ИспользоватьРЛСдляЭтогоСправочника. Как сделать так, чтобы при значении константы = ЛОЖЬ RLS не отрабатывало?

    Могу конечно дописать в запрос проверку, тогда мне выведет все, но все левые соединения RLS отработают, что будет долго. Т.е. хотелось бы вначале проверить константу и не выполнять остальной запрос.

    Для параметров сеанса это просто - #Если &ПараметрСеанса = Истина Тогда #Конецесли. А как сделать для константы?

    Спасибо заранее за участие в обсуждении.
  2. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Ну если в параметрах сеанса просто , что мешает константу превратить в параметр сеанса?
  3. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Ну я то же за это
    Логично что создали параметр сеанса при старте программы этот праметр установили в зависимости от константы. а уже в РЛС как вы написали
    #Если &ПараметрСеанса = Истина Тогда проверяем РЛС #Конецесли
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    В тексте запроса RLS использовать конструкцию ВЫБОР КОГДА ТОГДА:

    Выбор когда ИСТИНА в (Выбрать Константа.МОЯКОнстанта) тогда
    ИСТИНА
    Иначе
    ВСЕ ОСТАЛЬНОЕ
    КОНЕЦ
  5. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Только там вроде тогда так
    Выбрать ЗНАЧЕНИЕ(Константа.МОЯКОнстанта)
  6. TopicStarter Overlay
    TylerDurdenIII
    Offline

    TylerDurdenIII

    Регистрация:
    19 фев 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Спасибо. Поспешил создавать тему. Можно закрывать.
  7. TopicStarter Overlay
    TylerDurdenIII
    Offline

    TylerDurdenIII

    Регистрация:
    19 фев 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Не получается использовать ВЫБОР КОГДА.

    Мне нужно если константа = ЛОЖЬ тогда возвращить ИСТИНА, а если ИСТИНА, то таблицу.
    Конструкция Выбор Когда не позволяет написать что-то типа

    Выбор Когда Истина В(ВЫБРАТЬ РЛС Из Константы) Тогда
    Истина
    Иначе
    ВЫБРАТЬ (....)
    Конец

    Ругается на Выбрать, т.е. вернуть таблицу оттуда не выйдет.
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Да сделайте через параметр сеанса - определите его там же где и текущий пользователь - делов то
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Эээээ....
    upload_2015-6-26_11-27-0.png

    что я делаю не так?
  10. TopicStarter Overlay
    TylerDurdenIII
    Offline

    TylerDurdenIII

    Регистрация:
    19 фев 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Мне нужно, если константа = Истина, то накладывается сложное РЛС с учетом групп доступа.
  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    сложное РЛС как выглядит?
  12. TopicStarter Overlay
    TylerDurdenIII
    Offline

    TylerDurdenIII

    Регистрация:
    19 фев 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Как типовой шаблон:

    Код:
    ТекущаяТаблица
    ИЗ
        #ТекущаяТаблица КАК ТекущаяТаблица
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
                СоставГруппы.Ссылка КАК ГруппаПользователей
            ИЗ
                Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
            ГДЕ
                СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
            ПО (ИСТИНА)
        
    ГДЕ
    (НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL
    И
        (НЕ 1 В
                    (ВЫБРАТЬ ПЕРВЫЕ 1
                        1
                    ИЗ
                        РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
                                            
                    
                        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                            ПО
                                НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР
                                    
                                        КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                            ТОГДА ТекущаяТаблица.мрскОрганизация
                                       
                                          КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций)
                                            ТОГДА ТекущаяТаблица.мрскПодразделениеОрганизации
                             
                                    КОНЕЦ
                                    И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа
                                    И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)                                                                                              
                                    И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей                             
                    ГДЕ             
                         НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
                               И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (
                                                                                      ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)
                                                                                  
                                                                                        , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                                                                   
                                                                                      , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций)
                                                                                  
                                                                                      )
                
                        И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL)))
    ИЛИ ТекущаяТаблица.ЭтоГруппа = Истина
    --- Объединение сообщений, 26 июн 2015 ---
    Ладно, сделаю через ПараметрСеанса. Будет даже проще, т.к. много где использовать.
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Как-то так:

    Код:
    ТекущаяТаблица
    ИЗ
        #ТекущаяТаблица КАК ТекущаяТаблица
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
                СоставГруппы.Ссылка КАК ГруппаПользователей
            ИЗ
                Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
            ГДЕ
                СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
            ПО (ИСТИНА)
        
    ГДЕ
    
    ВЫБОР КОГДА ЛОЖЬ В (Выбрать Константы.<МояКонстанта> ИЗ Константы)
    Тогда Истина
    Иначе
    
    (НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL
    И
        (НЕ 1 В
                    (ВЫБРАТЬ ПЕРВЫЕ 1
                        1
                    ИЗ
                        РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
                                            
                    
                        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                            ПО
                                НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР
                                    
                                        КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                            ТОГДА ТекущаяТаблица.мрскОрганизация
                                       
                                          КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций)
                                            ТОГДА ТекущаяТаблица.мрскПодразделениеОрганизации
                             
                                    КОНЕЦ
                                    И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа
                                    И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)                                                                                              
                                    И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей                             
                    ГДЕ             
                         НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
                               И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (
                                                                                      ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)
                                                                                  
                                                                                        , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                                                                   
                                                                                      , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций)
                                                                                  
                                                                                      )
                
                        И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL)))
    ИЛИ ТекущаяТаблица.ЭтоГруппа = Истина
    
    КОНЕЦ
    
  14. TopicStarter Overlay
    TylerDurdenIII
    Offline

    TylerDurdenIII

    Регистрация:
    19 фев 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Вот я и говорю, что выходит - даже если константа выкл. все равно сначала строится левое соединение, а потом выводится все равно вся таблица. Поэтому решил делать через параметры сеанса. Спасибо большое.

Поделиться этой страницей