Настроен RLS по Номенклатуре, но в отчетах

1. yamawa 50 06.07.16 18:41 Сейчас в теме
УТ 10.3 настроен RLS по Ноименклатуре. В отчетах , например, "Ведомость по товарам на складах", там где выводиться запрещенная к просмотру номенклатура - <Объект не найден>. В модуле каждого отчета можно прописать ПривилегированныйРежим(Истина), тогда возможно будет видна запрещенная номенклатура, но может быть есть более простой вариант?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
20. TODD22 18 07.07.16 10:51 Сейчас в теме
Самое простое сделать запрет подбора такой номенклатуры в табличную часть. Так же сделать подписку на событие и запретить проведение документа если в нём есть неиспользуемая номенклатура.

Но убирать видимость это явно не то... при том что в отчетах это должно быть видно.
yamawa; roofless; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. horoshevall 07.07.16 10:11 Сейчас в теме
(1) yamawa, И нужно, чтобы запрещенная номенклатура была видна? Если наоборот - то в запросе можно попробовать установить "Разрешенные"
6. sergpogo 2 07.07.16 10:14 Сейчас в теме
(1) yamawa, А хотите то чего?
8. yamawa 50 07.07.16 10:18 Сейчас в теме
(6) spogo, мне нужно, чтобы пользователи не видели запрещенную номенклатуру, не могли ее выбрать в документ, но это уже реализовано через RLS. Теперь нужно, чтобы запрещенную номенклатуру можно было просматривать в отчетах. Сейчас по этим позициям <Объект не найден>
10. alex-l19041 8 07.07.16 10:21 Сейчас в теме
(8) yamawa, как-то не стыкуется "не видели запрещенную номенклатуру" и "чтобы запрещенную номенклатуру можно было просматривать"...
11. yamawa 50 07.07.16 10:22 Сейчас в теме
(10) alex-l19041, не видели при подборе в документ, но видели в отчете по номенклатуре, а сейчас там по этим позициям <Объект не найден>
12. TODD22 18 07.07.16 10:26 Сейчас в теме
(11) yamawa, Сделать запрет подбора определённой номенклатуры. Зачем запрет видимости если в отчёте всё равно видно?
38. necropunk 9 07.07.16 12:41 Сейчас в теме
(8) yamawa, можно все отчеты заворачивать в привелегированный режим, конечно. Но я бы наверное сделал какое-нибудь свойство и передавал его в параметры выбора, так и выбрать номенклатуру нельзя будет и параметры выбора будут доступны в «ОбработкаПолученияДанныхВыбора», то есть отловим ввод по строке. Ну и подписка с запретом для хитрожопых копирующих. Вроде бы все варианты лазеек?
39. ZergKRSK 129 07.07.16 12:46 Сейчас в теме
(38) necropunk, ОбработкаПолученияДанныхВыбора - это что, делать изменения в модулях менеджера всех документов?
2. yamawa 50 07.07.16 10:06 Сейчас в теме
добавлено вознаграждение
3. alex-l19041 8 07.07.16 10:10 Сейчас в теме
"запрещенная к просмотру номенклатура - <Объект не найден>" похоже, что запретили чтение объекта, а не только просмотр
5. yamawa 50 07.07.16 10:13 Сейчас в теме
(3) alex-l19041, чтобы пользователь не мог выбрать в документы запрещенную номенклатуру какое право нужно запретить чтение или просмотр?
7. ZergKRSK 129 07.07.16 10:15 Сейчас в теме
(5) yamawa, не проще сделать подписку на событие - проверять на запрещенную номенклатуру и не проводить? Включать РЛС только изза того что выбирают "не ту" номенклатуру не рационально...
9. yamawa 50 07.07.16 10:20 Сейчас в теме
(7) ZergKRSK, по поводу подписки на события, я думаю это их не устроит: набрать накладную, а потом она не будет проводиться, это лишние действия. Если я правильно вас поняла
17. ZergKRSK 129 07.07.16 10:49 Сейчас в теме
(9) yamawa, тогда надо понимать объем запрещенной к вводу в доки номенклатуры. Количество позиций?
19. yamawa 50 07.07.16 10:50 Сейчас в теме
(17) ZergKRSK, где-то 250 позиций
21. ZergKRSK 129 07.07.16 10:53 Сейчас в теме
(19) yamawa, количество не растет?
(20) TODD22, увы, такие позиции можно будет впечатать руками в полее ввода номенклатуры, не открывая форму выбора
22. TODD22 18 07.07.16 10:55 Сейчас в теме
(21) ZergKRSK, Для этого я и предложил сделать подписку с запретом проведения документа.
23. ZergKRSK 129 07.07.16 10:56 Сейчас в теме
(22) TODD22, подписку на событие я еще в (7) предложил
24. yamawa 50 07.07.16 10:59 Сейчас в теме
(23) ZergKRSK, т.е. пользователь вносит документ, вбивает все позиции, потом проверка можно проводить или нет? правильно я понимаю?
25. ZergKRSK 129 07.07.16 11:01 Сейчас в теме
(24) yamawa, да.
Либо делать в форме выбора отбор - отсекать запрещенные номенклатуры. И в полях ввода Номенклатура каждого документа (в к-рых нельзя использовать эту номенклатуру) убирать свойство "РедактированиеТекста"...
26. yamawa 50 07.07.16 11:06 Сейчас в теме
(25) ZergKRSK, не могу у номенклатуры найти свойство РедактированиеТекста...
29. TODD22 18 07.07.16 11:19 Сейчас в теме
(26) yamawa, Не надо вам изменять "РедактированиеТекста"
Достаточно запретить проводить документы с запрещённой номенклатурой в ТЧ. Это можно сделать одной подпиской на все документы.
31. ZergKRSK 129 07.07.16 11:24 Сейчас в теме
(26) yamawa, свойства поля ввода в ТЧ дока
37. sergpogo 2 07.07.16 12:12 Сейчас в теме
(9) yamawa, Привилегированный в помощь
13. dmitrichenko.ivan 6 07.07.16 10:26 Сейчас в теме
Можно сделать программный отбор в форме выбор и обработке подбора.
14. yamawa 50 07.07.16 10:34 Сейчас в теме
(13) dmitrichenko.ivan, в таком случае пользователи могут выбрать номенклатуру через обычное добавление в документе. А мне надо так чтобы ни при каких обстоятельствах нельзя было выбрать запрещенную номенклатуру в документ и сформировать по ней движения
15. alex-l19041 8 07.07.16 10:37 Сейчас в теме
(14) yamawa, если "ни при каких обстоятельствах нельзя...", то откуда же возьмутся движения по такой номенклатуре в отчетах ...
16. yamawa 50 07.07.16 10:40 Сейчас в теме
(15) alex-l19041, по этой номенклатуре были движения до 01.01.2016
18. TODD22 18 07.07.16 10:49 Сейчас в теме
(15) alex-l19041,
то откуда же возьмутся движения по такой номенклатуре в отчетах ...

