Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 13:37

Отбор (программно) в динамическом списке

Автор Алексей_1985_06, 09 мая 2022, 15:13

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Ребят помогите, как реализовать отбор в ДС, на форму выведен реквизит с типом: Динамический список у которого в качестве основной таблицы - указан регистр сведений (срез последних). При выборе ракеты-носителя в списке значений отображаются все заводские номера данного типа ракеты-носителя, необходимо при установки "галочки" напротив заводского номера осуществлять отбор записей регистра сведений (динамический список) в соответствии с заданными параметрами. Код сейчас такой, но не работает если указывать несколько заводских номеров...

&НаСервере
Процедура РакетаНосительПриИзмененииНаСервере()

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

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

Пока Выборка.Следующий() Цикл
ЗаводскиеНомера.Добавить(Выборка.ЗаводскойНомер)
КонецЦикла;

КонецПроцедуры


&НаКлиенте
Процедура РакетаНосительПриИзменении(Элемент)

ЗаводскиеНомера.Очистить(); // Очистим список значений
РакетаНосительПриИзмененииНаСервере();

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

КонецПроцедуры

 Вот в данной процедуре неоходимо "доработать" код!

&НаКлиенте
Процедура ЗаводскиеНомераПометкаПриИзменении(Элемент)
ДинамическийСписок.Отбор.Элементы.Очистить(); // Очищает динамический список

// Создаем группу отбора:
ГруппаОтбора = ДинамическийСписок.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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


// НЕ ПОЛУЧАЕТСЯ СДЕЛАТЬ ОТБОР ИЗ НЕСКОЛЬКО ЗНАЧЕНИЙ ЗАВОДСКИХ НОМЕРОВ
Для Каждого Элемент Из ЗаводскиеНомера Цикл
Если Элемент.Пометка Тогда

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

КонецЕсли;

КонецЦикла;

КонецПроцедуры

antoneus

А так?

НомераДляОтбора = Новый СписокЗначений;

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

Алексей_1985_06

antoneus, спасибо Вам большое! Все заработало как надо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск