Почему элемент выбирается из выпадающего списка, а не из формы выбора?

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

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

Анализируем свойство «Быстрый выбор» в метаданных

Первым делом нам необходимо заглянуть в корень проблемы, который чаще всего скрывается не в самой форме документа или обработки, а в свойствах объекта конфигурации. Разберем механизм работы свойства Быстрый выбор. В дереве метаданных выберем нужный нам объект (например, справочник Организации или Контрагенты) и откроем его окно редактирования.

На вкладке Поле ввода (в некоторых версиях платформы она может называться «Редактирование») мы увидим флажок Быстрый выбор. Рассмотрим, на что он влияет:

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

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

Взаимосвязь свойств метаданных и свойств элемента формы

Теперь выясним, почему проверка в отладчике может не давать результатов. Проанализируем ситуацию: в свойствах элемента управления на форме (поле ввода) есть параметр РежимВыбораИзСписка. Если вы смотрите его в момент события ПриИзменении, вы видите состояние «Ложь», но список все равно выпадает. Почему?

Дело в том, что в свойствах поля ввода на форме для параметров выбора часто установлено значение Авто. Разберем по шагам, как платформа интерпретирует это значение:

  1. Программа проверяет настройки конкретного элемента на конкретной форме.
  2. Если там стоит Авто, она «спускается» на уровень ниже — в описание типа данных в метаданных.
  3. В метаданных она находит свойство Быстрый выбор. Если там стоит «Да», то поле ввода на форме наследует это поведение.

Важный момент: если вы программно проверяете РежимВыбораИзСписка, вы проверяете именно состояние режима подмены выбора списком значений, который формируется вручную. Механизм Быстрого выбора — это системная функция платформы, которая работает на более низком уровне интерфейса.

Влияние истории выбора (Choice History)

Рассмотрим еще одну причину, которую часто путают с выбором из списка. В управляемом приложении реализован механизм Истории выбора. Платформа запоминает последние 5–10 элементов, которые пользователь выбирал в данном поле. При активации поля или нажатии на кнопку выбора система сначала показывает этот список «недавних» элементов.

Чтобы убедиться, что проблема именно в этом, попробуйте изменить свойства поля на форме:

Если после этого «выпадашка» исчезла и сразу стала открываться форма — значит, дело было в интеллектуальном механизме запоминания действий пользователя.

Особенности типов данных «Перечисление» и «Булево»

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

Механизм автоподбора и поиска при вводе

Выясним, не путаем ли мы открытие списка выбора с работой Автоподбора. Когда пользователь начинает вводить текст в поле, платформа инициирует поиск и выводит результаты в выпадающем списке. За это отвечают свойства:

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

Как гарантированно заставить систему открывать форму выбора?

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

  1. Откройте форму в конфигураторе.
  2. Выберите нужное поле ввода.
  3. В палитре свойств найдите категорию Использование.
  4. Установите свойство СпособВыбора в значение Из формы (вместо Авто).
  5. Убедитесь, что свойство РежимВыбораИзСписка установлено в Ложь.

Также полезно проверить программный код в событии НачалоВыбора. Посмотрим на пример кода, который может принудительно открывать форму:


&НаКлиенте
Процедура ИмяПоляНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    // Если мы хотим подавить стандартный выпадающий список
    // и принудительно вызвать форму выбора:
    СтандартнаяОбработка = Истина; 
    // Платформа сама откроет форму, если СпособВыбора не стоит в "Быстрый выбор"
КонецПроцедуры

Если же вы хотите полностью контролировать процесс, можно установить СтандартнаяОбработка = Ложь и вызвать форму программно через ОткрытьФорму(), передав туда необходимые параметры и владельца.

Подведем итоги

Мы выяснили, что поведение поля ввода в 1С зависит от каскада настроек. Если вы столкнулись с неожиданным выпадающим списком:

  1. Проверьте свойство Быстрый выбор в метаданных самого объекта (Справочника).
  2. Проверьте свойство Способ выбора в свойствах элемента формы.
  3. Проверьте, не является ли этот список просто Историей выбора.
  4. Убедитесь, что тип данных реквизита предполагает наличие формы выбора.

Чаще всего изменение Быстрого выбора с «Авто» или «Да» на Нет в метаданных решает проблему глобально для всей системы.

← На главную