В режиме "Конфигуратор"
страницаВ режиме «Конфигуратор»
Для этого мы можем воспользоваться событием ПриГлобальномПоиске. Это событие возникает тогда, когда в процессе набора текста в поле поиска сделана пауза. Это событие мы обработаем в модуле приложения.
Если в строке поиска первый символ «№», мы удалим все элементы из плана поиска и добавим туда свой собственный элемент. Алгоритм его работы мы напишем в процедуре ПоискДокументовПоНомеру(), которую поместим в общем модуле ГлобальныйПоискВДанных (см. листинг 19.3).
Создадим в модуле приложения обработчик события ПриГлобальномПоиске() и заполним его следующим образом (листинг 19.2).
Листинг 19.2. Обработчик события «ПриГлобальномПоиске()»
Процедура ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска)
Если СтрНайти(СтрокаПоиска, "№") = 1 Тогда
//Установить собственный вид поиска, в котором есть только поиск по номеру документа.
ПланПоиска.Очистить();
ПланПоиска.Вставить(0, "ПоискДокументовПоНомеру", "ГлобальныйПоискВДанных", Истина, Ложь);
КонецЕсли;
КонецПроцедуры
Затем создадим в нашей конфигурации общий неглобальный серверный модуль ГлобальныйПоискВДанных (флажок Глобальный снят, а флажок Сервер установлен по умолчанию). Поместим в нем процедуру ПоискДокументовПоНомеру() и заполним ее следующим образом (листинг 19.3).
Листинг 19.3. Процедура «ПоискДокументовПоНомеру()»
Процедура ПоискДокументовПоНомеру(СтрокаПоиска, РезультатПоиска, ДопПараметры) Экспорт
ФрагментНомера = Прав(СтрокаПоиска, СтрДлина(СтрокаПоиска) - 1);
//Если в строке поиска только "№", то ничего не делать;
Если ФрагментНомера = "" Тогда
Возврат;
КонецЕсли;
// Выбрать документы об оказании услуг с номером, содержащим введенную строку.
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Номер, Представление
|ИЗ Документ.ОказаниеУслуги
|ГДЕ Номер ПОДОБНО &ФрагментНомера");
Запрос.УстановитьПараметр("ФрагментНомера", "%" + ФрагментНомера + "%");
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Создать элемент результата поиска и добавить его в коллекцию.
ЭлементРезультата = Новый ЭлементРезультатаГлобальногоПоиска(Выборка.Ссылка,СтрНайтиИВыделитьОформлением(Выборка.Представление, ФрагментНомера));
РезультатПоиска.Добавить(ЭлементРезультата);
КонецЦикла;
КонецПроцедуры
В этой процедуре запросом мы получаем только те документы об оказании услуг, в номере которых содержится искомый фрагмент строки. Затем в результат глобального поиска мы добавляем собственные элементы. Каждый из них содержит ссылку на найденный документ и представление, в котором выделен найденный фрагмент.
Для выделения элементов используется функция СтрНайтиИВыделитьОформлением(), в которую мы первым параметром передаем строку, которая будет отображаться в результате поиска, а вторым параметром — тот фрагмент, который надо выделить в этой строке.
Теперь в качестве заключительного штриха осталось только дополнить описание поиска новыми возможностями, которые мы только что реализовали.
Глобальный поиск имеет описание, которое открывается по ссылке Что искать. Мы можем изменить это описание.
Для этого добавим в обработчик события ПриНачалеРаботыСистемы() в модуле приложения выделенный ниже фрагмент кода (листинг 19.4).
Листинг 19.4. Обработчик события «ПриНачалеРаботыСистемы()»
Процедура ПриНачалеРаботыСистемы()
// Получить существующий вид поиска.
ПланПоиска = ГлобальныйПоиск.ПолучитьПлан();
// Удалить из плана поиска поиск в меню "Функции для технического специалиста" и поиск по справке.
ПланПоиска.Удалить(СтандартныйВидГлобальногоПоиска.ФункцииДляТехническогоСпециалиста);
ПланПоиска.Удалить(СтандартныйВидГлобальногоПоиска.Справка);
// Вернуть план поиска "на место".
ГлобальныйПоиск.УстановитьПлан(ПланПоиска);
// Установить собственное описание поисковой строки.
ГлобальныйПоиск.УстановитьОписание("Введите строку поиска, ссылку или арифметическое выражение." +
Символы.ПС +
"Для поиска документов об оказании услуг по номеру введите ""№"" и сразу за ним без пробела часть номера.");
КонецПроцедуры