ВидСравнения "ВСписке" при отборе в табличной части на управляемых формах
Добрый день!
Задача:
Управляемая форма (далее УФ). Существует процедура, устанавливающая отбор в табличной части. Табличная часть состоит из двух колонок: "Продукция" и " Настройка продукции". Входящий параметр процедуры - список значений по которым надо установить отбор в таб.части.
Всегда работал на обычных формах. Там отбор очень просто программируется. Указывается значение, вид сравнения, использование и.т.д.
Для управляемых форм накопал по отборам в интернете только это:
Для динамических списков:
Сброс отбора:
Для табличных частей:
Элементы.КонтейнерыФакт.ОтборСтрок = Новый ФиксированнаяСтруктура("РеквизитПоКоторомуВыполняетсяОтбор", ЗначениеОтбора);
Сброс отбора:
Дело в том, что я не смог найти информацию, как на УФ для отбора передавать не Значение, а СписокЗначений, другими словами, как на УФ настроить ВидСравнения, аналогично как на ОФ.
Второй день работы на УФ и возник затык.
Большое спасибо за помощь!
Задача:
Управляемая форма (далее УФ). Существует процедура, устанавливающая отбор в табличной части. Табличная часть состоит из двух колонок: "Продукция" и " Настройка продукции". Входящий параметр процедуры - список значений по которым надо установить отбор в таб.части.
Всегда работал на обычных формах. Там отбор очень просто программируется. Указывается значение, вид сравнения, использование и.т.д.
Для управляемых форм накопал по отборам в интернете только это:
Для динамических списков:
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяПоляОтбора");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = ЗначениеПоляОтбора;
Сброс отбора:
Элементы.ДинамическийСписок.Отбор.Элементы.Очистить();
Для табличных частей:
Элементы.КонтейнерыФакт.ОтборСтрок = Новый ФиксированнаяСтруктура("РеквизитПоКоторомуВыполняетсяОтбор", ЗначениеОтбора);
Сброс отбора:
Элементы.КонтейнерыФакт.ОтборСтрок = НЕопределено;
Дело в том, что я не смог найти информацию, как на УФ для отбора передавать не Значение, а СписокЗначений, другими словами, как на УФ настроить ВидСравнения, аналогично как на ОФ.
Второй день работы на УФ и возник затык.
Большое спасибо за помощь!
По теме из базы знаний
- Трюки 1С 8 – Передача формы документа в форму выбора
- Управляемое приложение: правильное программное открытие форм
- Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке
- Отбор/фильтр в отчетах/СКД/обработках 1C: БП, УТ, ERP, Кронос: WMS по файлу Excel, текстовому файлу или списку текстовых строк (номер документа, артикул, ИНН, QR-код, штрих-код, наименование)
- Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) так а в чем проблема разобраться в УФ создать на форме динамический список, если надо, чтобы было определенная ТабЧасть задать отбор на ссылку в фикс настройках. Так не припомню, чтобы мне когда-то приходилось ТЧ ограничивать отбором, для пользователя есть поиск вместо отбора как было в обычных формах
Может быть кому-нибудь поможет такой вариант отбора табличной части или результата запроса!
Далее можно как обрабатывать данные так и их загрузить обратно
СЗ_ДляОтбора = Новый СписокЗначений;
ТаблицаДанных = Объект.ТаблицаДанных.Выгрузить();
СЗ_ДляОтбора.ЗагрузитьЗначения(ТаблицаДанных.ВыгрузитьКолонку("НаименованиеКолонки")); // или испльзовать свой массив данных
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаДанных);
// можно сразу - ОписаниеИсточникаДанных(Объект.ТаблицаДанных.Выгрузить()); если не надо выгружать колонку
// строк отбора можно добавить несколько разных видов сравнения по разным колонкам
СтрокаОтбора = Построитель.Отбор.Добавить("Наименование"); // В Колонке
СтрокаОтбора.ВидСравнения = ВидСравнения.НеВСписке;
СтрокаОтбора.Значение = СЗ_ДляОтбора;
СтрокаОтбора.Использование = Истина;
Построитель.Выполнить();
ТЗ_Результат = Построитель.Результат.Выгрузить();
ПоказатьДалее можно как обрабатывать данные так и их загрузить обратно
Объект.ТаблицаДанных.Загрузить(ТЗ_Результат);
(3) Пробовали в фиксированную структуру вставлять в качестве значения список значений, массив, фиксированный массив? Если ничего из этого не помогло, то полагаю, что выход только один: добавить служебную колонку булего типа, заполнить ее значениями Истина в тех строках, что должны проходить отбор, и уже накладывать отбор ТЧ по служебной колонке.
(4)
Пробовал так:
И так:
Ничего не работает :( С служебной колонкой, это выход, но костыль. Неужели в УФ нет заложенного механизма наложения программного отбора с видом сравнения "В списке". Это же абсурд о_О
Пробовал так:
МассивПродукции = Новый Массив;
Для каждого ТекСтр из тзПродукция Цикл
МассивПродукции.Добавить(ТекСтр.Продукция);
КонецЦикла;
Элементы.НастройкиПродукции.ОтборСтрок = Новый ФиксированнаяСтруктура("Продукция", МассивПродукции );
И так:
СписокПродукции = Новый СписокЗначений;
Для каждого ТекСтр из тзПродукция Цикл
СписокПродукции .Добавить(ТекСтр.Продукция);
КонецЦикла;
Элементы.НастройкиПродукции.ОтборСтрок = Новый ФиксированнаяСтруктура("Продукция", СписокПродукции);
Ничего не работает :( С служебной колонкой, это выход, но костыль. Неужели в УФ нет заложенного механизма наложения программного отбора с видом сравнения "В списке". Это же абсурд о_О
(5) А так?
Честно говоря, я гадаю, извините.
Скорее всего у Вас ничего не получится без костылей. Ведь задать список интерактивно при поиске Вы ведь не можете. Значит маловероятно, что можно это сделать программно.
МассивПродукции = Новый Массив;
Для каждого ТекСтр из тзПродукция Цикл
МассивПродукции.Добавить(ТекСтр.Продукция);
КонецЦикла;
Элементы.НастройкиПродукции.ОтборСтрок = Новый ФиксированнаяСтруктура("Продукция", Новый ФиксированныйМассив(МассивПродукции) );
Честно говоря, я гадаю, извините.
Скорее всего у Вас ничего не получится без костылей. Ведь задать список интерактивно при поиске Вы ведь не можете. Значит маловероятно, что можно это сделать программно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот