«Живой поиск» в 1С v.2

Обновление к предыдущей публикации.
Напомню, что в предыдущем варианте была возможность поиска элемента справочника по частичному совпадению наименования. По просьбам я доделал механизм. Теперь можно искать по любому реквизита справочника и количество таких отборов не ограничено.

Для этого надо сделать экспортную функцию «Живой поиск()» и «ДобавитьОтборВСтруктуру()»

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


В 1С 8.1 и в толстом клиенте 8.2 используем событие поля ввода «ОкончаниеВводаТекста()», т.к. автоподбор текста не позволяет открыть список выбора.

Потом в событии «ОкончаниеВводаТекста()» поля ввода делаем следующее:

ОкончаниеВводаТекста

Процедура ПолеВводаОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	//формируем структуру для отбора - наполняете своими реквизитами поиска. Например, наименование, артикул, код....
	СтруктураОтбора = Новый Структура;
	ДобавитьОтборВСтруктуру(СтруктураОтбора, "Наименование", "подобно", "%" + Текст + "%");
 
	Значение = ЖивойПоиск(СтруктураОтбора, Справочник);//значение - это список выбора, который откроется, ли конкретное значение	
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


В управляемом приложении все намного интереснее — в событии «АвтоПодбор» уже можно задавать «ДанныеВыбора», куда можно передать список значений и он откроется.

АвтоПодбор
&НаКлиенте
Процедура РезультатАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
 
	//формируем структуру для отбора - наполняете своими реквизитами поиска. Например, наименование, артикул, код....
	СтруктураОтбора = Новый Структура;
	ДобавитьОтборВСтруктуру(СтруктураОтбора, "Наименование", "подобно", "%" + Текст + "%");
 
	ДанныеВыбора = ЖивойПоиск(СтруктураОтбора, Справочник);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Ну и конечно есть возможность скачать обработку для толстого и тонкого клиента, где все это реализовано.
Скачать
Живой поиск в 1С -- 11.02 kB, Скачан 272 раз - Скачать