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