Произвольный поиск с отбором "Содержит" в СКД

1. DesertPunk 01.06.23 18:31 Сейчас в теме
Добрый день! Столкнулся со следующей проблемой: хочу реализовать произвольный поиск по наименованию. Нужно чтобы выводился общий результат отбора как по "ключ газовый", так и по "газовый ключ". Прошу помочь.
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 01.06.23 18:51 Сейчас в теме
(1) Можно в ПриКомпоновкеРезультата отловить такой отбор и преобразовать его в группу отборов И, разделив текст поиска по словам.
3. DesertPunk 01.06.23 18:52 Сейчас в теме
(2)Спасибо. Будем посмотреть
4. SlavaKron 01.06.23 19:14 Сейчас в теме
Примерный вариант реализации
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ОбработатьНастройки(Настройки);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

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

Разработчик 1С
Ростов-на-Дону
зарплата от 230 000 руб. до 260 000 руб.
Полный день

Консультант 1С ERP
Москва
зарплата от 200 000 руб. до 250 000 руб.
Полный день

Аналитик 1C
Самара
зарплата от 160 000 руб. до 180 000 руб.
Полный день

Старший программист 1С
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день