Например их сделают другие пользователи которым можно.
27. yamawa 50 07.07.16 11:09 Сейчас в теме
(13) dmitrichenko.ivan, если сделать по вашему сценарию при изменении иерархического просмотра справочника (включении/отключении), запрещенную номенклатуру тоже нельзя будет выбрать?
28. dmitrichenko.ivan 6 07.07.16 11:19 Сейчас в теме
(27) yamawa, В отборе ставите "Номенклатура не в списке" или нет в группе. И Отключаете доступность отбора. Дальше как бы человек не менял форму - отключить отбор не сможет
32. ZergKRSK 129 07.07.16 11:25 Сейчас в теме
(28) dmitrichenko.ivan, зато сможет вбить руками эту номенклатуру прямо в поле ввода
34. TODD22 18 07.07.16 11:27 Сейчас в теме
(32) ZergKRSK,
зато сможет вбить руками эту номенклатуру прямо в поле ввода

Может так же скопировать старый документ. Удалить из него не нужные ему позиции, а оставить запрещённые к подбору.
36. ZergKRSK 129 07.07.16 11:35 Сейчас в теме
(34) TODD22, да, или так. Юзеры они такие, везде лазейки найдут...
30. dmitrichenko.ivan 6 07.07.16 11:22 Сейчас в теме
(27) yamawa,
Если пойдете этим путем - то лучше к дополнению отбора все таки сделать подписку на событие (как советовали выше), мало ли люди все таки как -либо вывернутся и добавят запреще. Но, по моему, программного запрета при подборе + письменного распоряжения руководства достаточно)
33. TODD22 18 07.07.16 11:26 Сейчас в теме
(30) dmitrichenko.ivan,
письменного распоряжения руководства достаточно)

