рлс

1. user1118625 11 12.10.21 13:21 Сейчас в теме
Добрый день. Прошу помощи в настройки РЛС для объекта добавленного через расширение.

Добавили объект через расширение, у объекта имеются помимо прочих 2 поля Подразделение и ПодразделениеПолучатель - оба имеют тип СправочникСсылка.СтруктураПредприятия, по которым и нужно давать доступ через "ИЛИ".

1. Добавил:
&После("ПриЗаполненииСписковСОграничениемДоступа")
Процедура СЮ_ПриЗаполненииСписковСОграничениемДоступа(Списки)
	Списки.Вставить(Метаданные.Документы.НарядЗаказ, Истина);
КонецПроцедуры


2. Там же добавил:
&После("ПриЗаполненииВидовОграниченийПравОбъектовМетаданных")
Процедура СЮ_ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание)
		Описание = Описание + "
	|Документ.НарядЗаказ.Чтение.Подразделения
	|Документ.НарядЗаказ.Чтение.Организации
	|";
КонецПроцедуры
Показать

3. Для Роли добавил ограничение:
#ПоЗначениямРасширенный( "Документ.НарядЗаказ","Чтение","",
"",
"",
"Организации","Т.Организация","И(",
"Подразделения","Т.Подразделение","ИЛИ",
"Подразделения","Т.ПодразделениеПолучателя)","",
"","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" )
Показать

4. В модуле менеджера документа написал:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	Ограничение.Текст =
			"РазрешитьЧтениеИзменение
			|ГДЕ
			|	ЗначениеРазрешено(Организация)
			|	И (ЗначениеРазрешено(Подразделение) ИЛИ ЗначениеРазрешено(ПодразделениеПолучатель))";
КонецПроцедуры
Показать

5. В форме документа в процедуре ПриЧтенииНаСервере добавил
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправленияДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
		МодульУправленияДоступом.ПриЧтенииНаСервере(ЭтотОбъект,ТекущийОбъект);
		КонецЕсли;


Однако при таких настройках список документов пустой. Если убираю ограничения доступа через шаблон, то отрабатывает ограничение по реквизиту "Подразделение".

Подскажите пожалуйста, как поправить чтобы отрабатывалось ограничение через "ИЛИ".
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dem0 12.10.21 13:28 Сейчас в теме
(1)
В форме документа

В форме документа или списка документов?
А откуда у вас вообще эта последовательность?
РЛС меня тоже интересует - присоединяюсь к вопросу.
Это в какой базе делается? ERP 2? УТ 11? КА 2?
3. user1118625 11 12.10.21 13:28 Сейчас в теме
(2)
у вас вообще эта последовательность?
Это УТ 11.4
4. user1118625 11 12.10.21 16:34 Сейчас в теме
UPD при комментировании участка кода
&После("ПриЗаполненииВидовОграниченийПравОбъектовМетаданных")
Процедура СЮ_ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание)
	//	Описание = Описание + "
	//|Документ.НарядЗаказ.Чтение.Подразделения
	//|Документ.НарядЗаказ.Чтение.Организации
	//|Документ.НарядЗаказ.Изменение.Подразделения
	//|Документ.НарядЗаказ.Изменение.Организации
	//|";
КонецПроцедуры
Показать

И
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	//	Ограничение.Текст =
	//"РазрешитьЧтениеИзменение
	//|ГДЕ
	//|	ЗначениеРазрешено(Организация)
	//|	И( ЗначениеРазрешено(Подразделение)
	//|	ИЛИ ЗначениеРазрешено(ПодразделениеПолучатель)
	//|	) ";

КонецПроцедуры
Показать

Открывается список с ограничением по полю "подразделение".
Если не комментировать второй участок кода то возникает ошибка при обновлении :
При обновлении ключей доступа к элементам данных списка
"Наряд-заказ (Документ)" (для пользователей)
возникла ошибка:
12.10.2021 16:30:03 Невозможно обновить ключ доступа объекта "Наряд-заказ СЮUT-018717 от 12.10.2021 14:02:49" типа "Наряд-заказ",
так как этот тип не указан в определяемом типе ВладелецЗначенийКлючейДоступа.
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17789)}: ВызватьИсключение ТекстОшибки;
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17619)}: ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(17415)}: ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(ПорцияЭлементовДанных, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(14444)}: ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами(Элементы, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(13709)}: ОбновитьПорциюЭлементов(Элементы, ПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(13466)}: ВыполнитьОбновлениеДоступаСписка(ОбщиеПараметрыОбновления);
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(12771)}: ВыполнитьОбновлениеДоступаСпискаСПопыткамиПовтора(ОбщиеПараметрыОбновления, Контекст);

Хотя в сам документ пользователь заходит:


Кроме того, для пользователя становится не доступным его "родное" подразделение:



Продолжаю эксперементы.
5. N_s_s 2 29.10.21 03:37 Сейчас в теме
(4)
То есть проблема не в вынесении объекта в расширение, если РЛС отрабатывает?
6. user1118625 11 29.10.21 10:45 Сейчас в теме
(5) да вот и не понятно.. отрабатывает оно только по "стандартным" полям которые есть у метаданных типа "Документ" (организация, подразделение)

