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

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

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

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

Выясним причину: почему не получается задать значение в конфигураторе

Подобная сложность обычно возникает из-за двух типичных архитектурных ошибок при проектировании формы:

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

Вариант 1. Одиночный выбор из выпадающего списка (стандартный сценарий)

Рассмотрим по шагам, как корректно настроить выбор одной текстовой строки из фиксированного набора вариантов.

Интерактивная настройка в конфигураторе:

  1. Создадим на форме реквизит с именем ВариантОтбора и установим ему тип Строка (с необходимой длиной).
  2. Перетащим созданный реквизит в дерево элементов формы — автоматически создастся элемент формы типа «Поле ввода».
  3. Откроем палитру свойств созданного элемента формы и включим следующие параметры:
    1. Установим флаг РежимВыбораИзСписка в значение Истина.
    2. Установим флаг КнопкаСпискаВыбора в значение Истина.
  4. В свойстве СписокВыбора нажмем кнопку с многоточием. Теперь колонка «Значение» доступна для прямого ввода строковых данных, а в колонке «Представление» можно задать понятный для пользователя текст.

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

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


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

Вариант 2. Работа с реквизитом типа «СписокЗначений» (множественный выбор)

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

  1. В свойствах реквизита формы укажем ТипЗначения, например Строка длины 50. Это позволит платформе однозначно определять тип добавляемых строк.
  2. При переносе реквизита с типом СписокЗначений на управляемую форму создается элемент типа «Таблица» с колонками «Значение», «Пометка» и «Представление».
  3. Для первичного заполнения списка на форме используем серверную процедуру:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Заполняем сам реквизит формы с типом СписокЗначений
    РеквизитСписокИсточников.Очистить();
    РеквизитСписокИсточников.Добавить("В ТВ3", "В ТВ3");
    РеквизитСписокИсточников.Добавить("Запрос на почту", "Запрос на почту");
    РеквизитСписокИсточников.Добавить("На сайте", "На сайте");
    РеквизитСписокИсточников.Добавить("По телефону", "По телефону");
    
КонецПроцедуры

Обратите внимание: свойство ДоступныеЗначения в управляемых формах у элементов и реквизитов отсутствует — оно применяется только в системе компоновки данных (СКД) для параметров отчетов или в обычном приложении. В управляемом интерфейсе всегда используется свойство СписокВыбора у элементов формы.

Вариант 3. Динамическое формирование списка выбора на клиенте

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


&НаКлиенте
Процедура ВариантОтбораНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    
    // Переопределяем список выбора непосредственно перед его открытием
    Элемент.СписокВыбора.Очистить();
    Элемент.СписокВыбора.Добавить("Опт", "Оптовая торговля");
    Элемент.СписокВыбора.Добавить("Розница", "Розничная торговля");
    
КонецПроцедуры

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

← На главную