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

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

Как сделать переключатель в управляемых формах 1С

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

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

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

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

Какой реквизит нужен для переключателя

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

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

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

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

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

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

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

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

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

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

&НаСервере

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

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

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

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

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

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

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

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

Обработка выбора пользователя

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

&НаКлиенте

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

Элементы.АдресДоставки.Видимость = (Объект.СпособДоставки <> "Самовывоз");

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

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

Маршрут решения

Как выбрать способ реализации

Варианты фиксированы и известны заранееИспользуйте перечисление и заполните СписокВыбора в конфигураторе
Варианты зависят от данных или роли пользователяЗаполняйте СписокВыбора программно в ПриСозданииНаСервере
Вариантов больше 5–7Замените переключатель на поле со списком выбора или выпадающий список
Нужен выбор «да/нет»Используйте флажок или тумблер с двумя значениями

Внешний вид и расположение на форме

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

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

Проверяйте отображение на разных клиентах. Тумблер с длинными представлениями может обрезаться в веб-клиенте при узкой форме. Сокращайте представления до 1–2 слов либо переключайтесь на радиокнопки, где длина текста менее критична.

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

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

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

Все значения списка выбора видны и кликабельны

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

Часть вариантов отсутствует или обрезана

Текущее значение
Норма

При открытии формы выбран вариант, соответствующий данным

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

Переключатель пуст, хотя реквизит заполнен

Сохранение
Норма

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

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

Значение сбрасывается — реквизит не входит в данные объекта

Обработчик
Норма

ПриИзменении срабатывает на каждый клик

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

Событие не назначено или назначено другому элементу

Типичные ошибки и ограничения

Самая распространённая проблема — несовпадение типов. Реквизит объявлен как строка длиной 10, а значение в списке выбора длиннее: платформа молча обрезает значение при записи, и сравнение перестаёт работать. Всегда проверяйте длину строкового реквизита и квалификаторы типа.

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

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

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

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

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

Технически вид «Поле переключателя» для булева доступен, но список выбора для булева не заполняется представлениями произвольно. Практичнее использовать флажок (вид по умолчанию) либо заменить реквизит на строковый с двумя значениями, если нужен тумблер с подписями «Да/Нет».

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

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

Почему тумблер не отображается в тонком клиенте?

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

Как расположить радиокнопки горизонтально?

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

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

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

Что выбрать: переключатель или выпадающий список?

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

Итог

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

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