Клиент попросил поиск номенклатуры в табличной части документа как и в глобальном поиске, по любому вхождению. В результате написал такой код.
Все через запрос, через "Подобно".
Для снижения нагрузки на базу можно реализовать начала поиска при вводе пробела. В моем коде запросы срабатывают после вводе каждого символа, начиная с с третьего.
Основная особенность в том, что ищет по двум раздельным словам. К примеру, номенклатура: "Шоколад (Milka/С клубникой со сливками/300г.)" можно ввести "Milka 300" и запрос найдет максимально схожую номенклатуру, несмотря на лишние слова между искомыми словами в названии номенклатуры.
Код встраиваем в нужный нам документ:
&НаКлиенте
Процедура РасшПоиск_ТоварыНоменклатураАвтоПодборПосле(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	Если СтрДлина(Текст) < 2 тогда
		Возврат;
	КонецЕсли;
	СтандартнаяОбработка = Ложь; 
	СписокН = Новый СписокЗначений;
	СписокН.ЗагрузитьЗначения(ПолучитьНоменклатуру(Текст));
	ДанныеВыбора = СписокН;      
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьНоменклатуру(ТекстПоиска)
	
	Запрос = Новый Запрос();
	МассивСтрок = СтрРазделить(ТекстПоиска, " ");
	Если МассивСтрок.Количество() > 1 Тогда 
		Индекс = 0;
		Для Каждого Строка из МассивСтрок Цикл                                                
			Если Индекс = 0 Тогда			
				СтрокаПоиска = "Номенклатура.Наименование ПОДОБНО  &Наименование" + Индекс;
			Иначе
				СтрокаПоиска = СтрокаПоиска + " И Номенклатура.Наименование ПОДОБНО  &Наименование" + Индекс;
			КонецЕсли;
			
			Запрос.УстановитьПараметр("Наименование" + Индекс, "%" + Строка + "%"); 
			Индекс = Индекс + 1;
		КонецЦикла; 
	Иначе
		СтрокаПоиска = "Номенклатура.Наименование ПОДОБНО  &Наименование";
		Запрос.УстановитьПараметр("Наименование", "%" + ТекстПоиска + "%");
   КонецЕсли;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Номенклатура.Ссылка КАК Номенклатура
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ " + СтрокаПоиска + "
	|	И Номенклатура.ЭтоГруппа = ЛОЖЬ";
		
    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); 
	
Конецфункции
Вступайте в нашу телеграмм-группу Инфостарт
 
                                    