Это продолжение предыдущей статьи про возможности полнотекстового поиска в 1с.
Сегодня мы поговорим, как программно искать обьекты. Для этого мы создадим простенькую обработку, которая будет состоять из одной формы, на которой кроме стандартных кнопок будут два элемента поле ввода строки поиска и поля HTML документа для отображения результатов поиска. Общий вид такой:
Дальше даю просто код с комментариями:
перем СписокПоиска; Процедура КнопкаВыполнитьНажатие(Кнопка) // проверка на актуальность индекса // в случае если индекс не актуален в обязательном порядке обновляем его Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда Попытка Предупреждение("Пробуем обновить индекс. Это может занять некоторое время"); ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь); Предупреждение("Все хорошо индекс обновлен!"); Исключение Предупреждение(("Упс! Ошибка при обновлении индекса!") + ОписаниеОшибки()); КонецПопытки; КонецЕсли; СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок("", 10); // первый параметр строка поиска, второй размер списка СписокПоиска.ПолучатьОписание = Истина; ПоказыватьОписания = Истина; СписокПоиска.ПорогНечеткости = 25; //процент нечеткости для слова из 4 букв, одна может быть неправильной СписокПоиска.СтрокаПоиска = ТекстПоиска; // текст поиска можно задать и так СписокПоиска.РазмерПорции = 10; // а ето, сколько стандартно будет вывожится результатов СписокПоиска.ПерваяЧасть(); Колво = СписокПоиска.ПолноеКоличество(); Если СписокПоиска.ПолноеКоличество() = 0 Тогда Предупреждение("Начего не найдено!" ); Если СписокПоиска.СлишкомМногоРезультатов() Тогда Предупреждение("Найдено слишком много результатов!"); КонецЕсли; Возврат; КонецЕсли; //здесь выведем результаты в поле HTML документа СтрHTML = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст); ЭлементыФормы.HTMLОтображение.УстановитьТекст(СтрHTML); КонецПроцедуры Процедура HTMLОтображениеonclick(Элемент, pEvtObj) // данная процедура нужна для того чтобы при нажатии на // ссылку в поле HTML документа открывался тот объект, который нашел наш нечеткий поиск // ее я нагло скопировал из стандартной обработки htmlElement = pEvtObj.srcElement; Если (htmlElement.id = "FullTextSearchListItem") Тогда номерВСписке = Число(htmlElement.nameProp); ВыбраннаяСтрока = списокПоиска[номерВСписке]; ОткрытьЗначение(ВыбраннаяСтрока.Значение); pEvtObj.returnValue = Ложь; КонецЕсли; КонецПроцедуры
Вот и все, простенький поиск по всей базе данных у нас готов. Выводит результаты и их можно даже открыть и просмотреть