Настроен RLS по Номенклатуре, но в отчетах
УТ 10.3 настроен RLS по Ноименклатуре. В отчетах , например, "Ведомость по товарам на складах", там где выводиться запрещенная к просмотру номенклатура - <Объект не найден>. В модуле каждого отчета можно прописать ПривилегированныйРежим(Истина), тогда возможно будет видна запрещенная номенклатура, но может быть есть более простой вариант?
По теме из базы знаний
- Составные типы — бесплатный сыр мышеловки производительности
- Конфигурация Flowcon
- Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки
- Распространенные ошибки разработчиков, приводящие к проблемам производительности
- Исправляем проблемы производительности в конфигурации ERP - 7 примеров
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6) spogo, мне нужно, чтобы пользователи не видели запрещенную номенклатуру, не могли ее выбрать в документ, но это уже реализовано через RLS. Теперь нужно, чтобы запрещенную номенклатуру можно было просматривать в отчетах. Сейчас по этим позициям <Объект не найден>
(8) yamawa, можно все отчеты заворачивать в привелегированный режим, конечно. Но я бы наверное сделал какое-нибудь свойство и передавал его в параметры выбора, так и выбрать номенклатуру нельзя будет и параметры выбора будут доступны в «ОбработкаПолученияДанныхВыбора», то есть отловим ввод по строке. Ну и подписка с запретом для хитрожопых копирующих. Вроде бы все варианты лазеек?
(27) yamawa,
Если пойдете этим путем - то лучше к дополнению отбора все таки сделать подписку на событие (как советовали выше), мало ли люди все таки как -либо вывернутся и добавят запреще. Но, по моему, программного запрета при подборе + письменного распоряжения руководства достаточно)
Если пойдете этим путем - то лучше к дополнению отбора все таки сделать подписку на событие (как советовали выше), мало ли люди все таки как -либо вывернутся и добавят запреще. Но, по моему, программного запрета при подборе + письменного распоряжения руководства достаточно)
(30) dmitrichenko.ivan,
Не правильный подход полагаться на письменный запрет.
У нас в одной компании издали запрет. До всех донесли. Но все так и продолжали косячить. Да их штрафовали... но это отнимало колоссальные ресурсы к тому же штрафы это всегда негатив между работником и работодателем. По этому только полный программный запрет к письменному распоряжению. Иначе всё равно найдётся тот кто накосячит. А разбираться потом в первую очередь программисту.
письменного распоряжения руководства достаточно)
Не правильный подход полагаться на письменный запрет.
У нас в одной компании издали запрет. До всех донесли. Но все так и продолжали косячить. Да их штрафовали... но это отнимало колоссальные ресурсы к тому же штрафы это всегда негатив между работником и работодателем. По этому только полный программный запрет к письменному распоряжению. Иначе всё равно найдётся тот кто накосячит. А разбираться потом в первую очередь программисту.
(33) TODD22, (32) ZergKRSK, (1) yamawa,
МОжет быть тогда стоит исходить из сути вопроса? Если нельзя продавайть определенный товар, который есть на складе - переместить его или зарезервировать.
Не хотите, чтобы счета выставлялись людям с определенными позициями - уже другое. С одной стороны - минимальные ограничения могут помочь, с другой - что мешает человеку сделать счет в екселе?
МОжет быть тогда стоит исходить из сути вопроса? Если нельзя продавайть определенный товар, который есть на складе - переместить его или зарезервировать.
Не хотите, чтобы счета выставлялись людям с определенными позициями - уже другое. С одной стороны - минимальные ограничения могут помочь, с другой - что мешает человеку сделать счет в екселе?
Самое простое сделать запрет подбора такой номенклатуры в табличную часть. Так же сделать подписку на событие и запретить проведение документа если в нём есть неиспользуемая номенклатура.
Но убирать видимость это явно не то... при том что в отчетах это должно быть видно.
Но убирать видимость это явно не то... при том что в отчетах это должно быть видно.
(45) TODD22, добавлена подписка на событие ПроверкаДокументаНаЗапрещеннуюНоменклатуру, Событие ПриЗаписи
Процедура ПроверкаДокументаНаЗапрещеннуюНоменклатуруПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Для Каждого ИсточникТЧ Из Источник.Ссылка.Метаданные().ТабличныеЧасти Цикл
Если ИсточникТЧ.Реквизиты.Найти("Номенклатура") <> Неопределено Тогда
ИмяТЧОбъектаМД = ""+Источник.Ссылка.Метаданные().Имя +""+ИсточникТЧ.Имя ;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|" + ИмяТЧОбъектаМД +".НомерСтроки,
|" + ИмяТЧОбъектаМД +".Номенклатура
| ИЗ
| Документ." + Источник.Ссылка.Метаданные().Имя +"."+ИсточникТЧ.Имя+" КАК "+ ИмяТЧОбъектаМД +"
|ГДЕ
|" + ИмяТЧОбъектаМД +".Ссылка = &Источник
| И " + ИмяТЧОбъектаМД+".Номенклатура В ИЕРАРХИИ (&Номенклатура)";
Запрос.УстановитьПараметр("Номенклатура", ПараметрыСеанса.ПараметрСеанса1);
Запрос.УстановитьПараметр("Источник", Источник.ЭтотОбъект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("в строке №"+ ВыборкаДетальныеЗаписи.НомерСтроки+ " табличной части "+ ИсточникТЧ + "указана запрещенная номенклатура!");
КонецЦикла;
КонецЕсли;
Если НЕ РезультатЗапроса.Пустой() Тогда
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Вот так процедуру перепишите.
Для Каждого ИсточникТЧ Из Источник.Ссылка.Метаданные().ТабличныеЧасти Цикл
Если ИсточникТЧ.Реквизиты.Найти("Номенклатура") <> Неопределено Тогда
ИмяТЧОбъектаМД = ""+Источник.Ссылка.Метаданные().Имя +""+ИсточникТЧ.Имя ;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|" + ИмяТЧОбъектаМД +".НомерСтроки,
|" + ИмяТЧОбъектаМД +".Номенклатура
| ИЗ
| Документ." + Источник.Ссылка.Метаданные().Имя +"."+ИсточникТЧ.Имя+" КАК "+ ИмяТЧОбъектаМД +"
|ГДЕ
|" + ИмяТЧОбъектаМД +".Ссылка = &Источник
| И " + ИмяТЧОбъектаМД+".Номенклатура В ИЕРАРХИИ (&Номенклатура)";
Запрос.УстановитьПараметр("Номенклатура", ПараметрыСеанса.ПараметрСеанса1);
Запрос.УстановитьПараметр("Источник", Источник.ЭтотОбъект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Отказ = Истина;
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("в строке №"+ ВыборкаДетальныеЗаписи.НомерСтроки+ " табличной части "+ ИсточникТЧ + "указана запрещенная номенклатура!");
КонецЦикла;
КонецЕсли;
КонецЕсли;
Показать
Может лучше запрет выбора номенклатуры повесить на событие ПриОкончанииРедактирования у табличной части товары? Тогда и подписки не нужны. Правда они тогда будут видны, но при попытке выбора будет ошибка. А еще покапайте в РЛС, если так хочется, чтобы она работала в связке с документом реализации.
(50) splitter01,
А потом каждый раз при обновлении помнить про этот код и переносить его в случае изменений в документе?
Уж лучше подписка.
Может лучше запрет выбора номенклатуры повесить на событие ПриОкончанииРедактирования у табличной части товары? Тогда и подписки не нужны.
А потом каждый раз при обновлении помнить про этот код и переносить его в случае изменений в документе?
Уж лучше подписка.
Запрет в подборе "Документ".
Справочник.
&НаКлиенте
Процедура ТоварыНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ПолучитьСкрытые(Текст);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьСкрытые(Текст)
ДанныеВыбора = Новый СписокЗначений;
Построитель = Новый ПостроительЗапроса;
Построитель.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.Скрыть
| И Номенклатура.Наименование ПОДОБНО &Наименование + ""%""";
Построитель.Параметры.Вставить("Наименование", Текст);
Построитель.Выполнить();
Таблица = Построитель.Результат.Выгрузить();
Для Каждого Строка Из Таблица Цикл
ДанныеВыбора.Добавить(Строка.Ссылка, Строка.Наименование);
КонецЦикла;
Возврат ДанныеВыбора;
КонецФункции
ПоказатьСправочник.
Если ПоказатьСкрытые = Ложь Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Скрыть");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = ложь;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот