Как правильно настроить список выбора на форме 1С и определить выбранное значение

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

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

Разбираем основную ошибку: Список значений против Списка выбора

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

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

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

Давайте выполним последовательность действий, которая позволит создать корректный выбор из списка:

  1. Создадим реквизит формы (или объекта), например, с именем КонфигурацияВыгрузки и типом Строка.
  2. Перетащим этот реквизит в дерево элементов формы.
  3. Выделим созданный элемент формы и перейдем в его палитру свойств.
  4. Установим флаг в поле КнопкаСпискаВыбора. Это добавит маленькую стрелочку вниз в конце поля.
  5. Установим флаг РежимВыбораИзСписка в значение Да. Это заблокирует возможность ручного ввода произвольного текста, разрешив только выбор из предложенных вариантов.
  6. Найдем свойство Список выбора и нажмем на кнопку с многоточием. Здесь мы можем вручную добавить значения, которые увидит пользователь.

Если вы столкнулись с проблемой, когда конфигуратор не дает ввести значения в список (как упоминал автор темы), это может быть связано с тем, что тип реквизита по-прежнему установлен как СписокЗначений. Измените его на простой тип, и редактирование станет доступным.

Программное заполнение списка выбора

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

Проанализируем пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Получаем доступ к элементу формы (не к реквизиту!)
    ПолеСписка = Элементы.КонфигурацияВыгрузки;
    
    // Очищаем старые значения, если они были
    ПолеСписка.СписокВыбора.Очистить();
    
    // Добавляем новые элементы: Значение и Представление
    ПолеСписка.СписокВыбора.Добавить("УТ11", "Управление торговлей, ред. 11");
    ПолеСписка.СписокВыбора.Добавить("БП3", "Бухгалтерия предприятия, ред. 3.0");
    ПолеСписка.СписокВыбора.Добавить("ERP", "1С:ERP Управление предприятием");
    
КонецПроцедуры

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

Как правильно определить выбранное значение

Теперь выясним, как получить то, что выбрал пользователь. В сообщении 1 автор использует конструкцию Элементы.Имя.ВыделенныйТекст. Это крайне плохая практика по нескольким причинам:

Правильный способ — обращение напрямую к реквизиту формы. Когда пользователь выбирает пункт из списка, платформа автоматически записывает Значение (не представление!) выбранного элемента в связанный реквизит.

Рассмотрим пример обработки выбора в событии ПриИзменении:


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

Использование типа данных "Поле выбора"

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

Резюме

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

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

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

← На главную