Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> РЛС по Складам, док-т "Перемещение Товаров" (1С 8.2) , Необходимо настроить ограничение доступа на уровне записей по складам          
Bernet Подменю пользователя
сообщение 13.10.13, 22:45
Сообщение #1

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 330 раз
Рейтинг: 0

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


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

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


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

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

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

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


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Ardi Подменю пользователя
сообщение 13.10.13, 23:24
Сообщение #2

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

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


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: Bernet,

Bernet Подменю пользователя
сообщение 14.10.13, 9:23
Сообщение #3

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 330 раз
Рейтинг: 0

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


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

sava1 Подменю пользователя
сообщение 14.10.13, 9:57
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

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


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

Fabri Подменю пользователя
сообщение 14.10.13, 14:38
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

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

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

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

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


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

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


Сообщение отредактировал pablo - 14.10.13, 14:07
Причина редактирования: еще и кавычки поправил

Спасибо сказали: avel1976,

sava1 Подменю пользователя
сообщение 14.10.13, 15:18
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

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


logist Подменю пользователя
сообщение 14.10.13, 15:48
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: Bernet,

Fabri Подменю пользователя
сообщение 14.10.13, 15:54
Сообщение #8

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

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


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

Спасибо сказали: Bernet,

Bernet Подменю пользователя
сообщение 14.10.13, 16:06
Сообщение #9

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 330 раз
Рейтинг: 0

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


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

sava1 Подменю пользователя
сообщение 15.10.13, 7:43
Сообщение #10

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

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

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

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


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

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

Спасибо сказали: Bernet,

Bernet Подменю пользователя
сообщение 25.10.13, 14:53
Сообщение #11

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 330 раз
Рейтинг: 0

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


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Спасибо сказали: Vofka,

Torez351 Подменю пользователя
сообщение 25.03.18, 23:26
Сообщение #12

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

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
Сообщение #13

Молчаливый
*
Группа: Пользователи
Сообщений: 2
Из: Днепр
Спасибо сказали: 1 раз
Рейтинг: 0

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

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

Спасибо сказали: Bernet,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 01.11.24, 1:17
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!