132 документа
← К списку

Глава 27. Глобальный поиск

страница

Глава 27. Глобальный поиск

27.1. Общая информация

Глобальный поиск ‑ это механизм, который позволяет выполнять как поиск по данным информационной базы, так и любые другие действия, которые необходимы в прикладном решении.

По умолчанию глобальный поиск осуществляет собственно поиск по различным областям информационной базы, позволяет вычислять арифметические выражения, а также, позволяет переходить по навигационным ссылкам (как на объекты конфигурации, так и на различные ресурсы сети Интернет).

Разработчик может доработать механизм поиска таким образом, что при вводе в поисковую строку некоторых предопределенных данных, прикладное решение будет выполнять действия, которые по умолчанию выполнить нельзя. Например, простое указание символов штрихкод приведет к поиску этой строки с использованием всех используемых видов поиска. В то же время, если предварить штрихкод строкой шк (в строке поиска будет текст вида шк 12345678), то поиск будет выполнен только по реквизиту Штрихкод справочника Товаров, который предварительно проиндексирован.

Рассмотрим устройство и схему работы механизма глобального поиска.

Глобальный поиск включает в себя:

1. План глобального поиска, который описывает «что» и «где» будет выполняться.

2. Методы встроенного языка, которые реализуют необходимые действия.

3. Событие, которое позволяет изменить план глобального поиска в зависимости от того, что набирает пользователь с поле глобального поиска.

4. Собственно механизм поиска, который:

● Выполняет те действия, которые разработчик включил в состав плана глобального поиска.

● Формирует результат поиска.

5. Событие, которое позволяет особым образом обработать выбор какого-либо результата поиска, сформированного во время предыдущих шагов.

С точки зрения пользовательских действий и реакции на них разработчика, поиск выглядит следующим образом:

1. Задается план глобального поиска по умолчанию, а также справочная информация о поиске. Это делается один раз, при начале работы системы.

2. Пользователь вводит информацию в поле глобального поиска.

3. Разработчик может обработать этот ввод и модифицировать план поиска, который будет использоваться в этом конкретном поиске.

4. Результаты поиска отображаются по мере их получения. Отображение результатов зависит от значения приоритета каждого из используемых видов поиска.

5. При выборе из результата поиска имеется возможность обработать этот выбор для особой реакции в требуемых случаях.

Рассмотрим более подробно устройство описанных инструментов.

27.2. План глобального поиска

План глобального поиска доступен через свойство глобального контекста ГлобальныйПоиск (объект типа МенеджерГлобальногоПоиска). Следовательно, обращение к методам программного интерфейса будут выглядеть следующим образом: ГлобальныйПоиск.ИмяВызываемогоМетода(). Для упрощения, в нижеследующем тексте имя свойства глобального контекста будет опускаться (кроме, очевидно, примеров на встроенном языке).

С помощью менеджера можно выполнить все основные действия:

● Выполнить поиск (метод НачатьПоиск()).

● Установить и получить план глобального поиска по умолчанию (методы УстановитьПлан()/ПолучитьПлан()).

● Установить и получить описание того, как выполнить поиск (методы УстановитьОписание()/ПолучитьОписание()).

● Установить и получить текст, который будет отображаться в поле глобального поиска (методы УстановитьПодсказкуВвода()/ПолучитьПодсказкуВвода()).

План глобального поиска определяет, «где» и «как» будет искать механизм поиска. Метод ПолучитьПлан() возвращает объект типа ПланГлобальногоПоиска, который состоит из объектов ЭлементПланаГлобальногоПоиска. Каждый элемент глобального поиска описывает одно «элементарное» действие, которое будет выполнять платформа. Действие может быть:

● Стандартным. Это такое действие, которое выполняет платформа.

● Заданным с помощью встроенного языка. Это действие, которое реализует разработчик прикладного решения.

Стандартные действия описываются системным перечислением СтандартныйВидГлобальногоПоиска. Предоставляются следующие стандартные виды:

● ФункцииДляТехническогоСпециалиста. Обычные условия поиска. Выполняется поиск по представлениям объектов конфигурации. Поиск выполняется только если в настройках включено использование диалога Функции для технического специалиста. В качестве представления используется тот же текст, который отображается в окне Функции для технического специалиста. Перечень доступных объектов (по которым выполняется поиск) также полностью совпадает со списком объектов в диалоге Функции для технического специалиста.

