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

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

При разработке управляемых форм часто возникает задача предоставить пользователю выбор из фиксированного набора вариантов. Для этого разработчики создают выпадающий список элементов и пытаются установить одно из значений по умолчанию при открытии формы. Однако нередко вместо понятного текстового представления (например, Количественный) в поле отображается сырое числовое значение (например, 0) либо поле остается пустым. Разберем причины такого поведения и пошагово реализуем корректную настройку элементов и реквизитов формы.

Анализ проблемы: почему не отображается представление из списка выбора

Рассмотрим типовую ситуацию. В коде формы при инициализации заполняется список выбора элемента формы:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Элементы.ВариантВыводаОтчета.СписокВыбора.Очистить();
    Элементы.ВариантВыводаОтчета.СписокВыбора.Добавить(0, "Количественный");
    Элементы.ВариантВыводаОтчета.СписокВыбора.Добавить(1, "Количественно-суммовой");
    
    Отчет.ВариантВыводаОтчета = 0;
КонецПроцедуры

При таком подходе разработчик ожидает увидеть в поле текст «Количественный», но в поле отображается цифра 0. Выясним причину этого поведения:

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

Пошаговое решение проблемы

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

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

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


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

Альтернативные и рекомендуемые архитектурные подходы

Проанализируем другие способы реализации, которые могут быть более удобными при сопровождении конфигурации:

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

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

← На главную