Добрый день. Прошу помощи в настройки РЛС для объекта добавленного через расширение.
Добавили объект через расширение, у объекта имеются помимо прочих 2 поля Подразделение и ПодразделениеПолучатель - оба имеют тип СправочникСсылка.СтруктураПредприятия, по которым и нужно давать доступ через "ИЛИ".
1. Добавил:
2. Там же добавил:
3. Для Роли добавил ограничение:
4. В модуле менеджера документа написал:
5. В форме документа в процедуре ПриЧтенииНаСервере добавил
Однако при таких настройках список документов пустой. Если убираю ограничения доступа через шаблон, то отрабатывает ограничение по реквизиту "Подразделение".
Подскажите пожалуйста, как поправить чтобы отрабатывалось ограничение через "ИЛИ".
Добавили объект через расширение, у объекта имеются помимо прочих 2 поля Подразделение и ПодразделениеПолучатель - оба имеют тип СправочникСсылка.СтруктураПредприятия, по которым и нужно давать доступ через "ИЛИ".
1. Добавил:
&После("ПриЗаполненииСписковСОграничениемДоступа")
Процедура СЮ_ПриЗаполненииСписковСОграничениемДоступа(Списки)
Списки.Вставить(Метаданные.Документы.НарядЗаказ, Истина);
КонецПроцедуры
2. Там же добавил:
&После("ПриЗаполненииВидовОграниченийПравОбъектовМетаданных")
Процедура СЮ_ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание)
Описание = Описание + "
|Документ.НарядЗаказ.Чтение.Подразделения
|Документ.НарядЗаказ.Чтение.Организации
|";
КонецПроцедуры
Показать3. Для Роли добавил ограничение:
#ПоЗначениямРасширенный( "Документ.НарядЗаказ","Чтение","",
"",
"",
"Организации","Т.Организация","И(",
"Подразделения","Т.Подразделение","ИЛИ",
"Подразделения","Т.ПодразделениеПолучателя)","",
"","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" )
Показать4. В модуле менеджера документа написал:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И (ЗначениеРазрешено(Подразделение) ИЛИ ЗначениеРазрешено(ПодразделениеПолучатель))";
КонецПроцедуры
Показать5. В форме документа в процедуре ПриЧтенииНаСервере добавил
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправленияДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправленияДоступом.ПриЧтенииНаСервере(ЭтотОбъект,ТекущийОбъект);
КонецЕсли;
Однако при таких настройках список документов пустой. Если убираю ограничения доступа через шаблон, то отрабатывает ограничение по реквизиту "Подразделение".
Подскажите пожалуйста, как поправить чтобы отрабатывалось ограничение через "ИЛИ".
По теме из базы знаний
- Загрузка цен ЖНВЛП напрямую с сайта ГРЛС для конфигурации “Управление аптечной сетью”
- Ускоряем полнотекстовый поиск в динамических списках
- Негативное влияние большого количества ролей на производительность 1С
- Распространенные ошибки разработчиков, приводящие к проблемам производительности
- Бесшовная доменная аутентификация ОС при интеграции 1С:ERP и 1С:Документооборот
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
UPD при комментировании участка кода
И
Открывается список с ограничением по полю "подразделение".
Если не комментировать второй участок кода то возникает ошибка при обновлении :
При обновлении ключей доступа к элементам данных списка
"Наряд-заказ (Документ)" (для пользователей)
возникла ошибка:
12.10.2021 16:30:03 Невозможно обновить ключ доступа объекта "Наряд-заказ СЮUT-018717 от 12.10.2021 14:02:49" типа "Наряд-заказ",
так как этот тип не указан в определяемом типе ВладелецЗначенийКлючейДоступа.
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17789)}: ВызватьИсключение ТекстОшибки;
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17619)}: ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17415)}: ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(ПорцияЭлементовДанных, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(14444)}: ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами(Элементы, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(13709)}: ОбновитьПорциюЭлементов(Элементы, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(13466)}: ВыполнитьОбновлениеДоступаСписка(ОбщиеПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(12771)}: ВыполнитьОбновлениеДоступаСпискаСПопыткамиПовтора(ОбщиеПараметрыОбновления, Контекст);
Хотя в сам документ пользователь заходит:
Кроме того, для пользователя становится не доступным его "родное" подразделение:
Продолжаю эксперементы.
&После("ПриЗаполненииВидовОграниченийПравОбъектовМетаданных")
Процедура СЮ_ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание)
// Описание = Описание + "
//|Документ.НарядЗаказ.Чтение.Подразделения
//|Документ.НарядЗаказ.Чтение.Организации
//|Документ.НарядЗаказ.Изменение.Подразделения
//|Документ.НарядЗаказ.Изменение.Организации
//|";
КонецПроцедуры
ПоказатьИ
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
// Ограничение.Текст =
//"РазрешитьЧтениеИзменение
//|ГДЕ
//| ЗначениеРазрешено(Организация)
//| И( ЗначениеРазрешено(Подразделение)
//| ИЛИ ЗначениеРазрешено(ПодразделениеПолучатель)
//| ) ";
КонецПроцедуры
ПоказатьОткрывается список с ограничением по полю "подразделение".
Если не комментировать второй участок кода то возникает ошибка при обновлении :
При обновлении ключей доступа к элементам данных списка
"Наряд-заказ (Документ)" (для пользователей)
возникла ошибка:
12.10.2021 16:30:03 Невозможно обновить ключ доступа объекта "Наряд-заказ СЮUT-018717 от 12.10.2021 14:02:49" типа "Наряд-заказ",
так как этот тип не указан в определяемом типе ВладелецЗначенийКлючейДоступа.
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17789)}: ВызватьИсключение ТекстОшибки;
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17619)}: ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17415)}: ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(ПорцияЭлементовДанных, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(14444)}: ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами(Элементы, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(13709)}: ОбновитьПорциюЭлементов(Элементы, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(13466)}: ВыполнитьОбновлениеДоступаСписка(ОбщиеПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(12771)}: ВыполнитьОбновлениеДоступаСпискаСПопыткамиПовтора(ОбщиеПараметрыОбновления, Контекст);
Хотя в сам документ пользователь заходит:
Кроме того, для пользователя становится не доступным его "родное" подразделение:
Продолжаю эксперементы.
(5) да вот и не понятно.. отрабатывает оно только по "стандартным" полям которые есть у метаданных типа "Документ" (организация, подразделение)
Поспрашивал у тех кто с РЛС знаком более менее близко, сказали что переноси объект в конфу и делай как хочешь, а с расширением не получится пока что, может в бедующем что и срастется.
Поспрашивал у тех кто с РЛС знаком более менее близко, сказали что переноси объект в конфу и делай как хочешь, а с расширением не получится пока что, может в бедующем что и срастется.
Чего то не понимаю.
Добавил в роль "ЧтениеДокументовСписанияПоступленияБезналичныхДС" ограничение доступа для вида "Подразделение"
Оно не работает. Не появляется в отчете по правам пользователя вообще никак не отрабатывает.
Никаких ограничений вообще нельзя добавить кроме тех что прописаны в конфе для этой роли (Организация и хоз операция).
Почему?Что не так?
Добавил в роль "ЧтениеДокументовСписанияПоступленияБезналичныхДС" ограничение доступа для вида "Подразделение"
Оно не работает. Не появляется в отчете по правам пользователя вообще никак не отрабатывает.
Никаких ограничений вообще нельзя добавить кроме тех что прописаны в конфе для этой роли (Организация и хоз операция).
Почему?Что не так?
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениям( "Документ.ПоступлениеБезналичныхДенежныхСредств","Чтение","",
"Организации","Организация",
"Склады","Склад",
"Подразделения","Подразделение", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли
Прикрепленные файлы:
(9)
4. В модуле менеджера документа написал:
делали?
4. В модуле менеджера документа написал:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И (ЗначениеРазрешено(Подразделение) ИЛИ ЗначениеРазрешено(ПодразделениеПолучатель))";
КонецПроцедуры
делали?
(12)
У меня он выглядит вот так
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтение
|ГДЕ
| ( ЗначениеРазрешено(Организация)
| ИЛИ ЗначениеРазрешено(РасшифровкаПлатежа.Организация, Null КАК Истина) И ХозяйственнаяОперация В (
| Значение(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента),
| Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика),
| Значение(Перечисление.ХозяйственныеОперации.ПоступлениеДенежныхСредствИзДругойОрганизации),
| Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтДругойОрганизации)
| )
| )И ЗначениеРазрешено(ХозяйственнаяОперация)
| И ВЫБОР КОГДА ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика) ИЛИ ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента)
| ТОГДА ЗначениеРазрешено(РасшифровкаПлатежа.Партнер, Null КАК Истина)
| ИНАЧЕ ИСТИНА КОНЕЦ
|;
|РазрешитьИзменениеЕслиРазрешеноЧтение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(ХозяйственнаяОперация)
| И ВЫБОР КОГДА ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика) ИЛИ ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента)
| ТОГДА ЗначениеРазрешено(РасшифровкаПлатежа.Партнер, Null КАК Истина)
| ИНАЧЕ ИСТИНА КОНЕЦ ";
КонецПроцедуры
ПоказатьУ меня он выглядит вот так
&После("ПриЗаполненииОграниченияДоступа")
Процедура XXX_ПриЗаполненииОграниченияДоступа(Ограничение)
Ограничение.Текст = СтрЗаменить(Ограничение.Текст, "ЗначениеРазрешено(ХозяйственнаяОперация)", "ЗначениеРазрешено(ХозяйственнаяОперация) И ЗначениеРазрешено(Подразделение)");
КонецПроцедуры
Опытным путём выяснил что этого кода достаточно и только.
Получается мне даже в конфигураторе не нужно править роль!? БСП не использует это?
(18) я немного не про это
Вот эта хрень не нужна получается при БСП?
Досточно переопределить это
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениям( "Документ.ПоступлениеБезналичныхДенежныхСредств","Чтение","",
"Организации","Организация",
"Склады","Склад",
"Подразделения","Подразделение", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли
Вот эта хрень не нужна получается при БСП?
&После("ПриЗаполненииОграниченияДоступа")
Процедура XXX_ПриЗаполненииОграниченияДоступа(Ограничение)
..............
"ЗначениеРазрешено(ХозяйственнаяОперация) И ЗначениеРазрешено(Подразделение)");
КонецПроцедуры
Досточно переопределить это
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот