Почему в 1С 7.7 группа переключателей работает некорректно и как это исправить?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Приветствуем всех разработчиков и специалистов, продолжающих поддерживать и развивать конфигурации на платформе 1С:Предприятие 7.7! Сегодня мы разберем одну крайне любопытную и классическую проблему интерфейса, с которой часто сталкиваются как начинающие программисты, так и опытные специалисты при редактировании старых форм. Речь пойдет о поведении элемента управления «Переключатель» (также известного как радиокнопка или RadioButton).

Представим типичную ситуацию: на форму добавляется группа из трех переключателей для выбора одного из трех вариантов (например, варианты 1, 2 и 3). Разработчик устанавливает у первого переключателя свойство «Первый в группе». Однако при тестировании формы в режиме «1С:Предприятие» выясняется странная вещь: переключение работает только между вторым и третьим вариантами. Если же выбрать первый вариант, то пометка (точка) с него не снимается, и в итоге на форме оказываются выбранными одновременно два варианта — первый и, например, третий. Давайте подробно проанализируем, почему так происходит, и выясним истинные причины этой интерфейсной аномалии.

В чем кроется техническая причина проблемы?

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

  1. Свойства элемента управления (Идентификатор и признак группы).
  2. Порядок обхода (Tab Order) элементов на форме диалога.

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

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

Пошаговая инструкция по исправлению группы переключателей

Давайте по шагам разберем процесс настройки элементов формы, который гарантирует безупречную работу переключателей любой вложенности.

Шаг 1. Проверяем свойства каждого переключателя

Прежде всего, нам нужно убедиться в правильности заполнения свойств каждого элемента в нашей группе переключателей. Откроем свойства каждого из трех переключателей:

Шаг 2. Настраиваем порядок обхода вручную

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

  1. В конфигураторе откроем форму нашей обработки или документа.
  2. В верхнем меню выберем пункт Диалог, а затем перейдем в Настройка порядка обхода.
  3. В открывшемся окне со списком всех элементов формы в первую очередь необходимо отключить автоматический порядок. Снимем флажок «Автопорядок», если он установлен.
  4. Найдем в списке наши три переключателя. Нам нужно физически переместить их с помощью стрелок вверх/вниз так, чтобы они располагались строго друг за другом.
  5. Убедимся, что между ними нет никаких других строк — ни подписей (LText), ни рамок (Group Box), ни кнопок. Порядок должен выглядеть строго так:
    ...
    Переключатель 1 (Первый в группе)
    Переключатель 2
    Переключатель 3
    ...
  6. Нажимаем кнопку «ОК» для сохранения настроек порядка обхода.

Шаг 3. Инициализация переменной в коде

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


Процедура ПриОткрытии()
    // Установим значение по умолчанию (выбираем первый вариант)
    гзВыбор = 1;
КонецПроцедуры

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


// Сброс всех переключателей в группе
гзВыбор = 0;

Особые нюансы: Копирование элементов и Слои (Layers)

При активной разработке мы часто прибегаем к быстрому копированию элементов через сочетания клавиш Ctrl+C и Ctrl+V. При копировании переключателей в 1С 7.7 скрываются две неочевидные проблемы:

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

← На главную