Поспрашивал у тех кто с РЛС знаком более менее близко, сказали что переноси объект в конфу и делай как хочешь, а с расширением не получится пока что, может в бедующем что и срастется.
7. IgorMan2 30.11.21 16:21 Сейчас в теме
Чего то не понимаю.
Добавил в роль "ЧтениеДокументовСписанияПоступленияБезналичныхДС" ограничение доступа для вида "Подразделение"
Оно не работает. Не появляется в отчете по правам пользователя вообще никак не отрабатывает.
Никаких ограничений вообще нельзя добавить кроме тех что прописаны в конфе для этой роли (Организация и хоз операция).
Почему?Что не так?

#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениям( "Документ.ПоступлениеБезналичныхДенежныхСредств","Чтение","",
"Организации","Организация",
"Склады","Склад",
"Подразделения","Подразделение", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли
Прикрепленные файлы:
8. IgorMan2 30.11.21 16:25 Сейчас в теме
(7)
Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт

Ну капец. целый день потратил. Надо сюда еще дописывать ваши хотелки :(
11. user1118625 11 30.11.21 16:52 Сейчас в теме
(7) а вот тут прописывали?
&После("ПриЗаполненииВидовОграниченийПравОбъектовМетаданных")
14. IgorMan2 30.11.21 17:10 Сейчас в теме
(11)
ПриЗаполненииВидовОграниченийПравОбъектовМетаданных


Даже в двух местах
УправлениеДоступомЛокализация
УправлениеДоступомПереопределяемый
9. IgorMan2 30.11.21 16:45 Сейчас в теме
А вот и нет. все равно ничего не работает. ни ограничение. ни отчет по правам не показывает :((
10. user1118625 11 30.11.21 16:50 Сейчас в теме
(9) а в модули добавили как описывал выше?
12. user1118625 11 30.11.21 16:58 Сейчас в теме
(9)
4. В модуле менеджера документа написал:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    Ограничение.Текст =
            "РазрешитьЧтениеИзменение
            |ГДЕ
            |    ЗначениеРазрешено(Организация)
            |    И (ЗначениеРазрешено(Подразделение) ИЛИ ЗначениеРазрешено(ПодразделениеПолучатель))";
КонецПроцедуры


делали?
13. IgorMan2 30.11.21 17:09 Сейчас в теме
(12)
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтение
	|ГДЕ
	|	( ЗначениеРазрешено(Организация)
	|	ИЛИ ЗначениеРазрешено(РасшифровкаПлатежа.Организация, Null КАК Истина) И ХозяйственнаяОперация В (
	|		Значение(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента),
	|		Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика),
	|		Значение(Перечисление.ХозяйственныеОперации.ПоступлениеДенежныхСредствИзДругойОрганизации),
	|		Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтДругойОрганизации)
	|		)
	|	)И ЗначениеРазрешено(ХозяйственнаяОперация)
	|	И ВЫБОР КОГДА ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика) ИЛИ ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента)
	|	ТОГДА ЗначениеРазрешено(РасшифровкаПлатежа.Партнер, Null КАК Истина)
	|	ИНАЧЕ ИСТИНА КОНЕЦ 
	|;
	|РазрешитьИзменениеЕслиРазрешеноЧтение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)
	|	И ЗначениеРазрешено(ХозяйственнаяОперация)
	|	И ВЫБОР КОГДА ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика) ИЛИ ХозяйственнаяОперация = Значение(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента)
	|	ТОГДА ЗначениеРазрешено(РасшифровкаПлатежа.Партнер, Null КАК Истина)
	|	ИНАЧЕ ИСТИНА КОНЕЦ ";

КонецПроцедуры
Показать


У меня он выглядит вот так
15. IgorMan2 30.11.21 17:20 Сейчас в теме
В общем заработал. Добавил все подряд %:)
Завтра буду вычищать лишнее
16. user1118625 11 30.11.21 17:47 Сейчас в теме
(15) так там ни слова про подразделение :)
17. IgorMan2 30.11.21 19:23 Сейчас в теме
&После("ПриЗаполненииОграниченияДоступа")
Процедура XXX_ПриЗаполненииОграниченияДоступа(Ограничение)
	Ограничение.Текст = СтрЗаменить(Ограничение.Текст, "ЗначениеРазрешено(ХозяйственнаяОперация)", "ЗначениеРазрешено(ХозяйственнаяОперация) И ЗначениеРазрешено(Подразделение)");
КонецПроцедуры


Опытным путём выяснил что этого кода достаточно и только.
Получается мне даже в конфигураторе не нужно править роль!? БСП не использует это?
18. user1118625 11 30.11.21 20:43 Сейчас в теме
(17) почему же? если ты переопределил поведение типовой вещи, плохо это или хорошо .... ИМХО надо делать новую роль, которая накладывает НОВЫЕ ограничения на существующие вещи, чтоб всегда была возможность откатиться до дефолта и начать сначала (с)
19. IgorMan2 01.12.21 07:00 Сейчас в теме
(18) я немного не про это

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

Вот эта хрень не нужна получается при БСП?

&После("ПриЗаполненииОграниченияДоступа")
Процедура XXX_ПриЗаполненииОграниченияДоступа(Ограничение)
    ..............
"ЗначениеРазрешено(ХозяйственнаяОперация) И ЗначениеРазрешено(Подразделение)");
КонецПроцедуры

Досточно переопределить это
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот