Как правильно настроить выпадающий список выбора на управляемой форме в 1С?

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

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

Разберем, почему возникает такая ошибка, как устроена работа со списком выбора в платформе 1С:Предприятие и как правильно настроить элемент формы программно и интерактивно.

Принцип работы выпадающего списка на форме

Проанализируем архитектуру управляемой формы: реквизит формы предназначен для хранения выбранного значения, а не всей совокупности доступных вариантов. Поскольку пользователь выбирает только один элемент (например, определенную строку, число или ссылку), тип реквизита формы должен соответствовать типу этого итогового значения (например, Строка, Число, СправочникСсылка.Номенклатура и т. д.).

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

Пошаговая настройка выпадающего списка

Рассмотрим базовый алгоритм создания выпадающего списка:

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

Посмотрим на пример программной настройки элемента формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Добавляем варианты в список выбора элемента формы
    Элементы.ПоискПоСтолбцу.СписокВыбора.Добавить("Наименование");
    Элементы.ПоискПоСтолбцу.СписокВыбора.Добавить("Артикул");
    Элементы.ПоискПоСтолбцу.СписокВыбора.Добавить("Штрихкод");
    
    // Включаем режим выбора из фиксированного списка
    Элементы.ПоискПоСтолбцу.РежимВыбораИзСписка = Истина;
    
    // Запрещаем произвольный ввод с клавиатуры, оставляя только выбор
    Элементы.ПоискПоСтолбцу.РедактированиеТекста = Ложь;

КонецПроцедуры

Установка значения по умолчанию

Обратите внимание: при программном заполнении коллекции СписокВыбора сам реквизит формы автоматически не инициализируется первым элементом и остается пустым. Чтобы задать начальное значение при открытии формы, присвоим его напрямую реквизиту:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Элементы.ПоискПоСтолбцу.СписокВыбора.Добавить("Наименование");
    Элементы.ПоискПоСтолбцу.СписокВыбора.Добавить("Артикул");
    
    Элементы.ПоискПоСтолбцу.РежимВыбораИзСписка = Истина;
    Элементы.ПоискПоСтолбцу.РедактированиеТекста = Ложь;
    
    // Устанавливаем значение по умолчанию
    ПоискПоСтолбцу = "Наименование";

КонецПроцедуры

Разделение хранимого значения и пользовательского представления

Метод Добавить коллекции СписокВыбора позволяет передавать не только значение, но и понятное пользователю представление. Это дает возможность сохранять в реквизите технический идентификатор или код, отображая в интерфейсе читаемый текст.

Рассмотрим пример:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Параметры: Значение, Представление
    Элементы.ПоискПоСтолбцу.СписокВыбора.Добавить("Name", "Наименование товара");
    Элементы.ПоискПоСтолбцу.СписокВыбора.Добавить("SKU", "Артикул позиции");
    
    Элементы.ПоискПоСтолбцу.РежимВыбораИзСписка = Истина;
    Элементы.ПоискПоСтолбцу.РедактированиеТекста = Ложь;
    
    ПоискПоСтолбцу = "Name";

КонецПроцедуры

Массовая загрузка значений из массива

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    МассивВариантов = Новый Массив;
    МассивВариантов.Добавить("Склад 1");
    МассивВариантов.Добавить("Склад 2");
    МассивВариантов.Добавить("Основной склад");
    
    Элементы.СкладВыбора.СписокВыбора.ЗагрузитьЗначения(МассивВариантов);
    Элементы.СкладВыбора.РежимВыбораИзСписка = Истина;

КонецПроцедуры

Статическая настройка в палитре свойств без кода

Выпадающий список можно полностью настроить в конфигураторе без использования встроенного языка 1С:

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

Альтернативные элементы управления

Для выбора одного значения из небольшого набора вариантов (до 3–5 элементов) вместо выпадающего списка можно применить другие виды элементов управления, изменив свойство Вид у элемента формы:

  1. Поле переключателя (Вид = ПолеПереключателя) — отображает все доступные варианты в виде классических радиокнопок. Варианты заполняются через коллекцию СписокВыбора.
  2. Поле тумблера (Вид = ПолеТумблера) — компактный горизонтальный переключатель между фиксированными состояниями.

Управление кнопками поля

При тонкой настройке интерфейса полезно управлять отображением кнопок элемента:

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

← На главную