Почему не переключается переключатель на управляемой форме 1С 8.3 и как это исправить

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

В чем разница настройки переключателей в 1С 8.2 и 1С 8.3

Для понимания сути проблемы рассмотрим, как изменилась концепция работы с переключателями при переходе от обычных форм (платформа «1С:Предприятие 8.2» и старше) к управляемым формам (платформа «1С:Предприятие 8.3»).

В старых обычных формах переключатель настраивался достаточно сложно и требовал от разработчика ювелирной точности:

  1. Каждая точка выбора (радиокнопка) представляла собой отдельный физический элемент управления, добавленный на форму.
  2. Их необходимо было строго последовательно выстраивать по порядку обхода формы (свойство ПорядокОбхода или Tab Order).
  3. Для самого первого элемента в группе требовалось установить флаг «Первый в группе».
  4. Для всех последующих элементов нужно было вручную прописать конкретное «Выбираемое значение».

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

В современных управляемых формах (УФ) на платформе 1С 8.3 разработчиков избавили от этой рутины. Теперь концепция выглядит гораздо изящнее:

Платформа 1С 8.3 самостоятельно анализирует этот список и автоматически отрисовывает нужное количество точек на экране. Больше не нужно следить за порядком обхода и настраивать группировку вручную.

Главная причина проблемы: дублирование значений в списке выбора

Разберем классическую ошибку, из-за которой точки переключателя становятся недоступными, а на форме выводится нечто вроде «0 по номенклатуре, 0 по контрагентам». Выясним причину этого поведения.

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

Если разработчик заполняет только колонку «Представление» (пишет туда «по номенклатуре» и «по контрагентам»), но забывает изменить автоматически сгенерированные нули в колонке «Значение», то получается следующая картина:

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

Разберем по шагам: как правильно настроить переключатель в Конфигураторе

Чтобы исправить эту ошибку и сделать переключатель активным, выполним простую последовательность действий в Конфигураторе:

  1. Откроем нужную управляемую форму в конфигураторе.
  2. Найдем в списке элементов формы наш переключатель и откроем его палитру свойств.
  3. Найдем свойство «Список выбора» и нажмем на кнопку с тремя точками для открытия окна редактирования списка.
  4. Обратим внимание на колонку «Значение». В ней обязательно должны стоять разные, уникальные значения!
  5. Зададим уникальные значения вручную. Например:
    • Для строки с представлением «по номенклатуре» установим значение 0 (тип Число).
    • Для строки с представлением «по контрагентам» установим значение 1 (тип Число).
  6. Нажмем «ОК», сохраним конфигурацию и запустим отладку. Переключатель станет активным и начнет отлично работать.

Программная настройка списка выбора для переключателя

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


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

    // Получаем элемент формы
    ЭлементПереключатель = Элементы.РежимВыбора;
    
    // Очищаем список выбора перед заполнением
    ЭлементПереключатель.СписокВыбора.Очистить();
    
    // Добавляем элементы с уникальными числовыми значениями
    ЭлементПереключатель.СписокВыбора.Добавить(0, "По номенклатуре");
    ЭлементПереключатель.СписокВыбора.Добавить(1, "По контрагентам");
    
    // Устанавливаем начальное значение по умолчанию
    // Если реквизит не инициализировать, ни одна точка не будет выбрана при открытии
    Объект.РежимВыбора = 0; 

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

Этот простой код гарантирует, что значения будут уникальными (0 и 1), типы данных совпадут, а пользователь сразу увидит выбранным первый вариант при открытии формы.

Другие возможные причины неактивности переключателя

Если уникальность значений проверена, но элемент все равно заблокирован, проанализируем другие возможные проблемы:

  1. Несоответствие типов данных. Если реквизит формы имеет тип Число, а в списке выбора в качестве значений вы указали строки (например, текстовые "0" и "1"), платформа не сможет сопоставить типы. Переключатель окажется заблокированным. Всегда проверяйте соответствие типов реквизита и значений в списке выбора.
  2. Свойства доступности и только чтения. Проверьте свойства самого элемента на форме, а также группы, в которую он входит. Если для родительской группы или самого поля установлено свойство Доступность = Ложь или ТолькоПросмотр = Истина, переключатель логичным образом заблокируется. Также проверьте, не меняются ли эти свойства программно в кодовой базе формы (например, в процедурах ПриЧтенииНаСервере или ПриОткрытии).
  3. Пустой список выбора. Если вы связали реквизит с элементом «Поле переключателя», но вообще не заполнили «Список выбора», элемент просто исчезнет с формы в режиме предприятия или отобразится в виде пустого места.

Лучшие практики работы с переключателями в 1С 8.3

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

← На главную