При разработке управляемых форм в 1С 8.3 часто возникает необходимость динамически формировать состав переключателей (радиокнопок). Однако простое заполнение списка выбора элемента формы не приводит к тому, что одно из значений автоматически становится выбранным. Давайте разберем, почему это происходит и как правильно решить задачу установки значения по умолчанию. Для практического изучения работы с элементами управления из кода можно использовать пример динамического создания элементов формы.
Первое, что необходимо осознать при работе с управляемыми формами, — это строгое разделение между Данными (реквизитами формы) и Элементами (визуальным представлением на экране). Ошибка многих разработчиков заключается в попытке присвоить значение напрямую элементу управления, например: Элементы.ИмяПереключателя = .... Это в корне неверный подход, так как элемент управления лишь отображает то, что записано в реквизите.
Для корректной работы мы должны обращаться к реквизиту, который привязан к нашему переключателю через свойство ПутьКДанным.
Чтобы переключатель отображал выбранное значение, выполним следующие шаги:
ПеречислениеСсылка.НазваниеПеречисления).Рассмотрим код, который корректно устанавливает первое значение из сформированного списка в качестве выбранного. Предположим, что наш реквизит называется Переключатель, а элемент формы имеет такое же имя.
// Пример кода для установки значения после формирования списка
// Сначала заполняем список выбора элемента
Элементы.Переключатель.СписокВыбора.Очистить();
Элементы.Переключатель.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ВидыОпераций.Вариант1"), "Вариант 1");
Элементы.Переключатель.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ВидыОпераций.Вариант2"), "Вариант 2");
// Теперь устанавливаем значение реквизита (именно РЕКВИЗИТА, а не элемента!)
Объект.Переключатель = Элементы.Переключатель.СписокВыбора[0].Значение;
Элементы.Переключатель не работает?Когда вы пишете Элементы.Переключатель = ..., вы пытаетесь изменить сам объект элемента управления, а не данные, которые он хранит. В управляемых формах обмен данными между клиентом и сервером работает через механизмы связки ПутьКДанным. Если в конфигураторе у элемента Переключатель в свойстве ПутьКДанным не указан реквизит, то любые манипуляции с визуальной частью не сохранят выбранное состояние в объекте.
Если после выполнения кода значение в реквизите меняется (это видно в отладчике), но визуально на форме переключатель остается невыбранным, проверьте следующие моменты:
СписокВыбора. Если в реквизит с типом Строка пытаться записать значение типа ПеречислениеСсылка, платформа будет игнорировать такое присвоение как недопустимое.Переключатель, что свойство ПутьКДанным заполнено и указывает на ваш реквизит.ЭтаФорма.ОбновитьОтображениеДанных(), чтобы форсировать обновление интерфейса.Используя этот подход — прямое присвоение реквизиту после заполнения СписокВыбора — вы добьетесь стабильного поведения переключателей в любых управляемых формах 1С.