“Живий пошук” в 1С v.2

Оновлення до попередньої публікації.

Нагадаю, що в попередньому варіанті була можливість пошуку елемента довідника по частковому збігу найменування. За проханнями я доробив механізм. Тепер можна шукати по будь-якому реквізиту довідника і кількість таких відборів не обмежена.

Для цього треба зробити експортну функцію “Живой пошук”

Живой поиск

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

В 1С 8.1 та в товстому клієнті 8.2 використовуємо подія поля введення “ОкончаниеВводаТекста()”, тому що автопідбір тексту не дозволяє відкрити список вибору.
Потім у події “ОкончаниеВводаТекста()” поля введення робимо наступне:

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

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

У керованому додатку все набагато цікавіше – в подію “Автоподбор” вже можна задавати “ДанныеВыбора”, куди можна передати список значень і він відкриється.

АвтоПодбор

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

Ну і звичайно є можливість скачати обробку для товстого і тонкого клієнта, де все це реалізовано.

Скачати
Живий пошук в 1С -- 11.02 kB, Скачаний 272 разів - Скачати