Имя: Пароль:
1C
1С v8
Запрос с параметром в динамическом списке
,
0 badboychik
 
18.08.11
07:38
Хочу чтоб при открытии формы в дереве выводилась не вся номенклатура, а только из определенной группы. Делаю динамический список, там запрос с параметром.
Делаю

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   Номенклатура.Параметры.УстановитьЗначениеПараметра("Корень", ПолучитьПродукцию());
КонецПроцедуры

и нифига. ВСе равно вся номенклатура показывается!!
1 Alex_MA
 
18.08.11
07:56
запрос покажи
2 badboychik
 
18.08.11
08:01
Да запрос примитивный

ВЫБРАТЬ
   СправочникНоменклатура.Ссылка,
   СправочникНоменклатура.Наименование
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
   СправочникНоменклатура.Ссылка В ИЕРАРХИИ (&Корень)
3 Alex_MA
 
18.08.11
08:03
такое ощущение, что у тебя одна папка номенклатуры, а ПолучитьПродукцию() как раз ее и возвращает ?
4 badboychik
 
18.08.11
08:08
ПолучитьПродукцию() возвращает с сервера корневой элемент (группу), из которой надо выводить в список подчиненные элементы
5 SeraFim
 
18.08.11
08:20
Проверь в отладчике, точно ли ПолучитьПродукцию() возвращает группу?
Такое поведение возможно, если параметр будет пустой ссылкой или неопределено
6 y88
 
18.08.11
08:22
Можно создавать фильтр списка программно (см. ПриСозданииНаСервере)
Если фильтр всегда по одному параметру, то можно в кнфигураторе настроить фильтр и управлять им через Процедура ФильтрПОПриИзменении

Пример:

// =========== ФИЛЬТРЫ ==========
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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


&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ПриСозданииНаСервере(Ложь,Ложь);
КонецПроцедуры
7 badboychik
 
18.08.11
08:23
Возвращает нормально, присваивается параметр нормально. А на форме никак не заметно, видно всю номенклатуру. Где то в настройках наверно надо что то поставить. Смотрю конфу УНФ, там все как я и сделал, по части запроса и функции УстановитьЗначениеПараметра(...)
8 badboychik
 
18.08.11
08:50
Короче, установка отборов не работает в режиме дерева и иерархического списка. Если просто список сделать, то работает!! Вот засада-то, в простом списке неудобно!
9 nimoid
 
18.08.11
08:55
свое дерево строй...
10 badboychik
 
18.08.11
09:01
Хм.. идея... Получить данные запросом и влить в свою таблицу значений?
11 nimoid
 
18.08.11
09:03
(10) в дерево значений
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан