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