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