Не правильный подход полагаться на письменный запрет.
У нас в одной компании издали запрет. До всех донесли. Но все так и продолжали косячить. Да их штрафовали... но это отнимало колоссальные ресурсы к тому же штрафы это всегда негатив между работником и работодателем. По этому только полный программный запрет к письменному распоряжению. Иначе всё равно найдётся тот кто накосячит. А разбираться потом в первую очередь программисту.
35. dmitrichenko.ivan 6 07.07.16 11:35 Сейчас в теме
(33) TODD22, (32) ZergKRSK, (1) yamawa,
МОжет быть тогда стоит исходить из сути вопроса? Если нельзя продавайть определенный товар, который есть на складе - переместить его или зарезервировать.
Не хотите, чтобы счета выставлялись людям с определенными позициями - уже другое. С одной стороны - минимальные ограничения могут помочь, с другой - что мешает человеку сделать счет в екселе?
20. TODD22 18 07.07.16 10:51 Сейчас в теме
Самое простое сделать запрет подбора такой номенклатуры в табличную часть. Так же сделать подписку на событие и запретить проведение документа если в нём есть неиспользуемая номенклатура.

Но убирать видимость это явно не то... при том что в отчетах это должно быть видно.
yamawa; roofless; +2 Ответить
42. yamawa 50 07.07.16 21:41 Сейчас в теме
я попробую сделать вот так, как в п.(20)
Самое простое сделать запрет подбора такой номенклатуры в табличную часть. Так же сделать подписку на событие и запретить проведение документа если в нём есть неиспользуемая номенклатура.
40. chmv 07.07.16 14:17 Сейчас в теме
я СОВСЕМ НЕДАВНО ПИСАЛА ТАКОЙ ОТЧЕТ, ПРАВДА НА СКД.
САМ ЗАПРОС ПОМЕСТИЛА В ПРИВИЛЕГИРОВАННЫЙ МОДУЛЬ.
ПРИТОМ СОЗДАЛА СПЕЦИАЛЬНО ЕГО, ЧТОБЫ НИКТО СЛУЧАЙНО НЕ ЗАПИХАЛ ТУДА.
ПРИВИЛЕГИРОВАННЫЙ(ОСТОРОЖЕР)
41. Fragster 1139 07.07.16 18:13 Сейчас в теме
мне кажется, или изначально задачу надо было решать не через RLS?
43. yamawa 50 07.07.16 21:42 Сейчас в теме
Всем спасибо за помощь!
44. yamawa 50 08.07.16 18:10 Сейчас в теме
Добавила в конфигурации подписку на событие для нужных документов, где сделана проверка на запрещенную номенклатуру. У меня вопрос насколько это будет тормозить работу пользователей?
45. TODD22 18 08.07.16 20:30 Сейчас в теме
(44) yamawa,
У меня вопрос насколько это будет тормозить работу пользователей?

Смотря что и как добавили. Если сделать всё нормально то ничего тормозить у пользователей не будет.
46. yamawa 50 08.07.16 20:36 Сейчас в теме
(45) TODD22, добавлена подписка на событие ПроверкаДокументаНаЗапрещеннуюНоменклатуру, Событие ПриЗаписи
Процедура ПроверкаДокументаНаЗапрещеннуюНоменклатуруПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
	
	Для Каждого ИсточникТЧ Из Источник.Ссылка.Метаданные().ТабличныеЧасти Цикл
		Если ИсточникТЧ.Реквизиты.Найти("Номенклатура") <> Неопределено Тогда
			ИмяТЧОбъектаМД = ""+Источник.Ссылка.Метаданные().Имя +""+ИсточникТЧ.Имя	;
			Запрос = Новый Запрос;
			Запрос.Текст = 
			"ВЫБРАТЬ
			|" + ИмяТЧОбъектаМД +".НомерСтроки,
			|" + ИмяТЧОбъектаМД +".Номенклатура 
			| ИЗ
			| Документ." + Источник.Ссылка.Метаданные().Имя +"."+ИсточникТЧ.Имя+" КАК "+ ИмяТЧОбъектаМД +"
			|ГДЕ
			|" + ИмяТЧОбъектаМД +".Ссылка = &Источник
			| И " + ИмяТЧОбъектаМД+".Номенклатура В ИЕРАРХИИ (&Номенклатура)";  
			
			Запрос.УстановитьПараметр("Номенклатура", ПараметрыСеанса.ПараметрСеанса1);
			Запрос.УстановитьПараметр("Источник", Источник.ЭтотОбъект.Ссылка);    
			
			РезультатЗапроса = Запрос.Выполнить();
			
			ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
			
			Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
				 Сообщить("в строке №"+ ВыборкаДетальныеЗаписи.НомерСтроки+ " табличной части "+ ИсточникТЧ + "указана запрещенная номенклатура!");
			КонецЦикла;
		КонецЕсли;
		Если НЕ РезультатЗапроса.Пустой() Тогда
			Отказ = Истина;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
