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

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

Как сделать переключатель в 1С

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

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

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

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

Когда переключатель подходит, а когда лучше другое поле

Переключатель оправдан, когда вариантов выбора немного — обычно от двух до пяти — и все они должны быть видны пользователю сразу, без раскрытия списка. Классические сценарии: выбор пола, способа оплаты, режима работы документа, варианта округления цены.

Если вариантов больше пяти-семи, переключатель займёт слишком много места на форме и станет неудобным. В этом случае лучше использовать поле со списком выбора (выпадающий список) или поле ввода с кнопкой выбора из справочника.

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

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

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

2–5 взаимоисключающих вариантов, все видны сразу. Не подходит для длинных списков.

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

Много вариантов, экономит место на форме. Варианты скрыты до раскрытия списка.

Флажок

Один независимый параметр типа «да/нет». Не подходит для выбора одного из нескольких.

Создание переключателя в конфигураторе

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

Реквизит для переключателя обычно имеет тип «Число» (варианты нумеруются с нуля), «Строка» или ссылку на перечисление. Самый надёжный вариант — перечисление: тогда каждый вариант переключателя однозначно связан со значением перечисления, и данные корректно сохраняются в базе.

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

Порядок действий в конфигураторе
  1. 1
    Откройте форму объекта и добавьте элемент типа «Поле» в нужную группу
  2. 2
    В свойстве «Вид» выберите «Поле переключателя»
  3. 3
    В «ПутьКДанным» укажите реквизит формы или объекта
  4. 4
    Заполните «Список выбора»: значение и представление для каждого варианта
  5. 5
    Настройте «Вид переключателя» и при необходимости «ПоложениеЗаголовка»
  6. 6
    Обновите конфигурацию базы данных и проверьте форму в режиме предприятия

Настройка внешнего вида и поведения

Вид: радиокнопки или тумблер

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

Горизонтальное и вертикальное расположение

Количество колонок задаётся свойством «КоличествоКолонок». Значение 0 располагает варианты в одну строку, значение 1 — вертикально в один столбец, значения 2 и более разбивают варианты на колонки. Для тумблера горизонтальный ряд обычно удобнее, для радиокнопок с длинными подписями — вертикальный столбец.

Дополнительно полезны свойства «ОтображениеПодсказки», «Подсказка» и «ПоложениеЗаголовка». Если подписи вариантов говорящие сами по себе, заголовок поля можно скрыть, установив положение «Нет», — форма станет чище.

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

Иногда элемент нужно создать динамически — например, когда состав вариантов зависит от настроек или вида документа. Это делается в модуле формы, обычно в обработчике «ПриСозданииНаСервере», через коллекцию «Элементы» формы.

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

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

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

НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;

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

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

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

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

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

Обработчик «ПриИзменении» назначается методом «УстановитьДействие». Сам обработчик должен существовать в модуле формы, иначе при выборе значения возникнет ошибка вызова несуществующей процедуры.

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

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

Чтобы форма реагировала на переключение — например, показывала или скрывала связанные поля, — создаётся обработчик события «ПриИзменении». В конфигураторе он добавляется через палитру свойств, кнопкой с лупой рядом с событием.

Типовая задача — управление видимостью: при выборе «Курьер» показать поле адреса доставки, при «Самовывоз» — скрыть его. Логику удобно вынести в отдельную процедуру и вызывать её и из обработчика изменения, и при открытии формы, чтобы начальное состояние соответствовало сохранённому значению.

&НаКлиенте

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

НастроитьВидимостьДоставки();

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

&НаСервере

Процедура НастроитьВидимостьДоставки()

Элементы.АдресДоставки.Видимость = (СпособДоставки = 1);

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

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

Проверка результата и типичные ошибки

После настройки обновите конфигурацию базы данных и откройте форму в режиме предприятия. Проверьте три вещи: переключатель отображается со всеми вариантами; выбор варианта меняет значение реквизита; после записи и повторного открытия объекта выбранное значение восстанавливается.

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

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

Отображение вариантов
Норма

Все варианты из списка выбора видны на форме

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

Переключатель пустой — не заполнен список выбора

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

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

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

Значение сбрасывается — реквизит не принадлежит объекту

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

Связанные поля показываются и скрываются при переключении

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

Ничего не происходит — не назначен обработчик ПриИзменении

Типичные ошибки
01
Не заполнен список выбора — переключатель выглядит пустым прямоугольником без вариантов
02
Тип значений списка не совпадает с типом реквизита — выбор не сохраняется или вызывает ошибку преобразования
03
Путь к данным указывает на реквизит формы вместо реквизита объекта — значение теряется после закрытия формы
04
Обработчик назначен через УстановитьДействие, но процедура не создана в модуле — ошибка при первом переключении
05
Слишком много вариантов в одну строку — подписи обрезаются, форму приходится растягивать

Ограничения и альтернативные подходы

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

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

Итог

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

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

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

Почему переключатель на форме отображается пустым?

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

Можно ли связать переключатель с перечислением?

Да, это рекомендуемый подход. Создайте реквизит с типом нужного перечисления, а в список выбора элемента добавьте значения перечисления с понятными представлениями. Тогда выбранный вариант надёжно сохраняется в базе и легко проверяется в запросах и коде.

Как сделать переключатель вертикальным?

Установите свойство «КоличествоКолонок» равным 1 — варианты выстроятся в один столбец. Значение 0 располагает все варианты в одну строку, а значения больше 1 разбивают список на несколько колонок.

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

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

Как изменить состав вариантов переключателя в зависимости от условий?

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

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

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