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