Для поиска по стандартным функциям используется локализованное представление стандартных функций. Другими словами, для того, чтобы найти какую-либо стандартную функцию, необходимо набрать в поле глобального поиска текст, который отображается диалогом Функции для технического специалиста для этой функции. Например, для открытия стандартной функции Журнал регистрации можно набрать журн регистр, а для Получение лицензии ‑ набрать получ лицен.

В результаты поиска выводится не больше 10 найденных значений.

При выборе результата поиска обработчик ПриВыбореРезультатаГлобальногоПоиска не вызывается, открывается соответствующая форма объекта метаданных.

Поиск выполняется на сервере в фоновом задании.

● Выражение. Осуществляется попытка вычислить строку поиска как выражение. Поиск выполняется на клиенте.

● ГлобальныеСтандартныеКоманды. Обычные условия поиска. Поиск выполняется по командам меню Сервис и настройки. Поиск выполняется на клиенте. Обрабатываются следующие поисковые строки:

● избранное ‑ для открытия избранного работы пользователей.

● изменить масштаб ‑ для открытия формы изменения масштаба интерфейса (меню Сервис и настройки``‑ Изменить масштаб).

● история сообщений ‑ для открытия формы истории сообщений (меню Обсуждения, видеозвонки, показ экрана``‑ История сообщений).

● история ‑ для открытия истории работы пользователя.

● календарь ‑ для открытия формы календаря (меню Сервис и настройки``‑ Календарь).

● калькулятор ‑ для открытия формы калькулятора (меню Сервис и настройки``‑ Калькулятор).

● настройка начальной страницы ‑ для открытия формы настройки начальной страницы (меню Сервис и настройки``‑ Настройки``‑ Настройка начальной страницы).

● настройка панелей ‑ для открытия формы настройки панелей (меню Сервис и настройки``‑ Настройки``‑ Настройка панелей).

● настройка панели разделов ‑ для открытия формы настройки панели разделов (меню Сервис и настройки``‑ Настройки``‑ Настройка панелей разделов).

● о программе ‑ для открытия формы О программе (меню Сервис и настройки``‑ О программе).

● обсуждения ‑ для открытия списка обсуждений (меню Сервис и настройки``‑ Окна``‑ Обсуждения).

● оповещения ‑ для открытия Центра оповещений.

● параметры ‑ для открытия формы редактирования параметров клиентского приложения (меню Сервис и настройки``‑ Настройки``‑ Параметры).

● содержание справки ‑ для открытия содержимого справочной информации (меню Сервис и настройки``‑ Справка``‑ Содержание справки).

● справка ‑ для открытия справочной информации по текущему контексту (меню Сервис и настройки``‑ Справка``‑ Справка).

● функции для технического специалиста ‑ для открытия диалога Функции для технического специалиста (меню Сервис и настройки``‑ Функции для технического специалиста), если эта возможность включена в настройках клиентского приложения.

При выборе результат поиска обработчик ПриВыбореРезультатаГлобальногоПоиска не вызывается, а выполняется соответствующая команда.

● Данные. Первым шагом выполняется полнотекстовый поиск введенной строки. Поиск выполняется в фоновом задании (на сервере). Не более 30 элементов из результатов поиска отображаются в выпадающем списке результатов.

Затем, если в результате предыдущего шага (полнотестовый поиск исходной строки) получено менее 30 элементов, то в этом же фоновом задании выполняется полнотекстовый поиск в данных строки, в которой к каждому слову из исходной строки добавлен символ «*» (если слово заканчивается на этот символ, то второй символ «*«не добавляется). Если все слова заканчиваются на звездочку, то второй поиск не выполняется.

Из полученных результатов исключаются те, что были получены при первом поиске. Результаты второго поиска добавляются в выпадающий список с результатами поиска.

Общее количество результатов поиска в данных не превышает 30 элементов.

● ИзбранноеРаботыПользователя. Обычные условия поиска. Поиск выполняется на клиенте.

