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