Скрыть чужие документы в ЗКГУ3

1. user1878860 14.05.24 06:16 Сейчас в теме
Здравствуйте!

Как можно скрыть чужие документы (и вообще все объекты) от пользователя, если он не имеет роли "полные права"?
Чужими для него являются все объекты, которые созданы не им.

Например, открывается список "Все кадровые документы", а в списке отображаются документы созданные только текущим пользователем, не имеющим роли "полный права".

Нужно не запретить открытие или запретить редактирование, а именно вообще скрыть из предприятия эти объекты.
Найденные решения
5. SlavaKron 14.05.24 10:00 Сейчас в теме
(3)
в каждой открываемой форме прописывать отбор
С учетом сказанного в (4), уточню — формы менять вообще не надо. Предлагается создать подписку к объекту составного типа: ДокументМенеджер, ЖурналДокументовМенеджер. В подписке следующий код:
Процедура Расш1_ПодпискаНаСобытие1ОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт
	Если (ВидФормы = "ФормаСписка" Или ВидФормы = "ФормаВыбора") И Не РольДоступна("ПолныеПрава") Тогда
		МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Источник));
		Если МетаданныеОбъекта <> Неопределено Тогда
			СтандартнаяОбработка = Ложь;
			
			Если Параметры.Свойство("Отбор") Тогда
				Отбор = Параметры.Отбор;
			Иначе
				Отбор = Новый Структура;
			КонецЕсли;
			
			Отбор.Вставить("Ответственный", ПараметрыСеанса.ТекущийПользователь);
			Параметры.Вставить("Отбор", Отбор);
			
			ВыбраннаяФорма = МетаданныеОбъекта.ПолноеИмя() + "." + ВидФормы;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
Показать
Позволил себе другой способ определения метаданных, чтобы журналы тоже работали.
Прикрепленные файлы:
config; scarl1n; user1878860; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 14.05.24 06:47 Сейчас в теме
(1) Ну допустим так:
&После("ОбработкаПолученияФормы")
Процедура Расш1_ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
	Если ВидФормы = "ФормаСписка" И Не РольДоступна("ПолныеПрава") Тогда
		СтандартнаяОбработка = Ложь;
		
		Если Параметры.Свойство("Отбор") Тогда
			Отбор = Параметры.Отбор;
		Иначе
			Отбор = Новый Структура;
		КонецЕсли;
		
		Отбор.Вставить("Ответственный", ПараметрыСеанса.ТекущийПользователь);
		Параметры.Вставить("Отбор", Отбор);
		
		ВыбраннаяФорма = "ЖурналДокументов.КадровыеДокументы." + ВидФормы;
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
user1878860; +1 Ответить
3. user1878860 14.05.24 07:35 Сейчас в теме
(2) это я понял. Это сработает.

А какого-то более универсального способа не существует?
Чтобы не надо было отдельно в каждой открываемой форме прописывать отбор
4. scarl1n 10 14.05.24 07:52 Сейчас в теме
(3)Таким же способом. У подписки на событие поставить источник "ДокументМенеджер", чтобы срабатывала для всех документов. Выбранную форму указывать при помощи метаданных источника:
СсылкаНаПустойДокумент = Источник.ПустаяСсылка();
МетаданныеДокумента = СсылкаНаПустойДокумент.Метаданные();
ИмяДокумента = МетаданныеДокумента.ПолноеИмя();
ВыбраннаяФорма = ИмяДокумента + "." + ВидФормы;
SlavaKron; user1878860; +2 Ответить
5. SlavaKron 14.05.24 10:00 Сейчас в теме
(3)
в каждой открываемой форме прописывать отбор
С учетом сказанного в (4), уточню — формы менять вообще не надо. Предлагается создать подписку к объекту составного типа: ДокументМенеджер, ЖурналДокументовМенеджер. В подписке следующий код:
Процедура Расш1_ПодпискаНаСобытие1ОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт
	Если (ВидФормы = "ФормаСписка" Или ВидФормы = "ФормаВыбора") И Не РольДоступна("ПолныеПрава") Тогда
		МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Источник));
		Если МетаданныеОбъекта <> Неопределено Тогда
			СтандартнаяОбработка = Ложь;
			
			Если Параметры.Свойство("Отбор") Тогда
				Отбор = Параметры.Отбор;
			Иначе
				Отбор = Новый Структура;
			КонецЕсли;
			
			Отбор.Вставить("Ответственный", ПараметрыСеанса.ТекущийПользователь);
			Параметры.Вставить("Отбор", Отбор);
			
			ВыбраннаяФорма = МетаданныеОбъекта.ПолноеИмя() + "." + ВидФормы;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
Показать
Позволил себе другой способ определения метаданных, чтобы журналы тоже работали.
Прикрепленные файлы:
config; scarl1n; user1878860; +3 Ответить
6. scarl1n 10 14.05.24 10:06 Сейчас в теме
(5)Кстати, да, форму ведь менять для такой задачи и не нужно. А так, способ определения метаданных из (5) мне понравился больше) Сам не додумался.
SlavaKron; user1878860; +2 Ответить
7. user1878860 14.05.24 11:30 Сейчас в теме
(5) да, выглядит всё правильно! Большое спасибо! Это даже не помощь, а готовое решение! Уау!
Оставьте свое сообщение

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