● ИсторияРаботыПользователя. Обычные условия поиска. Поиск выполняется на клиенте.

● МенюФункций. Обычные условия поиска. Возвращаются все команды, содержащие в своем представлении каждую подстроку в любой позиции. Поиск происходит не только по представлениям команд, но и по представлениям групп команд и подсистем (кроме группы См. также). Если одна (или несколько) из искомых подстрок содержится в названии группы команд (кроме группы См. также) или подсистемы, то поиск в командах этой группы (подсистемы) происходит без учета этой подстроки (подстрок). Поиск выполняется, в том числе, и по тем функциям, видимость которых в данный момент отключена пользователем (или разработчиком), но пользователь может включить видимость этих функций. Поиск выполняется на сервере в фоновом задании.

● НавигационнаяСсылка. Если строка поиска начинается с одной из подстрок: http://, https://, e1``c://, e1``cib/, e1``ccs/, то результатом поиска будет представление ссылки. Выполняется на клиенте.

● ОбсужденияСистемыВзаимодействия. Строка поиска разбивается на подстроки. Разделителем выступает символ пробела. Возвращаются обсуждения и пользователи, содержащие в своем представлении (заголовок обсуждения, имя пользователя) каждую подстроку в любой позиции. Возвращается не больше 15 значений. Поиск выполняется на сервере системы взаимодействия.

● СообщенияСистемыВзаимодействия. Строка поиска разбивается на подстроки. Разделителем выступает символ пробела. Возвращаются все сообщения, содержащие в своем тексте каждую подстроку в любой позиции. Поиск осуществляется только по сообщениям любых обсуждений (контекстных и неконтекстных). Возвращается не больше 20 значений. Поиск выполняется на сервере системы взаимодействия.

● Справка. Поиск в справке выполняется аналогично строке поиска в окне справки. Возвращается не больше 10 значений. Поиск выполняется на сервере в фоновом задании

В списке стандартных видов поиска, под фразой «стандартные условия поиска» понимается следующее:

● Строка поиска разделяется на подстроки. Разделителем для такого разбиения служит пробел. При этом строка поиска должна удовлетворять следующим ограничениям:

● Общая длина строки поиска не должна превышать 1 000 символов.

● В строке поиска не должно быть более 32 подстрок.

● Поиск подстроки происходит по началу слова.

● Если в подстроке есть буквы и цифры, то:

● последовательность, состоящая только из букв, считается отдельной подстрокой;

● последовательность, состоящая только из цифр, считается отдельной подстрокой.

● В подстроке, состоящей из цифр, лидирующие нули считаются и значащими и незначащими.

● Если есть иерархия, то элемент считается найденным, если выполняется одно из следующих условий:

● в нем есть все искомые подстроки;

● в нем есть хотя бы одна искомая подстрока, а остальные подстроки содержатся в его родителях.

По умолчанию план глобального поиска состоит из следующих видов поиска и порядка выдачи результатов каждого вида поиска:

● Выражение. Порядок: 10.

● НавигационнаяСсылка. Порядок: 10.

● ИзбранноеРаботыПользователя. Порядок: 20.

● ИсторияРаботыПользователя. Порядок: 30.

● ГлобальныеСтандартныеКоманды. Порядок: 40.

● ФункцииДляТехническогоСпециалиста. Порядок: 50.

● МенюФункций. Порядок: 60.

● ОбсужденияСистемыВзаимодействия. Порядок: 70.

● СообщенияСистемыВзаимодействия. Порядок: 80.

● Данные. Порядок: 90.

● Справка. Порядок: 100.

Для создания собственного вида поиска необходимо добавить в план глобального поиска описание метода встроенного языка, который будет «отвечать» за новый вид поиска. Допустим, что в модуле приложения (в обработчике события ПриНачалеРаботыСистемы) присутствует следующий код на встроенном языке:

Копировать в буфер обмена

Процедура ПриНачалеРаботыСистемы() ПланГлобальногоПоиска = ГлобальныйПоиск.ПолучитьПлан(); ПланГлобальногоПоиска.Добавить("МетодВыполненияПоиска", "МодульГлобальногоПоискаСервер", Истина, Истина, 5); ГлобальныйПоиск.УстановитьПлан(ПланГлобальногоПоиска); КонецПроцедуры

