Как отключить автоподбор и всплывающий список при вводе в поле 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с управляемыми формами в платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией, когда в числовом или текстовом поле при вводе символов автоматически всплывает подсказка. Попытка отключить это через обработчик события Автоподбор и команду СтандартнаяОбработка = Ложь обычно не дает никакого результата, либо данное событие вообще не вызывается.

Проанализируем причинно-следственные связи такого поведения платформы и разберем практические способы решения этой проблемы.

Почему событие Автоподбор не отключает всплывающий список

Выясним причину, по которой стандартный механизм перехвата автоподбора не срабатывает. В управляемых формах 1С логика работы элемента существенно меняется в зависимости от заполнения его свойства СписокВыбора:

  1. Если коллекция СписокВыбора заполнена в свойствах элемента или программно при открытии формы, платформа 1С включает внутренний клиентский механизм быстрой фильтрации по этому списку.
  2. Поскольку фильтрация происходит локально на стороне клиента прямо по готовому списку, событие Автоподбор (предназначенное для динамического формирования списка с сервера) либо вовсе не выравнивается, либо отмена стандартной обработки СтандартнаяОбработка = Ложь лишь блокирует перезаполнение свойства ДанныеВыбора, но не отменяет сам показ локального всплывающего окна.
  3. Событие НачалоВыбораИзСписка в управляемых формах является устаревшим и не перехватывает процесс набора текста пользователем.

Таким образом, штатного свойства вроде «ОтключитьАвтоподборПриЗаполненномСписке» в платформе нет. Если в элементе заполнен СписокВыбора, платформа будет автоматически показывать выпадающее окно при вводе текста. Рассмотрим, как обойти это ограничение.

Способ 1. Вызов списка по требованию через ПоказатьВыборИзСписка

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

Разберем пример реализации через асинхронный метод ПоказатьВыборИзСписка:


&НаКлиенте
Процедура ИмяПоляНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	// Отключаем стандартный выбор
	СтандартнаяОбработка = Ложь;
	
	// Формируем список значений для выбора
	Список = Новый СписокЗначений;
	Список.Добавить(10, "Вариант 1");
	Список.Добавить(20, "Вариант 2");
	Список.Добавить(30, "Вариант 3");
	
	// Описываем обработчик оповещения о выборе
	Оповещение = Новый ОписаниеОповещения("ПослеВыбораИзСписка", ЭтотОбъект);
	
	// Показываем список пользователю
	ПоказатьВыборИзСписка(Оповещение, Список, Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораИзСписка(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
	
	Если ВыбранныйЭлемент <> Неопределено Тогда
		Объект.ЧисловоеПоле = ВыбранныйЭлемент.Значение;
	КонецЕсли;
	
КонецПроцедуры

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

Способ 2. Корректировка свойств элемента формы

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

  1. РежимВыбораИзСписка: Установите значение Не использовать. Это позволит отключить жесткую привязку ввода к значениям из списка.
  2. ИсторияВыбораПриВводе: Переведите в значение Не использовать, если всплывающее окно отображает ранее введенные пользователем данные.
  3. БыстрыйВыбор: Установите в значение Не использовать (актуально для полей ссылочного типа данных).
  4. КнопкаВыпадающегоСписка: Отключите данный флаг (поставьте Нет). Если требуется кнопка для открытия списка, используйте свойство КнопкаВыбора = Да и обрабатывайте событие НачалоВыбора.

Способ 3. Очистка СписокВыбора при редактировании текста

Если по логике работы формы коллекция СписокВыбора всё же должна быть привязана к элементу, можно очищать её при получении фокуса или начале ввода текста, а заполнять повторно только в момент клика по кнопке выпадающего списка.

Проанализируем порядок действий:

  1. В обработчике события НачалоВыбора заполняем Элементы.ИмяПоля.СписокВыбора нужными значениями.
  2. В обработчике события ОкончаниеВводаТекста или при потере фокуса вызываем Элементы.ИмяПоля.СписокВыбора.Очистить().

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

← На главную