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