Произвольный поиск с отбором "Содержит" в СКД
По теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Примерный вариант реализации
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ОбработатьНастройки(Настройки);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Процедура ОбработатьНастройки(Настройки)
ПолеОтбора = Новый ПолеКомпоновкиДанных("Наименование");
НайденныйЭлемент = Неопределено;
Для Каждого Элемент Из Настройки.Отбор.Элементы Цикл
Если Элемент.Использование
И ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных")
И Элемент.ЛевоеЗначение = ПолеОтбора
И Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда
СловаПоиска = СтрРазделить(Элемент.ПравоеЗначение, " ", Ложь);
Если СловаПоиска.Количество() > 1 Тогда
НайденныйЭлемент = Элемент;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НайденныйЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки.Отбор.Элементы.Удалить(НайденныйЭлемент);
Для Каждого Слово Из СловаПоиска Цикл
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.ПравоеЗначение = Слово;
КонецЦикла;
КонецПроцедуры
Показать
(4) Получилось с минимальной доработкой примера:
Для Каждого Слово Из СловаПоиска Цикл
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Подобно;
ЭлементОтбора.ПравоеЗначение = "%" + Слово + "%";
КонецЦикла;