При работе с управляемыми формами в платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией, когда в числовом или текстовом поле при вводе символов автоматически всплывает подсказка. Попытка отключить это через обработчик события Автоподбор и команду СтандартнаяОбработка = Ложь обычно не дает никакого результата, либо данное событие вообще не вызывается.
Проанализируем причинно-следственные связи такого поведения платформы и разберем практические способы решения этой проблемы.
Выясним причину, по которой стандартный механизм перехвата автоподбора не срабатывает. В управляемых формах 1С логика работы элемента существенно меняется в зависимости от заполнения его свойства СписокВыбора:
СписокВыбора заполнена в свойствах элемента или программно при открытии формы, платформа 1С включает внутренний клиентский механизм быстрой фильтрации по этому списку.Автоподбор (предназначенное для динамического формирования списка с сервера) либо вовсе не выравнивается, либо отмена стандартной обработки СтандартнаяОбработка = Ложь лишь блокирует перезаполнение свойства ДанныеВыбора, но не отменяет сам показ локального всплывающего окна.НачалоВыбораИзСписка в управляемых формах является устаревшим и не перехватывает процесс набора текста пользователем.Таким образом, штатного свойства вроде «ОтключитьАвтоподборПриЗаполненномСписке» в платформе нет. Если в элементе заполнен СписокВыбора, платформа будет автоматически показывать выпадающее окно при вводе текста. Рассмотрим, как обойти это ограничение.
Самый надежный и правильный способ с точки зрения архитектуры управляемых форм — держать коллекцию СписокВыбора у элемента формы абсолютно пустой. Если пользователю требуется выбрать значение из списка, вызов выпадающего окна выполняется программно в событии НачалоВыбора или по нажатию пользовательской кнопки.
Разберем пример реализации через асинхронный метод ПоказатьВыборИзСписка:
&НаКлиенте
Процедура ИмяПоляНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Отключаем стандартный выбор
СтандартнаяОбработка = Ложь;
// Формируем список значений для выбора
Список = Новый СписокЗначений;
Список.Добавить(10, "Вариант 1");
Список.Добавить(20, "Вариант 2");
Список.Добавить(30, "Вариант 3");
// Описываем обработчик оповещения о выборе
Оповещение = Новый ОписаниеОповещения("ПослеВыбораИзСписка", ЭтотОбъект);
// Показываем список пользователю
ПоказатьВыборИзСписка(Оповещение, Список, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораИзСписка(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
Объект.ЧисловоеПоле = ВыбранныйЭлемент.Значение;
КонецЕсли;
КонецПроцедуры
При таком подходе поле остается свободным для произвольного ввода текста или чисел пользователем, а при нажатии на кнопку выбора показывается необходимый список без срабатывания навязчивого автоподбора при наборе символов.
Посмотрим на настройки элемента формы в палитре свойств. Если выпадающий список формируется платформой автоматически из ранее введенных значений или ссылочных данных, отключить всплывающее окно можно переключением следующих параметров:
Не использовать. Это позволит отключить жесткую привязку ввода к значениям из списка.Не использовать, если всплывающее окно отображает ранее введенные пользователем данные.Не использовать (актуально для полей ссылочного типа данных).Нет). Если требуется кнопка для открытия списка, используйте свойство КнопкаВыбора = Да и обрабатывайте событие НачалоВыбора.Если по логике работы формы коллекция СписокВыбора всё же должна быть привязана к элементу, можно очищать её при получении фокуса или начале ввода текста, а заполнять повторно только в момент клика по кнопке выпадающего списка.
Проанализируем порядок действий:
НачалоВыбора заполняем Элементы.ИмяПоля.СписокВыбора нужными значениями.ОкончаниеВводаТекста или при потере фокуса вызываем Элементы.ИмяПоля.СписокВыбора.Очистить().Благодаря этому во время активного набора текста поле не содержит элементов в СписокВыбора, и платформа не отображает подсказки поверх вводимых чисел или текста.