В процессе разработки конфигураций на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью предоставить пользователю выбор из нескольких взаимоисключающих вариантов. Стандартный интерфейс предлагает для этих целей визуальный элемент управления, который в среде разработчика называется переключателем. Его использование упрощает восприятие данных, так как все возможные значения видны одновременно, в отличие от выпадающих списков.
Работа с этим элементом требует понимания не только его размещения на макете формы, но и правильной привязки к реквизитам. Неправильная настройка может привести к тому, что выбор пользователя не будет сохраняться или отображаться некорректно. В этой статье мы детально разберем алгоритм создания, настройки и программирования поведения переключателей в различных сценариях использования.
Подготовка реквизитов формы для переключателя
Перед тем как вывести элемент управления на экран, необходимо подготовить «почву» для хранения данных. Переключатель в 1С 8.3 всегда привязан к конкретному реквизиту формы. Чаще всего для этих целей используется примитивный тип данных — Строка или Число. Если вы планируете хранить текстовые коды состояний, создайте реквизит типа Строка с фиксированной длиной.
Длина строки должна быть достаточной для хранения самого длинного значения из возможных вариантов. Например, если варианты выбора имеют коды «Активен», «Заблокирован» и «На проверке», то минимальная длина строки составит 12 символов. Использование типа Число также допустимо, особенно если варианты кодируются цифрами 1, 2, 3, что иногда экономит место в базе данных при последующей записи в регистры.
Важно определить, будет ли этот реквизит храниться в объекте метаданных (документе, справочнике) или существовать только в памяти формы. Для временных выборок, влияющих лишь на отображение данных, достаточно добавить реквизит непосредственно в форму. Для постоянных значений необходимо создать соответствующее поле в объекте конфигурации и включить его в состав формы.
⚠️ Внимание: Тип данных реквизита формы и тип значения, которое вы планируете присваивать переключателю, должны строго совпадать. Попытка записать строку в числовой реквизит вызовет ошибку выполнения.
Размещение элемента управления на макете формы
После создания реквизита переходим к визуальной части. Откройте конструктор форм или редактор форм в режиме предприятия. В палитре элементов управления найдите группу «Поля ввода» или воспользуйтесь поиском по названию элемента. Нам требуется элемент с типом Переключатель. Перетащите его на нужную страницу или в группу макета формы.
По умолчанию элемент появится с пустым заголовком и без привязки. Первым делом в свойствах элемента укажите поле, созданное на предыдущем этапе, в параметре Данные. Это свяжет визуальный компонент с внутренней переменной. Без этой связи переключатель будет работать как декорация, не сохраняя состояние выбора.
Следующий критический шаг — настройка вариантов выбора. В свойствах элемента найдите коллекцию Варианты. Именно здесь задаются те самые кнопки, между которыми пользователь будет выбирать. Каждый вариант представляет собой пару: значение (которое запишется в реквизит) и представление (текст, видимый пользователю).
Используйте краткие и понятные названия для вариантов выбора. Длинные тексты могут нарушить верстку формы, особенно при узком расположении переключателя.
Настройка свойств и вариантов выбора
Коллекция вариантов требует внимательного заполнения. Для каждого элемента списка необходимо задать уникальное значение. Если тип реквизита — строка, значение вводится в кавычках или как текст. Если число — просто цифра. Представление может быть любым, оно служит только для отображения в интерфейсе 1С:Предприятие.
Рассмотрим пример настройки для выбора статуса заказа. Вам потребуется добавить три варианта. Первый: Значение «Новый», Представление «Новый заказ». Второй: Значение «В работе», Представление «Выполняется». Третий: Значение «Готов», Представление «Завершен». Платформа автоматически отобразит эти пункты как радиокнопки.
Также стоит обратить внимание на свойство Вид переключателя. Оно позволяет выбрать ориентацию элементов: вертикальную или горизонтальную. Вертикальное расположение предпочтительнее, если тексты вариантов длинные или их много. Горизонтальное экономит место по высоте, но требует достаточной ширины формы.
| Свойство | Тип значения | Описание влияния на форму |
|---|---|---|
| Данные | Поле формы | Определяет переменную для хранения выбранного значения |
| Варианты | Список значений | Формирует набор доступных опций для выбора пользователем |
| Вид | Перечисление | Задает направление расположения кнопок (вертикально/горизонтально) |
| Только просмотр | Булево | Запрещает изменение значения пользователем, оставляя только отображение |
Группировка переключателей для независимой работы
Один из самых частых вопросов новичков касается ситуации, когда на форме требуется несколько независимых групп переключателей. По умолчанию все переключатели, находящиеся в одной логической области видимости (например, на одной странице без разделителей), могут вести себя как одна группа. То есть выбор в одной группе сбрасывает выбор в другой.
Чтобы избежать этого поведения и обеспечить независимость групп, необходимо использовать контейнеры. Поместите первую группу переключателей в элемент Группа с типом отображения «Обычная» или «Вкладки». Вторую группу разместите в другой группе или отделите их командной панелью.
Платформа 1С 8.3 трактует переключатели, лежащие в разных родительских контейнерах, как раздельные наборы. Это позволяет реализовать сложную логику интерфейса, где пользователь выбирает тип оплаты в одном блоке и способ доставки в другом, не опасаясь сброса предыдущих настроек.
⚠️ Внимание: Если переключатели ведут себя некорректно и сбрасывают друг друга, проверьте иерархию макета формы. Убедитесь, что независимые группы разделены элементами «Группа» или «Страница».
Техническая деталь реализации группировки
Механизм группировки переключателей в 1С основан на области видимости имени группы в HTML-рендерере клиента. Элементы внутри одного контейнера получают общий атрибут name, что заставляет браузер обрабатывать их как единую радиогруппу.
Программное управление и обработка событий
Статического размещения часто недостаточно. Требуется реакция системы на изменение выбора пользователем. Для этого используется событие ПриИзменении у реквизита формы, к которому привязан переключатель. В модуле формы создается процедура-обработчик.
В теле обработчика вы можете реализовать любую логику: открыть дополнительное окно, изменить доступность других полей или пересчитать суммы. Доступ к текущему значению осуществляется напрямую через имя реквизита. Пример кода для обработки смены статуса:
&НаКлиенте
Процедура СтатусЗаказаПриИзменении(Элемент)
Если СтатусЗаказа = "В работе" Тогда
Элементы.Комментарий.Доступность = Истина;
Сообщить("Режим редактирования активирован");
Иначе
Элементы.Комментарий.Доступность = Ложь;
Элементы.Комментарий.Значение = "";
КонецЕсли;
КонецПроцедуры
Также возможно программное изменение значения переключателя из других частей кода. Достаточно просто присвоить новое значение реквизиту формы: СтатусЗаказа = "Готов";. Интерфейс автоматически обновится, и «галочка» переместится на соответствующий вариант. Это удобно при инициализации формы данными из базы.
☑️ Проверка работоспособности переключателя
Типичные ошибки и способы их устранения
При разработке могут возникать ситуации, когда переключатель отображается, но не выбирается, или выбор не сохраняется при записи объекта. Первой причиной часто является несоответствие типов. Если в реквизите формы лежит число, а в варианты выбора прописаны строки, система не сможет записать значение.
Вторая распространенная проблема — отсутствие права доступа. Если у роли пользователя нет прав на изменение данного реквизита объекта метаданных, поле будет заблокировано. Проверьте настройки прав доступа (РПИ) для соответствующего объекта конфигурации.
Третья ошибка связана с очисткой значения. Если пользователь должен иметь возможность снять выбор (сделать значение неопределенным), стандартный переключатель этого не позволяет без дополнительного программирования. В таком случае стоит рассмотреть использование поля ввода со списком или добавление специальной кнопки «Сбросить».
⚠️ Внимание: При изменении структуры вариантов выбора (добавление или удаление пунктов) в работающей базе данных убедитесь, что старые записанные значения остаются валидными. Иначе при открытии старых документов могут возникнуть ошибки отображения.
Главное правило отладки: всегда сверяйте тип данных реквизита формы и тип значений в коллекции вариантов. 90% проблем с неработающим переключателем кроются именно здесь.
Часто задаваемые вопросы (FAQ)
Можно ли сделать переключатель с картинками вместо текста?
Стандартными средствами платформы 1С 8.3 в элемент переключатель нельзя вставить изображения напрямую в варианты выбора. Для реализации такого интерфейса придется использовать поле картинки с обработкой нажатия или разрабатывать собственную управляемую форму с использованием HTML-документов, что значительно усложняет поддержку.
Как программно скрыть конкретный вариант выбора?
Напрямую скрыть один вариант из коллекции в режиме предприятия нельзя, коллекция свойств элемента доступна только для чтения в рантайме. Решение заключается в создании нескольких переключателей с разными наборами вариантов и управлении их видимостью через свойство Видимость в зависимости от условий.
Почему переключатель сбрасывается при перезаписи формы?
Это происходит, если значение в реквизите объекта не соответствует ни одному из вариантов в коллекции. При чтении данных система пытается найти соответствие. Если совпадения нет (например, в базе записано "СтарыйСтатус", а в форме только "Новый" и "Готов"), значение игнорируется и поле остается пустым.
Можно ли использовать переключатель для булевого значения?
Да, это допустимо. Создайте реквизит типа Булево и добавьте два варианта: Значение Истина (Представление «Да») и Значение Ложь (Представление «Нет»). Однако для булевых значений чаще и удобнее использовать стандартный флажок (Checkbox).
Влияет ли порядок вариантов в списке на-tab навигацию?
Да, порядок следования элементов в коллекции Варианты определяет последовательность переключения фокуса клавишей Tab или стрелками клавиатуры. Первый элемент в списке будет первым в очереди обхода. Это важно учитывать для обеспечения эргономики работы оператора.