Этот код означает следующее:

● Вначале выполняется получение текущего плана глобального поиска (будет получен план глобального поиска по умолчанию, который включает в себя все стандартные виды поиска).

● Затем к этому плану поиска добавляется новый вид поиска (строка ПланГлобальногоПоиска.Добавить(…)).

● Измененный план глобального поиска становится планом глобального поиска по умолчанию.

Метод, выполняющий операцию поиска, имеет следующие характеристики:

● Этот метод может выполняться на клиенте или на сервере.

● Метод, выполняемый на сервере, может выполняться синхронно или асинхронно (фоновым заданием).

● В метод можно передать некоторые дополнительные параметры.

● Результат работы метода имеет определенное (задаваемое) положение среди всех результатов работы глобального поиска. Фактически ‑ значение сортировки.

Таким образом:

● «Как» ищем ‑ это то, каким образом поисковая строка будет интерпретироваться каждым способом поиска и какие платформенные механизмы будут использованы для собственно поиска.

● «Где» ищем ‑ это то, где выполняется поиск: на клиенте или сервере.

Смотри также:

● Системные фоновые задания (см. здесь).

27.3. Выполнение поиска и формирование результат поиска

После того, как пользователь запустил поиск, например, нажав клавишу ENTER в поле глобального поиска (в основном окне приложения), система выполняет следующие действия:

1. Выполняется анализ плана глобального поиска.

2. Из этого плана выделяются клиентские виды поиска и серверные виды поиска.

3. Первыми выполняются серверные виды поиска. При этом в один асинхронный вызов собираются все серверные виды поиска, которые присутствуют в используемом плане глобального поиска. На стороне сервера:

● Последовательно исполняются синхронные виды поиска.

● Запускаются фоновые задания для исполнения фоновых видов поиска.

● Выполняется возврат управления на сторону клиента с возвратом результатов синхронных видов поиска.

Можно сказать, что все серверные виды поиска являются асинхронными с точки зрения клиентского приложения. Другими словами, клиентское приложение не ждет окончания работы сервера для того, чтобы начать выполнения клиентских видов поиска.

4. Выполняются все клиентские виды поиска (эти виды поиска все синхронные).

5. Формируется результат поиска для отображения пользователю. Одновременно происходит ожидание завершения серверных видов поиска. При построении списка результатов поиска используется значение порядка для каждого вида поиска.

Также стоит отметить, что поиск запускается не только по нажатию клавиши ENTER, но еще и по мере набора, если пользователь некоторое время не набирает текст. При изменении строки поиска начинается новый поиск, все фоновые задания, выполняющие предыдущий поиск, отменяются и запускаются с новой поисковой строкой.

Результат поиска, который отображается пользователю, формируется на основании значения свойства Порядок каждого элемента плана глобального поиска. Чем меньше значение этого свойства, тем выше будет результат этого вида поиска в списке результатов.

Результат поиска формируется динамически, по мере получения результатов поиска, при этом действуют следующие правила:

● Построение результатов поиска начинается после того, как завершен любой вид поиска с минимальным порядком (для используемого глобального плана поиска). До тех пор, пока не завершены все виды поиска с меньшим порядком, результаты поиска с большим порядком не выводятся. Каждый новый результат поиска добавляется к предыдущему результату.

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

● Результат поиска выводится без какого-либо переупорядочивания (в том числе и после завершения всех видов поиска). В рамках одного вида поиска упорядочивание определяется самим видом поиска.

Следует помнить, что во время выполнения синхронных видов поиска, интерфейс клиентского приложения не реагирует на действия пользователя.

Таким образом, можно сформулировать следующие рекомендации по формированию видов поиска (и их порядку в плане глобального поиска):

● Все синхронные виды поиска должны возвращать результат за минимальное время.

● Все синхронные результаты поиска желательно задавать с меньшими значениями порядка, чем асинхронные.

● Асинхронные виды поиска лучше задавать с самыми большими значениями порядка.

● В рамках одного значения порядка, последовательность выполнения видов поиска не определена.

