К статье
Практический материал

Разработка и Конфигурация · 10 мин

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

Как добавить переключатель на управляемую форму 1С: поле с видом «Поле переключателя», реквизиты, группы, программное создание, типичные ошибки и проверка результата.

Переключатель (RadioButton) в управляемых формах 1С используется, когда пользователь должен выбрать одно значение из небольшого фиксированного набора вариантов: способ доставки, тип цены, режим расчёта. В отличие от выпадающего списка, переключатель показывает все варианты сразу и экономит пользователю один клик, но занимает больше места на форме.

В управляемом интерфейсе переключатель реализуется как обычное поле формы, у которого свойство «Вид» установлено в значение «Поле переключателя» (RadioButtonField). Список выбора такого поля определяет набор позиций, а значение связанного реквизита — текущую выбранную позицию. Это принципиально отличается от обычных форм, где каждый переключатель был отдельным элементом с порядковым значением.

Ниже разобраны оба способа добавления — через редактор формы в конфигураторе и программно из кода, а также настройка внешнего вида, обработка выбора и типичные ошибки, из-за которых переключатель отображается не так, как ожидалось.

Как работает переключатель в управляемой форме

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

Тип реквизита определяет, какие значения можно использовать. Чаще всего реквизит имеет тип «Число» (варианты нумеруются 0, 1, 2...) или «Строка» (варианты задаются осмысленными кодами). Можно также связать переключатель с перечислением — тогда список выбора заполняется значениями перечисления, хотя на практике для перечислений чаще применяют поле со списком.

Важно понимать: если значение реквизита не совпадает ни с одним значением из списка выбора, ни один переключатель не будет отмечен. Это частая причина «сломанного» вида формы при открытии существующих объектов.

Добавление переключателя через редактор формы

Основной сценарий — добавление переключателя в конфигураторе без написания кода. Порядок действий одинаков для форм документов, справочников и обработок.

Порядок действий в конфигураторе
  1. 1
    Откройте форму объекта в конфигураторе и перейдите на вкладку «Форма».
  2. 2
    Если реквизита ещё нет, добавьте реквизит формы или объекта нужного типа (Число или Строка).
  3. 3
    Перетащите реквизит в дерево элементов формы или добавьте новый элемент «Поле» и укажите ПутьКДанным.
  4. 4
    В палитре свойств элемента установите «Вид» = «Поле переключателя».
  5. 5
    Откройте свойство «СписокВыбора» и добавьте значения: 0 — «Наличными», 1 — «Картой» и т.д.
  6. 6
    Установите свойство «КоличествоКолонок»: 1 — вертикальный список, 0 — автоматически, число больше 1 — в несколько колонок.
  7. 7
    Запустите 1С:Предприятие и проверьте, что выбранное значение сохраняется и восстанавливается.

Свойство «КоличествоКолонок» управляет расположением вариантов. Значение 1 даёт классический вертикальный список, значение 0 позволяет платформе размещать варианты горизонтально по мере ширины. Для двух-трёх коротких вариантов горизонтальное расположение обычно удобнее.

Если значения списка выбора числовые, задавайте их осознанно, начиная с 0. Хранение «магических» чисел без пояснений в коде затрудняет сопровождение — через полгода никто не вспомнит, что означает значение 2.

Программное создание переключателя

Когда набор вариантов зависит от данных (например, от вида операции или настроек пользователя), переключатель создают программно в обработчике «ПриСозданииНаСервере». Это стандартный приём для динамических форм.

// Реквизит формы "СпособОплаты" (Число) должен существовать

НовыйЭлемент = Элементы.Добавить("СпособОплаты", Тип("ПолеФормы"), РодительскаяГруппа);

НовыйЭлемент.Вид = ВидПоляФормы.ПолеПереключателя;

НовыйЭлемент.ПутьКДанным = "СпособОплаты";

НовыйЭлемент.Заголовок = НСтр("ru = 'Способ оплаты'");

НовыйЭлемент.КоличествоКолонок = 1;

НовыйЭлемент.СписокВыбора.Добавить(0, "Наличными");

НовыйЭлемент.СписокВыбора.Добавить(1, "Банковской картой");

НовыйЭлемент.СписокВыбора.Добавить(2, "Безналичный расчёт");

НовыйЭлемент.УстановитьДействие("ПриИзменении", "СпособОплатыПриИзменении");

Обратите внимание на порядок: сначала элемент добавляется в коллекцию «Элементы», потом заполняются его свойства. Если назначить обработчик «ПриИзменении», процедура с таким именем должна существовать в модуле формы с директивой «&НаКлиенте» (или «&НаСервере», если логика требует серверного вызова).

bsl
НовыйЭлемент.Вид = ВидПоляФормы.ПолеПереключателя;
НовыйЭлемент.СписокВыбора.Добавить(0, "Вариант 1");

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

Обработка выбора и реакция на изменение

Для реакции на выбор пользователя используется событие «ПриИзменении» поля. В нём обычно меняют видимость других элементов: например, при выборе «Безналичный расчёт» показывают поля банковских реквизитов, а при «Наличными» — скрывают.

&НаКлиенте

Процедура СпособОплатыПриИзменении(Элемент)

Элементы.ГруппаБанковскиеРеквизиты.Видимость = (СпособОплаты = 2);

КонецПроцедуры

Изменение видимости на клиенте не требует обращения к серверу и работает мгновенно. Переносить такую логику в серверный обработчик — распространённая ошибка, замедляющая форму: каждый клик по переключателю будет вызывать серверный вызов с передачей контекста формы.

Переключатель или поле со списком: что выбрать

Платформа позволяет показать один и тот же набор значений разными элементами, и выбор влияет на удобство работы. Общее правило: переключатель — для 2–5 постоянных вариантов, список выбора — для большего количества или переменного состава.

Сравнение вариантов

Поле переключателя

Подходит для 2–5 постоянных вариантов. Все варианты видны сразу, но элемент занимает много места и плохо масштабируется.

Поле со списком выбора

Компактно, подходит для любого числа вариантов, в том числе динамических. Минус — варианты скрыты до раскрытия списка.

Поле с выпадающим списком (перечисление)

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

Группа кнопок переключателя (тумблер)

Вид «Поле переключателя» со свойством ВидПереключателя = Тумблер. Компактное горизонтальное представление для коротких подписей.

Отдельно стоит упомянуть вид переключателя «Тумблер» (Tumbler): варианты отображаются как горизонтальная полоса кнопок, из которой нажата одна. Это хороший компромисс для 2–4 коротких подписей, когда вертикальный список слишком громоздок.

Типичные ошибки и их последствия

Типичные ошибки
01
Значение реквизита не совпадает ни с одним значением списка выбора — при открытии формы ни один переключатель не отмечен, пользователь думает, что данные потеряны.
02
Попытка добавить второй элемент-переключатель на тот же реквизит для «двух групп» — оба элемента будут синхронно менять одно значение.
03
Обработчик ПриИзменении размещён на сервере ради простого переключения видимости — форма «подвисает» на каждый клик.
04
Список выбора заполняется в ПриОткрытии на клиенте, а элемент создан программно на сервере позже — список оказывается пустым.
05
Использование переключателя для 10+ вариантов — форма растягивается, пользователю трудно найти нужное значение.

Ещё одна тонкость: если реквизит — реквизит объекта (например, документа), то при открытии существующего документа значение уже заполнено, и переключатель отобразит его корректно. Если же реквизит добавлен только в форму, при каждом открытии он будет иметь значение по умолчанию, и его нужно инициализировать явно.

Проверка результата

Контрольные точки

Как проверить результат

Отображение при открытии
Норма

Выбран тот вариант, который соответствует значению реквизита

Тревожный признак

Ни один вариант не отмечен либо отмечен неверный

Сохранение значения
Норма

После записи и повторного открытия объекта выбор сохраняется

Тревожный признак

После переоткрытия выбор сбрасывается на значение по умолчанию

Реакция формы
Норма

Связанные элементы показываются и скрываются мгновенно, без задержек

Тревожный признак

Видимая пауза при каждом клике — признак лишнего серверного вызова

Поведение при новом объекте
Норма

У нового объекта отмечен осмысленный вариант по умолчанию

Тревожный признак

У нового объекта ничего не выбрано, и пользователь может записать пустое значение

Дополнительно проверьте форму при разной ширине окна: горизонтальные переключатели с длинными подписями могут обрезаться. Если подписи длинные, ставьте «КоличествоКолонок = 1» или сокращайте тексты.

Итог

Что важно запомнить

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

Частые вопросы

Можно ли сделать несколько независимых групп переключателей на одной форме?

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

Почему при открытии формы ни один переключатель не выбран?

Значение связанного реквизита не совпадает ни с одним значением из списка выбора. Проверьте типы: если список содержит числа, а реквизит строковый, «0» и 0 — разные значения. Также убедитесь, что у нового объекта реквизит инициализируется значением по умолчанию.

Как запретить пользователю оставлять переключатель без выбора?

Установите реквизиту значение по умолчанию при создании объекта (в обработчике «ПриСозданииНаСервере» для новых объектов) и включите у реквизита объекта проверку заполнения «Выдавать ошибку». Тогда записать объект с пустым значением не получится.

Можно ли программно изменить список вариантов после открытия формы?

Да. Получите элемент через «Элементы.ИмяПоля», очистите «СписокВыбора» методом «Очистить()» и добавьте новые значения. После изменения списка проверьте, что текущее значение реквизита присутствует в новом списке, иначе выбор сбросится визуально.

Чем переключатель отличается от флажка?

Флажок — это независимый выбор «да/нет» для одного булева реквизита. Переключатель выбирает одно значение из нескольких взаимоисключающих вариантов. Если вариантов ровно два и они сводятся к «включено/выключено», флажок обычно компактнее и понятнее.

Работает ли переключатель в тонком и веб-клиенте?

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