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