Отбор динамического списка по группе (чтобы не показывал все ссылки что есть в группе)

1. andrey7617 64 11.10.24 16:18 Сейчас в теме
Добрый день уважаемые форумчане. УНФ 3.0

Прошу помощи у гуру …

Была поставлена задача сделать так чтобы менеджер видел остатки всех товаров – но при этом не видел материалы (Группа материалы – код НФ-00000007).

В УНФ 3.0 пользователь видит остатки в списке номенклатуры и в форме подбора, которые по сути это форма списка номенклатуры.
Я подумал проще всего это сделать через отбор динамического списка.

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

Показать


Почему то такой код не работает, при чем не работает ВидСравненияКомпоновкиДанных.НеВИерархии и ВидСравненияКомпоновкиДанных.НеРавно - показывает полностью группу Материалы …

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



Но если задать отбор "Родитель.Код" НеСодержит "НФ-00000007" то работает с ограничением что если в группе материалы создать подгруппу то все будет видно …


Подскажите пжл
1) почему первый отбор не работает ? что нужно написать чтобы указать в отборе группу и сказать что все элементы которые в этой группе и подчиненные пользователь не мог видеть ?
2) если получиться как сделать тоже самое но с отбором 2 "Родитель.Код" ?

Заранее спасибо !!!

ниже ссылка на конфигурацию (Отбор устанавилвается в процедуре УстановитьОтборБезГруппы модуля __Сервер)
https://dropmefiles.com/8v7jj
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vladimir_korshun 86 11.10.24 17:34 Сейчас в теме
(1)

Поставь точку остановки, посмотри что возвращает ГруппаМатериаллы. (убрал Истина)

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


Если уже есть настройки и они мешают, можно их очистить.

Список.Отбор.Очистить();


Ещё можно в интерфейсе пользователя, где список, Ещё- Настроить список - указать отбор руками.
Как получиться, такой же сделать программно.
andrey7617; +1 Ответить
4. SlavaKron 11.10.24 17:36 Сейчас в теме
(1) В модуле формы списка есть процедура УстановитьОтборПоИерархии(). В ней перезаписывается отбор по полю Родитель, если включен режим отображения по группам.
Вам необходимо переделать процедуру ЗаполнитьДеревоИерархии, чтобы в нее не попадала группа "НФ-00000007" и ее подчиненные группы.
andrey7617; +1 Ответить
3. andrey7617 64 11.10.24 17:36 Сейчас в теме
vladimir_korshun спасибо за вовлеченность - но это как раз не работает как я писал выше ...
5. andrey7617 64 11.10.24 18:14 Сейчас в теме
SlavaKron спасибо за вовлеченность - но В модуле формы списка нет ни процедуры УстановитьОтборПоИерархии() ни ЗаполнитьДеревоИерархии() ...

УНФ у меня если что 3.0.7.122

Интересно что их нету даже в УНФ 1.6 - 1.6.23.117
8. SlavaKron 11.10.24 18:30 Сейчас в теме
(5) Есть в вашей же конфигурации, которую прикрепили.
Прикрепленные файлы:
andrey7617; +1 Ответить
6. andrey7617 64 11.10.24 18:16 Сейчас в теме
vladimir_korshun

Если уже есть настройки и они мешают, можно их очистить.

- нет вообще никаких настроек нет и если пишу код

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


- то это не работает не понимаю почему ... вы можете тоже сами попробовать работать не будет ...
7. andrey7617 64 11.10.24 18:17 Сейчас в теме
vladimir_korshun

Ещё можно в интерфейсе пользователя, где список, Ещё- Настроить список - указать отбор руками.
Как получиться, такой же сделать программно.

- ну а так конечно не пойдет - нужно чтобы пользователь не мог поменять данную настройку
13. vladimir_korshun 86 15.10.24 16:09 Сейчас в теме
(7) Покажите как вы настроили вручную в интерфейсе, и у вас получилось. (скриншот)
А мы поможем это написать программно.
9. andrey7617 64 14.10.24 10:15 Сейчас в теме
Upну ... может кто знает ???
10. Tanya_o 13 14.10.24 11:12 Сейчас в теме
Вот так по идее должно работать. Попробуйте.

ГруппаМатериаллы = Справочники.Номенклатура.НайтиПоКоду("НФ-00000007", Истина);

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));   
ЭлементОтбора.ЛевоеЗначение    = Новый ПолеКомпоновкиДанных("Ссылка"); 
ЭлементОтбора.ВидСравнения     = ВидСравненияКомпоновкиДанных.НеВИерархии; 
ЭлементОтбора.Использование    = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;  
ЭлементОтбора.ПравоеЗначение   = ГруппаМатериаллы;
Показать
andrey7617; SlavaKron; +2 Ответить
11. user1519152 14.10.24 12:03 Сейчас в теме
Имхо через отбор как то сложно получается, все его дергают. Имхо лучше просто запрос динсписка исправить как вам надо для ваших пользователей.
andrey7617; SlavaKron; +2 Ответить
12. user1519152 14.10.24 13:38 Сейчас в теме
Вот здесь мне кажется самое место где запрос поменять можно
Процедура ПереопределитьТекстЗапросаСписокЗапасы()
andrey7617; +1 Ответить
Оставьте свое сообщение

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