понедельник, 31 марта 2014 г.

1С Установка и сброс отбора динамического списка

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



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