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