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

Программист IT и автоматизация бизнеса
← На главную

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

Причины появления системных всплывающих подсказок

Разберем ситуацию, с которой сталкиваются разработчики при попытке отключить автоподбор. Если в обработчике события АвтоПодбор просто установить параметр СтандартнаяОбработка = Ложь;, платформа не прекращает отображение выпадающего окна. Вместо списка элементов пользователь видит сервисные надписи, такие как «Нет в списке» или «Введите строку для поиска».

Проанализируем основные причины такого поведения платформы:

  1. Работа истории выбора: По умолчанию платформа сохраняет историю ранее введенных пользователем значений и выводит её в виде подсказки при фокусе на поле ввода.
  2. Механизм сопоставления ссылочных данных: Для элементов формы, связанных со ссылочными типами данных (справочники, документы), платформа постоянно ожидает коллекцию ДанныеВыбора. Если отменить стандартную обработку, но не передать пустой список, платформа выводит системные уведомления.
  3. Включенные свойства быстрого выбора: Свойства БыстрыйВыбор у объекта метаданных или РежимВыбораИзСписка у элемента формы заставляют форму принудительно отображать варианты.

Способ 1. Очистка данных выбора и отключение истории в событии формы

Рассмотрим первый подход, который реализуется непосредственно в модуле управляемой формы. Чтобы полностью подавить всплывающее окно подбора, необходимо не только отменить стандартную обработку, но и явно инициализировать пустой список значений в параметре ДанныеВыбора.

Выполним следующие шаги:

  1. В палитре свойств элемента формы установим свойство ИсторияВыбораПриВводе в значение Не использовать (или пропишем это программно при открытии формы).
  2. Убедимся, что свойства БыстрыйВыбор и РежимВыбораИзСписка отключены.
  3. В обработчике события АвтоПодбор переопределим стандартное поведение:

&НаКлиенте
Процедура УслугиУслугаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = Новый СписокЗначений;
КонецПроцедуры

Передача пустого объекта СписокЗначений сообщает платформе, что варианты выбора отсутствуют, благодаря чему всплывающее окно не отображается вовсе.

Способ 2. Переопределение получения данных выбора в модуле менеджера

Выясним, как переопределить формирование списка на уровне объекта метаданных. Этот вариант подходит, если требуется гибко управлять данными подбора с помощью метода ОбработкаПолученияДанныхВыбора в модуле менеджера справочника или документа.

Рассмотрим алгоритм действий:

  1. В событии АвтоПодбор или через параметр элемента формы ПараметрыВыбора передаем специальный признак отбора в модуль менеджера.
  2. В модуле менеджера объекта (например, справочника Номенклатура) перехватываем процедуру ОбработкаПолученияДанныхВыбора:

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    Если Параметры.Свойство("ОтключитьАвтоподбор") И Параметры.ОтключитьАвтоподбор Тогда
        СтандартнаяОбработка = Ложь;
        ДанныеВыбора = Новый СписокЗначений;
    КонецЕсли;
КонецПроцедуры

Такой подход позволяет централизованно управлять логикой подбора и полностью контролировать, когда и какие данные должны возвращаться пользователю.

Способ 3. Использование реквизита формы с типом «Строка»

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

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

  1. Создаем на форме строковый реквизит (например, ТекстПоискаУслуги) и связываем с ним поле ввода. Для строковых полей подбор по строке и выпадающие подсказки справочников отсутствуют на уровне ядра платформы.
  2. В событии элемента формы ПриИзменении или ОкончаниеВводаТекста выполняем программный поиск объекта в базе данных по введенной строке.
  3. Записываем найденную ссылку в основной скрытый ссылочный реквизит формы.
← На главную