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