Разработка и Конфигурация · 10 мин
Как добавить переключатель на управляемую форму в 1С
Как добавить переключатель на управляемую форму 1С: поле с видом «Поле переключателя», реквизиты, группы, программное создание, типичные ошибки и проверка результата.
Переключатель (RadioButton) в управляемых формах 1С используется, когда пользователь должен выбрать одно значение из небольшого фиксированного набора вариантов: способ доставки, тип цены, режим расчёта. В отличие от выпадающего списка, переключатель показывает все варианты сразу и экономит пользователю один клик, но занимает больше места на форме.
В управляемом интерфейсе переключатель реализуется как обычное поле формы, у которого свойство «Вид» установлено в значение «Поле переключателя» (RadioButtonField). Список выбора такого поля определяет набор позиций, а значение связанного реквизита — текущую выбранную позицию. Это принципиально отличается от обычных форм, где каждый переключатель был отдельным элементом с порядковым значением.
Ниже разобраны оба способа добавления — через редактор формы в конфигураторе и программно из кода, а также настройка внешнего вида, обработка выбора и типичные ошибки, из-за которых переключатель отображается не так, как ожидалось.
Как работает переключатель в управляемой форме
В управляемых формах переключатель — это не группа отдельных элементов, а один элемент формы типа «Поле» с видом «Поле переключателя». Все варианты выбора хранятся в его свойстве «СписокВыбора», а выбранное значение записывается в реквизит, указанный в свойстве «ПутьКДанным».
Тип реквизита определяет, какие значения можно использовать. Чаще всего реквизит имеет тип «Число» (варианты нумеруются 0, 1, 2...) или «Строка» (варианты задаются осмысленными кодами). Можно также связать переключатель с перечислением — тогда список выбора заполняется значениями перечисления, хотя на практике для перечислений чаще применяют поле со списком.
Важно понимать: если значение реквизита не совпадает ни с одним значением из списка выбора, ни один переключатель не будет отмечен. Это частая причина «сломанного» вида формы при открытии существующих объектов.
Добавление переключателя через редактор формы
Основной сценарий — добавление переключателя в конфигураторе без написания кода. Порядок действий одинаков для форм документов, справочников и обработок.
- 1Откройте форму объекта в конфигураторе и перейдите на вкладку «Форма».
- 2Если реквизита ещё нет, добавьте реквизит формы или объекта нужного типа (Число или Строка).
- 3Перетащите реквизит в дерево элементов формы или добавьте новый элемент «Поле» и укажите ПутьКДанным.
- 4В палитре свойств элемента установите «Вид» = «Поле переключателя».
- 5Откройте свойство «СписокВыбора» и добавьте значения: 0 — «Наличными», 1 — «Картой» и т.д.
- 6Установите свойство «КоличествоКолонок»: 1 — вертикальный список, 0 — автоматически, число больше 1 — в несколько колонок.
- 7Запустите 1С:Предприятие и проверьте, что выбранное значение сохраняется и восстанавливается.
Свойство «КоличествоКолонок» управляет расположением вариантов. Значение 1 даёт классический вертикальный список, значение 0 позволяет платформе размещать варианты горизонтально по мере ширины. Для двух-трёх коротких вариантов горизонтальное расположение обычно удобнее.
Если значения списка выбора числовые, задавайте их осознанно, начиная с 0. Хранение «магических» чисел без пояснений в коде затрудняет сопровождение — через полгода никто не вспомнит, что означает значение 2.
Программное создание переключателя
Когда набор вариантов зависит от данных (например, от вида операции или настроек пользователя), переключатель создают программно в обработчике «ПриСозданииНаСервере». Это стандартный приём для динамических форм.
// Реквизит формы "СпособОплаты" (Число) должен существовать
НовыйЭлемент = Элементы.Добавить("СпособОплаты", Тип("ПолеФормы"), РодительскаяГруппа);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеПереключателя;
НовыйЭлемент.ПутьКДанным = "СпособОплаты";
НовыйЭлемент.Заголовок = НСтр("ru = 'Способ оплаты'");
НовыйЭлемент.КоличествоКолонок = 1;
НовыйЭлемент.СписокВыбора.Добавить(0, "Наличными");
НовыйЭлемент.СписокВыбора.Добавить(1, "Банковской картой");
НовыйЭлемент.СписокВыбора.Добавить(2, "Безналичный расчёт");
НовыйЭлемент.УстановитьДействие("ПриИзменении", "СпособОплатыПриИзменении");
Обратите внимание на порядок: сначала элемент добавляется в коллекцию «Элементы», потом заполняются его свойства. Если назначить обработчик «ПриИзменении», процедура с таким именем должна существовать в модуле формы с директивой «&НаКлиенте» (или «&НаСервере», если логика требует серверного вызова).
НовыйЭлемент.Вид = ВидПоляФормы.ПолеПереключателя;
НовыйЭлемент.СписокВыбора.Добавить(0, "Вариант 1");Программно созданные элементы живут только в рамках текущего открытия формы. При повторном открытии код выполнится заново, поэтому никакой дополнительной очистки не требуется — но и заполнять список нужно каждый раз.
Обработка выбора и реакция на изменение
Для реакции на выбор пользователя используется событие «ПриИзменении» поля. В нём обычно меняют видимость других элементов: например, при выборе «Безналичный расчёт» показывают поля банковских реквизитов, а при «Наличными» — скрывают.
&НаКлиенте
Процедура СпособОплатыПриИзменении(Элемент)
Элементы.ГруппаБанковскиеРеквизиты.Видимость = (СпособОплаты = 2);
КонецПроцедуры
Изменение видимости на клиенте не требует обращения к серверу и работает мгновенно. Переносить такую логику в серверный обработчик — распространённая ошибка, замедляющая форму: каждый клик по переключателю будет вызывать серверный вызов с передачей контекста формы.
Переключатель или поле со списком: что выбрать
Платформа позволяет показать один и тот же набор значений разными элементами, и выбор влияет на удобство работы. Общее правило: переключатель — для 2–5 постоянных вариантов, список выбора — для большего количества или переменного состава.
Сравнение вариантов
Подходит для 2–5 постоянных вариантов. Все варианты видны сразу, но элемент занимает много места и плохо масштабируется.
Компактно, подходит для любого числа вариантов, в том числе динамических. Минус — варианты скрыты до раскрытия списка.
Стандартный вариант для реквизитов типа «Перечисление». Значения подтягиваются из метаданных, код не нужен.
Вид «Поле переключателя» со свойством ВидПереключателя = Тумблер. Компактное горизонтальное представление для коротких подписей.
Отдельно стоит упомянуть вид переключателя «Тумблер» (Tumbler): варианты отображаются как горизонтальная полоса кнопок, из которой нажата одна. Это хороший компромисс для 2–4 коротких подписей, когда вертикальный список слишком громоздок.
Типичные ошибки и их последствия
Ещё одна тонкость: если реквизит — реквизит объекта (например, документа), то при открытии существующего документа значение уже заполнено, и переключатель отобразит его корректно. Если же реквизит добавлен только в форму, при каждом открытии он будет иметь значение по умолчанию, и его нужно инициализировать явно.
Проверка результата
Как проверить результат
Выбран тот вариант, который соответствует значению реквизита
Ни один вариант не отмечен либо отмечен неверный
После записи и повторного открытия объекта выбор сохраняется
После переоткрытия выбор сбрасывается на значение по умолчанию
Связанные элементы показываются и скрываются мгновенно, без задержек
Видимая пауза при каждом клике — признак лишнего серверного вызова
У нового объекта отмечен осмысленный вариант по умолчанию
У нового объекта ничего не выбрано, и пользователь может записать пустое значение
Дополнительно проверьте форму при разной ширине окна: горизонтальные переключатели с длинными подписями могут обрезаться. Если подписи длинные, ставьте «КоличествоКолонок = 1» или сокращайте тексты.
Что важно запомнить
Переключатель в управляемой форме — это поле с видом «Поле переключателя» и заполненным списком выбора. Значение хранится в связанном реквизите и должно совпадать с одним из значений списка. Реакцию на выбор делайте на клиенте, а для большого числа вариантов используйте поле со списком.
Частые вопросы
Можно ли сделать несколько независимых групп переключателей на одной форме?
Да. Каждая группа — это отдельный элемент «Поле переключателя», связанный со своим реквизитом. Взаимоисключение работает только внутри одного элемента, поэтому для двух независимых выборов нужны два реквизита и два элемента, которые для наглядности можно разместить в разных группах формы с заголовками.
Почему при открытии формы ни один переключатель не выбран?
Значение связанного реквизита не совпадает ни с одним значением из списка выбора. Проверьте типы: если список содержит числа, а реквизит строковый, «0» и 0 — разные значения. Также убедитесь, что у нового объекта реквизит инициализируется значением по умолчанию.
Как запретить пользователю оставлять переключатель без выбора?
Установите реквизиту значение по умолчанию при создании объекта (в обработчике «ПриСозданииНаСервере» для новых объектов) и включите у реквизита объекта проверку заполнения «Выдавать ошибку». Тогда записать объект с пустым значением не получится.
Можно ли программно изменить список вариантов после открытия формы?
Да. Получите элемент через «Элементы.ИмяПоля», очистите «СписокВыбора» методом «Очистить()» и добавьте новые значения. После изменения списка проверьте, что текущее значение реквизита присутствует в новом списке, иначе выбор сбросится визуально.
Чем переключатель отличается от флажка?
Флажок — это независимый выбор «да/нет» для одного булева реквизита. Переключатель выбирает одно значение из нескольких взаимоисключающих вариантов. Если вариантов ровно два и они сводятся к «включено/выключено», флажок обычно компактнее и понятнее.
Работает ли переключатель в тонком и веб-клиенте?
Да, поле переключателя поддерживается во всех клиентских приложениях управляемого интерфейса. Однако отображение может незначительно отличаться, поэтому форму с нестандартным расположением (несколько колонок, длинные подписи) стоит проверить именно в том клиенте, которым пользуются сотрудники.