Версия для печати темы (https://pro1c.org.ua/index.php?s=d052c2f452102225fdc32b03c48d8034&showtopic=14819)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ РЛС по Складам, док-т "Перемещение Товаров" (1С 8.2)

Автор: Bernet 13.10.13, 22:45

Здравствуйте! Есть следующая задача: в типовой УПП для документа "Перемещение товаров" ограничение на уровне записей по складам настроены следующим образом - если пользователю разрешен доступ хотя бы к одному складу (склад отправитель или склад получатель), то он видит документ в форме списка. Мне же необходимо сделать так чтобы пользователь видел только те документы, где для обоих складов у него есть доступ (т.е. и склад отправитель и склад получатель). Исходный запрос такой:

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


Насколько я понял, нужно изменить вот это условие ИЛИ на И:

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


Изменил строчку с условием на:
ТОГДА НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.СкладОтправитель

и сделал ещё одно левое соединение для Склада Получателя с аналогичным кодом.

Теперь самое интересное - выполняю запрос в Консоли Отчетов, и там мне действительно показывает документы где для обоих складов есть доступ у пользователя, но когда под этим пользователем открываю форму списка документов Перемещения Товаров, все равно вижу документы где есть доступ хотя бы к одному складу.

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

Автор: Ardi 13.10.13, 23:24

Установить программно отбор в журнале в форме выбора и в форме списка. Без РЛС.
Думаю этого будет достаточно.

Автор: Bernet 14.10.13, 9:23

Спасибо за предложение, возьму на заметку как на крайний случай, но все таки хотелось бы решить посредством РЛС, т.к. задача стоит именно такая

Автор: sava1 14.10.13, 9:57

Цитата(Ardi @ 14.10.13, 0:24) *
Установить программно отбор в журнале в форме выбора и в форме списка. Без РЛС.


Это для каждой группы прописывать ? Или я чего-то не понимай ?

Автор: Fabri 14.10.13, 14:38

По моему РЛС тут вообще лишний и эти стопиццот строк кода выше - трата времени и нервов smile.gif
В модуле ФормыСписка документа ПеремещениеТоваров находите/создаете процедуру - ПриОткрытии
Вставляете код:

Если РольДоступна("НашаРоль") Тогда   
ФормаСписка.Отбор.Склад.ВидСравнения = ВидСравнения.ВСписке;
ДостСклады = ПолучитьДоступныеСклады(ТекущийПользователь.Настройки.ГруппаДоступностиСкладов); //Вызываем функцию для получения списка складов
   Если НЕ ДостСклады=Неопределено Тогда
      ФормаСписка.Отбор.Склад.Значение = ДостСклады;
   КонецЕсли;
ФормаСписка.Отбор.Склад.Использование = Истина;
//Можем запретить пользователю менять установленными нами склады
ФормаСписка.Отбор.Склад.Доступность = Ложь;
КонецЕсли;

Функция ПолучитьДоступныеСклады(ГруппаДоступности Складов)
    
Запрос = Новый Запрос;
Запрос.Текст =
        "ВЫБРАТЬ
        |    СоставГруппДоступностиСкладов.Склад
        |ИЗ
        |    РегистрСведений.СоставГруппДоступностиСкладов КАК СоставГруппДоступностиСкладов
        |ГДЕ
        |    СоставГруппДоступностиСкладов.ГруппаДоступности = &ГруппаДоступности";

    Запрос.УстановитьПараметр("ГруппаДоступности", ГруппаДоступности Складов);

    Результат = Запрос.Выполнить().Выгрузить();
        Возврат Результат;
КонецФункции


Прошу прощения, забыл выделить код а редактировать пост не могу.

Точней так:
Если РольДоступна("НашаРоль") Тогда   
ДостСклады = ПолучитьДоступныеСклады(ТекущийПользователь.Настройки.ГруппаДоступностиСкладов); //Вызываем функцию для получения списка складов
   Если НЕ ДостСклады=Неопределено Тогда
      ФормаСписка.Отбор.Склад.ВидСравнения = ВидСравнения.ВСписке;      
      ФормаСписка.Отбор.Склад.Значение = ДостСклады;
      ФормаСписка.Отбор.Склад.Использование = Истина;
      //Можем запретить пользователю менять установленными нами склады
      ФормаСписка.Отбор.Склад.Доступность = Ложь;
КонецЕсли;
КонецЕсли;

Автор: sava1 14.10.13, 15:18

Через неделю ШЕФ скажут - А давай-ка добавим такие-же ограничения еще для 5 групп пользователей, а у этих отберем.... (ну и т.д.)
И кул хацкер 1С опять лезет в конфу, что-бы прописать разрешения для новых ролей.... (или добавлять новую роль?)


Автор: logist 14.10.13, 15:48

Цитата(sava1 @ 14.10.13, 16:18) *
И кул хацкер 1С опять лезет в конфу, что-бы прописать разрешения для новых ролей.... (или добавлять новую роль?)

кул хацкер будет работать с регистром доступности скадов в режиме предприятия.

Автор: Fabri 14.10.13, 15:54

Цитата(sava1 @ 14.10.13, 16:18) *
Через неделю ШЕФ скажут - А давай-ка добавим такие-же ограничения еще для 5 групп пользователей, а у этих отберем.... (ну и т.д.)
И кул хацкер 1С опять лезет в конфу, что-бы прописать разрешения для новых ролей.... (или добавлять новую роль?)


Ну почему же, что мешает создать регистр сведений с измерением "Пользователь" (Справочник.Пользователи) и ресурсом "СкрыватьДругиеСклады" (Булево) и в процедуре осуществлять операции только для тех пользователей у кого установленно значение СкрыватьДругиеСклады=Истина.

Автор: Bernet 14.10.13, 16:06

я вот думаю может эти директивы препроцессора как-то мне мешают... ведь без них, в консоли запрсов я получил то что хотел
просто блин не хочется решать задачи с костылями

Автор: sava1 15.10.13, 7:43

Может проще использовать для "ограниченных" пользователей ордерную систему?
Дописки - это временные меры. Откроет юзер универсальный журнал и все увидит. (и т.д.)

попробовать в этом

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


вместо В () поставить И

Не - не пройдет. Если ограничение на чтение - можно добавить еще одно правило, а если на все - надо писать другой шаблон

Автор: Bernet 25.10.13, 14:53

забыл тут отписаться, в общем решил сделать так: раз посредством чистого запроса РЛС не удалось решить вопрос, а мой запрос в консоли выдает мне правильный результат, решил дешево и сердито выполнить мой запрос перед открытием формы списка, и установить отбор на список документов. В итоге получил тоже что и хотел, просто не совсем так как хотелось бы. Добавлять новые объекты не пришлось, хватило типовых регистров "Настройки прав доступа" и "назначение видов объектов доступа" и это хорошо smile.gif так что может кому-то пригодится такой вариант, тема закрыта, спасибо за внимание

Автор: Torez351 25.03.18, 23:26

Bernet @ 25.10.13, 15:53 * ,
Спасибо за идею. В типовой УТП получилось!
из шаблона

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


Не оптимально, ну и ладно.

Автор: big_ooo 21.06.18, 9:33

так же возникла необходимость в УПП для перемещений показывать только разрешенные склады:
вот рабочий код для RLS по материалам данного поста и Павла Чистова (http://pro1c.org.ua/redirect.php?http://expert.chistov.pro/public/252173/?detail=Y)

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

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua