УТ 10.3 настроен RLS по Ноименклатуре. В отчетах , например, "Ведомость по товарам на складах", там где выводиться запрещенная к просмотру номенклатура - <Объект не найден>. В модуле каждого отчета можно прописать ПривилегированныйРежим(Истина), тогда возможно будет видна запрещенная номенклатура, но может быть есть более простой вариант?
---
Самое простое сделать запрет подбора такой номенклатуры в табличную часть. Так же сделать подписку на событие и запретить проведение документа если в нём есть неиспользуемая номенклатура.

Но убирать видимость это явно не то... при том что в отчетах это должно быть видно.
---
yamawa, И нужно, чтобы запрещенная номенклатура была видна? Если наоборот - то в запросе можно попробовать установить "Разрешенные"
---
yamawa, А хотите то чего?
---
spogo, мне нужно, чтобы пользователи не видели запрещенную номенклатуру, не могли ее выбрать в документ, но это уже реализовано через RLS. Теперь нужно, чтобы запрещенную номенклатуру можно было просматривать в отчетах. Сейчас по этим позициям <Объект не найден>
---
yamawa, как-то не стыкуется "не видели запрещенную номенклатуру" и "чтобы запрещенную номенклатуру можно было просматривать"...
---
alex-l19041, не видели при подборе в документ, но видели в отчете по номенклатуре, а сейчас там по этим позициям <Объект не найден>
---
yamawa, Сделать запрет подбора определённой номенклатуры. Зачем запрет видимости если в отчёте всё равно видно?
---
yamawa, можно все отчеты заворачивать в привелегированный режим, конечно. Но я бы наверное сделал какое-нибудь свойство и передавал его в параметры выбора, так и выбрать номенклатуру нельзя будет и параметры выбора будут доступны в «ОбработкаПолученияДанныхВыбора», то есть отловим ввод по строке. Ну и подписка с запретом для хитрожопых копирующих. Вроде бы все варианты лазеек?
---
necropunk, ОбработкаПолученияДанныхВыбора - это что, делать изменения в модулях менеджера всех документов?
---
добавлено вознаграждение
---
"запрещенная к просмотру номенклатура - <Объект не найден>" похоже, что запретили чтение объекта, а не только просмотр
---
alex-l19041, чтобы пользователь не мог выбрать в документы запрещенную номенклатуру какое право нужно запретить чтение или просмотр?
---
yamawa, не проще сделать подписку на событие - проверять на запрещенную номенклатуру и не проводить? Включать РЛС только изза того что выбирают "не ту" номенклатуру не рационально...
---
ZergKRSK, по поводу подписки на события, я думаю это их не устроит: набрать накладную, а потом она не будет проводиться, это лишние действия. Если я правильно вас поняла
---
yamawa, тогда надо понимать объем запрещенной к вводу в доки номенклатуры. Количество позиций?
---
ZergKRSK, где-то 250 позиций
---
yamawa, количество не растет?
(20) TODD22, увы, такие позиции можно будет впечатать руками в полее ввода номенклатуры, не открывая форму выбора
---
ZergKRSK, Для этого я и предложил сделать подписку с запретом проведения документа.
---
TODD22, подписку на событие я еще в (7) предложил
---
ZergKRSK, т.е. пользователь вносит документ, вбивает все позиции, потом проверка можно проводить или нет? правильно я понимаю?
---
yamawa, да.
Либо делать в форме выбора отбор - отсекать запрещенные номенклатуры. И в полях ввода Номенклатура каждого документа (в к-рых нельзя использовать эту номенклатуру) убирать свойство "РедактированиеТекста"...
---
ZergKRSK, не могу у номенклатуры найти свойство РедактированиеТекста...
---
yamawa, Не надо вам изменять "РедактированиеТекста"
Достаточно запретить проводить документы с запрещённой номенклатурой в ТЧ. Это можно сделать одной подпиской на все документы.
---
yamawa, свойства поля ввода в ТЧ дока
---
yamawa, Привилегированный в помощь
---
Можно сделать программный отбор в форме выбор и обработке подбора.
---
dmitrichenko.ivan, в таком случае пользователи могут выбрать номенклатуру через обычное добавление в документе. А мне надо так чтобы ни при каких обстоятельствах нельзя было выбрать запрещенную номенклатуру в документ и сформировать по ней движения
---
yamawa, если "ни при каких обстоятельствах нельзя...", то откуда же возьмутся движения по такой номенклатуре в отчетах ...
---
alex-l19041, по этой номенклатуре были движения до 01.01.2016
---
alex-l19041, то откуда же возьмутся движения по такой номенклатуре в отчетах ...
Например их сделают другие пользователи которым можно.
---
dmitrichenko.ivan, если сделать по вашему сценарию при изменении иерархического просмотра справочника (включении/отключении), запрещенную номенклатуру тоже нельзя будет выбрать?
---
yamawa, В отборе ставите "Номенклатура не в списке" или нет в группе. И Отключаете доступность отбора. Дальше как бы человек не менял форму - отключить отбор не сможет
---
dmitrichenko.ivan, зато сможет вбить руками эту номенклатуру прямо в поле ввода
---
ZergKRSK, зато сможет вбить руками эту номенклатуру прямо в поле ввода
Может так же скопировать старый документ. Удалить из него не нужные ему позиции, а оставить запрещённые к подбору.
---
TODD22, да, или так. Юзеры они такие, везде лазейки найдут...
---
yamawa,
Если пойдете этим путем - то лучше к дополнению отбора все таки сделать подписку на событие (как советовали выше), мало ли люди все таки как -либо вывернутся и добавят запреще. Но, по моему, программного запрета при подборе + письменного распоряжения руководства достаточно)
---
dmitrichenko.ivan, письменного распоряжения руководства достаточно)
Не правильный подход полагаться на письменный запрет.
У нас в одной компании издали запрет. До всех донесли. Но все так и продолжали косячить. Да их штрафовали... но это отнимало колоссальные ресурсы к тому же штрафы это всегда негатив между работником и работодателем. По этому только полный программный запрет к письменному распоряжению. Иначе всё равно найдётся тот кто накосячит. А разбираться потом в первую очередь программисту.
---
TODD22, (32) ZergKRSK, (1) yamawa,
МОжет быть тогда стоит исходить из сути вопроса? Если нельзя продавайть определенный товар, который есть на складе - переместить его или зарезервировать.
Не хотите, чтобы счета выставлялись людям с определенными позициями - уже другое. С одной стороны - минимальные ограничения могут помочь, с другой - что мешает человеку сделать счет в екселе?
---
Самое простое сделать запрет подбора такой номенклатуры в табличную часть. Так же сделать подписку на событие и запретить проведение документа если в нём есть неиспользуемая номенклатура.

Но убирать видимость это явно не то... при том что в отчетах это должно быть видно.
---
я попробую сделать вот так, как в п.(20) Самое простое сделать запрет подбора такой номенклатуры в табличную часть. Так же сделать подписку на событие и запретить проведение документа если в нём есть неиспользуемая номенклатура.
---
я СОВСЕМ НЕДАВНО ПИСАЛА ТАКОЙ ОТЧЕТ, ПРАВДА НА СКД.
САМ ЗАПРОС ПОМЕСТИЛА В ПРИВИЛЕГИРОВАННЫЙ МОДУЛЬ.
ПРИТОМ СОЗДАЛА СПЕЦИАЛЬНО ЕГО, ЧТОБЫ НИКТО СЛУЧАЙНО НЕ ЗАПИХАЛ ТУДА.
ПРИВИЛЕГИРОВАННЫЙ(ОСТОРОЖЕР)
---
мне кажется, или изначально задачу надо было решать не через RLS?
---
Всем спасибо за помощь!
---
Добавила в конфигурации подписку на событие для нужных документов, где сделана проверка на запрещенную номенклатуру. У меня вопрос насколько это будет тормозить работу пользователей?
---
yamawa, У меня вопрос насколько это будет тормозить работу пользователей?
Смотря что и как добавили. Если сделать всё нормально то ничего тормозить у пользователей не будет.
---
TODD22, добавлена подписка на событие ПроверкаДокументаНаЗапрещеннуюНоменклатуру, Событие ПриЗаписи

```1c
    Процедура ПроверкаДокументаНаЗапрещеннуюНоменклатуруПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

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

    Запрос.УстановитьПараметр("Номенклатура", ПараметрыСеанса.ПараметрСеанса1);
    Запрос.УстановитьПараметр("Источник", Источник.ЭтотОбъект.Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить("в строке №"+ ВыборкаДетальныеЗаписи.НомерСтроки+ " табличной части "+ ИсточникТЧ + "указана запрещенная номенклатура!");
    КонецЦикла;
    КонецЕсли;
    Если НЕ РезультатЗапроса.Пустой() Тогда
    Отказ = Истина;
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```
---
yamawa, ПередЗаписью
---
yamawa,
есть ли один регистр куда пишутся движения по номенклатуре? Если есть, то подписку на ПриЗаписи к регистру лучше сделать. Не нужно будет отдельно запросы для ТЧ делать, и в любом случае все документы будут учтены.
---
Вот так процедуру перепишите.

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

    Запрос.УстановитьПараметр("Номенклатура", ПараметрыСеанса.ПараметрСеанса1);
    Запрос.УстановитьПараметр("Источник", Источник.ЭтотОбъект.Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

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

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить("в строке №"+ ВыборкаДетальныеЗаписи.НомерСтроки+ " табличной части "+ ИсточникТЧ + "указана запрещенная номенклатура!");
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
```
---
TODD22, Спасибо
---
Может лучше запрет выбора номенклатуры повесить на событие ПриОкончанииРедактирования у табличной части товары? Тогда и подписки не нужны. Правда они тогда будут видны, но при попытке выбора будет ошибка. А еще покапайте в РЛС, если так хочется, чтобы она работала в связке с документом реализации.
---
splitter01, Может лучше запрет выбора номенклатуры повесить на событие ПриОкончанииРедактирования у табличной части товары? Тогда и подписки не нужны.
А потом каждый раз при обновлении помнить про этот код и переносить его в случае изменений в документе?
Уж лучше подписка.
---
TODD22, Можно скопировать форму и вызывать ее, а стандартную оставить без изменения. И ни каких проблем с обновлением.
---
splitter01, А потом формы не забывать обновлять при изменении кода в типовой так может тогда форму проще дописать?
---
TODD22, Вариантом море. И тут, как говорят, о вкусах не спорят.
---
Запрет в подборе "Документ".

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

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

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

    &НаСервере
    Функция ПолучитьСкрытые(Текст)

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

    Построитель.Выполнить();
    Таблица = Построитель.Результат.Выгрузить();

    Для Каждого Строка Из Таблица Цикл
    ДанныеВыбора.Добавить(Строка.Ссылка, Строка.Наименование);
    КонецЦикла;

    Возврат ДанныеВыбора;

    КонецФункции
```

Справочник.

```1c
    Если ПоказатьСкрытые = Ложь Тогда

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