● Если есть несколько видов синхронного поиска с одинаковыми значениями порядка, но возможна ситуация, когда способ поиска может работать долго, то лучше повысить значение порядка для такого вида поиска.

27.4. Обработка поисковой строки и новый вид поиска

Схема работы, которая описана до настоящего момента, дает представление о том, как работает механизм глобального поиска по умолчанию. Однако, остается вопрос: каким образом реализовать собственный вид поиска и как интегрировать его в механизм глобального поиска? Данный раздел призван ответить на этот вопрос.

Во время ввода поисковой строки система вызывает обработчик события ПриГлобальномПоиске. Это событие аналогично событию поля вывода формы АвтоПодбор. В обработчик передается строка, которую ввел пользователь (параметр обработчика СтрокаПоиска) и план глобального поиска, который будет использовать в данном поиске (параметр обработчика ПланГлобальногоПоиска).

Этот обработчик предназначен для того, чтобы модифицировать используемый план глобального поиска так, чтобы в нем находились виды поиска, которые зависят от данных, введенных пользователем. При этом уже существующие в переданном плане глобального поиска виды поиска можно как оставить, так и удалить из этого плана. Если существуют какие-либо виды поиска, которые должны присутствовать всегда ‑ такие виды поиска следует задавать при помощи метода УстановитьПлан(). И делать это лучше при начале работы системы. Также стоит помнить, сам поиск в данном обработчике выполнять не надо, т. к. результаты поиска некуда поместить! В обработчике формируется только план глобального поиска, который будет использован один раз для конкретной строки поиска.

Так, если мы хотим позволять создание каких-либо объектов при нажатии пользователем символа +, то это можно сделать следующим образом:

Копировать в буфер обмена

Процедура ПриГлобальномПоиске(СтрокаПоиска, ПланГлобальногоПоиска) Если СтрНачинаетсяС(СтрокаПоиска, "+") Тогда ПланГлобальногоПоиска.Очистить(); ПланГлобальногоПоиска.Добавить("КомандаГПСоздать", "ОбщийМодульКлиент", Ложь); КонецЕсли; КонецПроцедуры

Также в конфигурации должен быть клиентский неглобальный общий модуль ОбщийМодульКлиент, где будет следующий код на встроенном языке:

Копировать в буфер обмена

Процедура КомандаГПСоздать(СтрокаПоиска, РезультатыПоиска, ДополнительныеПараметры) Экспорт РезультатыПоиска.Добавить("+Картина", "Картину", БиблиотекаКартинок.СоздатьЭлементСписка); РезультатыПоиска.Добавить("+Корзина", "Корзину", БиблиотекаКартинок.СоздатьЭлементСписка); РезультатыПоиска.Добавить("+Картонка", "Картонку", БиблиотекаКартинок.СоздатьЭлементСписка); РезультатыПоиска.Добавить("+Собачонка", "Собачонку", БиблиотекаКартинок.СоздатьЭлементСписка); КонецПроцедуры

Если запустит данную конфигурацию, и ввести в поле глобального поиска символ +, то получим следующую ситуацию:

Рис. 531. Добавлен собственный вид поиска

Попытка выбрать любую из представленных строк приведет к сообщению о том, что навигационная ссылка имеет неверный тип. Данная ошибка произошла потому, что система не знает о том, как реагировать на наш собственный вид поиска. Для реализации собственной реакции необходимо создать в модуле приложения обработчик ПриВыбореРезультатаГлобальногоПоиска, описание работы с которым см. здесь.

В реализованном примере есть одна проблема: если в строку поиска ввести текст +2+2, вычисления выражения не произойдет. Причина этого очевидна: мы удалили все виды поиска по умолчанию, которые были в плане глобального поиска. Теперь есть два способа решить проблему:

1. Сравнивать строку поиска на строгое равенство: СтрокаПоиска = "+".

2. Добавить в план глобального поиска вычисление выражения.

Воспользуемся вторым способом. Для этого допишем обработчик ПриГлобальномПоиске так, чтобы он выглядел следующим образом:

Копировать в буфер обмена

Процедура ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска) Если СтрНачинаетсяС(СтрокаПоиска, "+") Тогда ПланПоиска.Очистить(); ПланПоиска.Добавить(СтандартныйВидГлобальногоПоиска.Выражение); ПланПоиска.Добавить("КомандаГПСоздать", "ОбщийМодульКлиент", Ложь); КонецЕсли; КонецПроцедуры

