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