Пошук інформації в 1С аля “живий пошук Google”

Колись довелось реалізовувати цікаву задачку, зв’язану з пошуком інформації в 1С. Ситуація наступна:

  1. В базі більше 6 000 позицій товарів;
  2. Менеджер з продажу не знає, як точно називається товар (щоб написати початок, а 1С підтягне все інше);
  3. Постійно заходити і вибирати товар із форми списку – довго;

Тому вирішили зробити щось на зразок “живого пошуку” – менеджер вводить частину назви товару, а 1С виводить йому список товарів, які підходять під умови пошуку. Для цього треба зробити експортну функцію “Живой пошук”

Живий пошук

Функция ЖивойПоиск(ТекстПоиска, ИмяСправочника) Экспорт
Если ТекстПоиска = "" Или ИмяСправочника = "" Тогда
Возврат Неопределено;
КонецЕсли;
 
Если Метаданные.Справочники.Найти(ИмяСправочника) = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
 
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Ссылка
|ИЗ
| Справочник." + ИмяСправочника + " КАК Таблица
|ГДЕ
| Таблица.Наименование ПОДОБНО &Наименование";
 
Параметр = "%" + ТекстПоиска + "%";
 
Запрос.УстановитьПараметр("Наименование", Параметр);
 
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
 
Возврат Список;
КонецФункции 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Потім в події “ОкончаниеВводаТекста()” поля вводу робимо наступне:

Процедура

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

Процедура розрахована на пошук в різних довідниках, який передається параметром.