Теперь ввод выражения +2+2 приводит к нужному результату: вычислению выражения и возможности создать картину, корзину, картонку и собачонку.

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

Расширим наш пример так, чтобы в багаж можно было сдать не просто картину, а сразу указать, что мы сдаем: портрет, пейзаж или натюрморт.

Для этого воспользуемся тем, что объект типа ЭлементРезультатГлобальногоПоиска содержит свойство Действия. Заполним это свойство командами:

Копировать в буфер обмена

Процедура КомандаГПСоздать(СтрокаПоиска, РезультатыПоиска, ДополнительныеПараметры) Экспорт Результат = Новый ЭлементРезультатаГлобальногоПоиска("+Картина", "Картину", БиблиотекаКартинок.СоздатьЭлементСписка, , "Добавим картину!"); Результат.Действия.Добавить("Портрет", "Портрет"); Результат.Действия.Добавить("Пейзаж", "Пейзаж"); Результат.Действия.Добавить("Натюрморт", "Натюрморт"); РезультатыПоиска.Добавить(Результат); РезультатыПоиска.Добавить("+Корзина", "Корзину", БиблиотекаКартинок.СоздатьЭлементСписка); РезультатыПоиска.Добавить("+Картонка", "Картонку", БиблиотекаКартинок.СоздатьЭлементСписка); РезультатыПоиска.Добавить("+Собачонка", "Собачонку", БиблиотекаКартинок.СоздатьЭлементСписка); КонецПроцедуры

В результате, после ввода в строку поиска символа «+» результат поиска будет выглядеть следующим образом:

Рис. 532. Действия у собственного вида поиска

Мы можем нажать на гиперссылки Портрет, Пейзаж и Натюрморт, но нажатие не вызывает никаких действий. Это происходит потому, что у нас не определен обработчик действия результатов глобального поиска. Для этого следует определить обработчик события ПриВыбореДействияРезультатаГлобальногоПоиска в модуле приложения. Описание работы с этим обработчиком см. здесь.

27.5. Обработка результатов поиска

27.5.1. Выбор результата поиска

Каждый вид поиска возвращает на клиента набор результатов поиска (объект типа РезультатГлобальногоПоиска), который состоит из объектов вида ЭлементРезультатаГлобальногоПоиска. Каждый элемент описывает результат поиска (и представление). С помощью свойства ВидПоиска можно указать, какой вид поиска предоставил данный результат. Платформа заполняет данное свойство, но не использует его. Разработчик может поступать «по обстоятельствам».

Если результат поиска возвращает значение, которое «известно» системе, то ничего дополнительно делать не надо. Например, вернув ссылку на объекты информационной базы, система автоматически откроет форму для просмотра данных по этой ссылке.

Но если значение, которое вернул пользовательский вид поиска, требует дополнительной обработки, необходимо использовать обработчик события ПриВыбореРезультатаГлобальногоПоиска модуля приложения.

В этот обработчик события передается выбранный элемент результата поиска (параметр обработчика ЭлементРезультата) и признак необходимости стандартной обработки.

Теперь необходимо проанализировать выбранный результат и реализовать необходимое действие:

Копировать в буфер обмена

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

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

Если при выполнении вида поиска на сервере произошла ошибка, в качестве значения элемента результата (свойство ЭлементРезультатаГлобальногоПоиска.Значение) будет передан объект типа ИнформацияОбОшибке.

При отображении результатов, у которых значением является объект типа ИнформацияОбОшибке, в списке результатов в качестве цвета текста и цвета картинки (для шаблонных картинок) используется стилевой цвет ЦветОсобогоТекста. Если у такого результата не задано представление, то выводится текст Ошибка поиска. Если у такого результата не задана картинка, то выводится картинка ДиалогСтоп.

При выборе результата с ошибкой поиска, обработчик ПриВыбореРезультатаГлобальногоПоиска не вызывается, а отображается стандартный диалог сообщения об ошибке.

27.5.2. Выбор действия в результате поиска

