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