49. tailer2 11.07.16 15:48 Сейчас в теме
56. AndrewKiev 14.07.16 21:36 Сейчас в теме
(46) yamawa,
есть ли один регистр куда пишутся движения по номенклатуре? Если есть, то подписку на ПриЗаписи к регистру лучше сделать. Не нужно будет отдельно запросы для ТЧ делать, и в любом случае все документы будут учтены.
47. TODD22 18 09.07.16 05:59 Сейчас в теме
Вот так процедуру перепишите.
      

    Для Каждого ИсточникТЧ Из Источник.Ссылка.Метаданные().ТабличныеЧасти Цикл
        Если ИсточникТЧ.Реквизиты.Найти("Номенклатура") <> Неопределено Тогда
            ИмяТЧОбъектаМД = ""+Источник.Ссылка.Метаданные().Имя +""+ИсточникТЧ.Имя    ;
            Запрос = Новый Запрос;
            Запрос.Текст = 
            "ВЫБРАТЬ
            |" + ИмяТЧОбъектаМД +".НомерСтроки,
            |" + ИмяТЧОбъектаМД +".Номенклатура 
            | ИЗ
            | Документ." + Источник.Ссылка.Метаданные().Имя +"."+ИсточникТЧ.Имя+" КАК "+ ИмяТЧОбъектаМД +"
            |ГДЕ
            |" + ИмяТЧОбъектаМД +".Ссылка = &Источник
            | И " + ИмяТЧОбъектаМД+".Номенклатура В ИЕРАРХИИ (&Номенклатура)";  
            
Запрос.УстановитьПараметр("Номенклатура", ПараметрыСеанса.ПараметрСеанса1);
            Запрос.УстановитьПараметр("Источник", Источник.ЭтотОбъект.Ссылка);    
            
            РезультатЗапроса = Запрос.Выполнить();

            Если НЕ РезультатЗапроса.Пустой() Тогда
            Отказ = Истина;

            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                 Сообщить("в строке №"+ ВыборкаДетальныеЗаписи.НомерСтроки+ " табличной части "+ ИсточникТЧ + "указана запрещенная номенклатура!");
            КонецЦикла;
        КонецЕсли;
КонецЕсли;
   
Показать
48. yamawa 50 09.07.16 08:39 Сейчас в теме
50. splitter01 3 11.07.16 18:11 Сейчас в теме
Может лучше запрет выбора номенклатуры повесить на событие ПриОкончанииРедактирования у табличной части товары? Тогда и подписки не нужны. Правда они тогда будут видны, но при попытке выбора будет ошибка. А еще покапайте в РЛС, если так хочется, чтобы она работала в связке с документом реализации.
52. TODD22 18 12.07.16 06:04 Сейчас в теме
(50) splitter01,
Может лучше запрет выбора номенклатуры повесить на событие ПриОкончанииРедактирования у табличной части товары? Тогда и подписки не нужны.

А потом каждый раз при обновлении помнить про этот код и переносить его в случае изменений в документе?
Уж лучше подписка.
53. splitter01 3 12.07.16 14:32 Сейчас в теме
(52) TODD22, Можно скопировать форму и вызывать ее, а стандартную оставить без изменения. И ни каких проблем с обновлением.
54. TODD22 18 12.07.16 18:27 Сейчас в теме
(53) splitter01, А потом формы не забывать обновлять при изменении кода в типовой так может тогда форму проще дописать?
55. splitter01 3 13.07.16 17:26 Сейчас в теме
(54) TODD22, Вариантом море. И тут, как говорят, о вкусах не спорят.
51. Roman100 12.07.16 00:26 Сейчас в теме
Запрет в подборе "Документ".

&НаКлиенте
Процедура ТоварыНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	Если ЗначениеЗаполнено(Текст)  Тогда
	    СтандартнаяОбработка = Ложь;

    ДанныеВыбора = ПолучитьСкрытые(Текст);

	КонецЕсли;
КонецПроцедуры

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



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

Показать
Оставьте свое сообщение

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