Если в результатах поиска указаны какие-либо действия, то обработка таких действий реализуется с помощью обработчика событияПриВыбореДействияРезультатаГлобальногоПоиска модуля клиентского приложения. Если обработчик этого события не определен, то выбор действия в результате глобального поиска, не приведет к какому-то результату. Исключение составляю действия, которая добавляются к некоторым результатам поиска самой платформой.

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

Таким образом, если нам необходимо определить, какую картину добавлять (описание примера см. здесь), нам необходимо реализовать следующий обработчик в модуле клиентского приложения:

Копировать в буфер обмена

Процедура ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие) Если ЭлементРезультата.Значение = "+Картина" Тогда Если Действие = "Портрет" Тогда // добавление портрета ИначеЕсли Действие = "Пейзаж" Тогда // добавление пейзажа ИначеЕсли Действие = "Натюрморт" Тогда // добавление натюрморта КонецЕсли; КонецЕсли; КонецПроцедуры

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

27.6. Другие особенности

Во время настройки глобального поиска может возникнуть необходимость переопределить подсказку, которая отображается в поле глобального поиска. По умолчанию там отображается надпись Поиск и указывается сочетание клавиш для активизации этого поля. Тем не менее, разработчик может установить туда другой текст, который будет более информативен для пользователей. Для этого существует пара функций ПолучитьПодсказкуВвода()/УстановитьПодсказкуВвода().

Так, если в обработчике события ПриНачалеРаботыСистемы написать такой пример:

Копировать в буфер обмена

Процедура ПриНачалеРаботыСистемы() ГлобальныйПоиск.УстановитьПодсказкуВвода("Кого сдаем в багаж?"); КонецПроцедуры

То поле глобального поиска будет выглядеть следующим образом:

Рис. 533. Установка подсказки ввода

Еще одной полезной особенностью программного интерфейса глобального поиска является возможность задания справки по поиску.

Справка по поиску выводится либо вместо истории поиска (если поиск еще ни разу не выполнялся), либо после нажатия на гиперссылку Что искать в истории поиска, если поиск выполнялся.

Рис. 534. Что искать

Для того чтобы переопределить текст, который отображается при нажатии на эту гиперссылку, предназначены методы ПолучитьОписание()/УстановитьОписание().

Можно дополнить обработчик ПриНачалеРаботыСистемы (пример выше) так, чтобы получился следующий текст:

Копировать в буфер обмена

Процедура ПриНачалеРаботыСистемы() ГлобальныйПоиск.УстановитьПодсказкуВвода("Кого сдаем в багаж?"); ОписаниеГлобальногоПоискаМассив = Новый Массив; ОписаниеГлобальногоПоискаМассив.Добавить("Введите"); ОписаниеГлобальногоПоискаМассив.Добавить(Новый ФорматированнаяСтрока("+", Новый Шрифт(,,24, Истина))); ОписаниеГлобальногоПоискаМассив.Добавить(" для быстрого создания объектов"); ОписаниеГлобальногоПоискаМассив.Добавить(Символы.ПС); ОписаниеГлобальногоПоискаМассив.Добавить(" или арифметическое выражение для получения результата"); ГлобальныйПоиск.УстановитьОписание(Новый ФорматированнаяСтрока(ОписаниеГлобальногоПоискаМассив)); КонецПроцедуры

В результате подсказка поиска будет выглядеть следующим образом:

Рис. 535. Новое описание поиска

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

В этом случае можно использовать метод НачатьПоиск(). Метод получает на вход строку поиска, помещает эту строку в поле глобального поиска и запускает поиск. Результат отображается на экране так же, как это будет при интерактивном вводе. Нужно помнить, что если, при работе в веб-клиенте, поле ввода глобального поиска недоступно для ввода (по любой причине), то вызов в этот момент метода НачатьПоиск() не приведет к началу поиска.

В качестве одного из примеров использования метода НачатьПоиск() можно привести команду Искать везде, которая доступна в контекстном меню некоторых элементов формы. Эта команда доступна для таблицы формы, расширения поля формы для табличного документа и расширения поля формы для форматированного документа. Эта команда помещает выделенный (в элементе управления) текст в поле глобального поиска и запускает поиск.