Приветствуем всех разработчиков и специалистов, продолжающих поддерживать и развивать конфигурации на платформе 1С:Предприятие 7.7! Сегодня мы разберем одну крайне любопытную и классическую проблему интерфейса, с которой часто сталкиваются как начинающие программисты, так и опытные специалисты при редактировании старых форм. Речь пойдет о поведении элемента управления «Переключатель» (также известного как радиокнопка или RadioButton).
Представим типичную ситуацию: на форму добавляется группа из трех переключателей для выбора одного из трех вариантов (например, варианты 1, 2 и 3). Разработчик устанавливает у первого переключателя свойство «Первый в группе». Однако при тестировании формы в режиме «1С:Предприятие» выясняется странная вещь: переключение работает только между вторым и третьим вариантами. Если же выбрать первый вариант, то пометка (точка) с него не снимается, и в итоге на форме оказываются выбранными одновременно два варианта — первый и, например, третий. Давайте подробно проанализируем, почему так происходит, и выясним истинные причины этой интерфейсной аномалии.
Для того чтобы понять природу этой ошибки, нам необходимо заглянуть под капот платформы 1С:Предприятие 7.7 и вспомнить, как именно она обрабатывает группы переключателей. В отличие от современных управляемых форм версии 8.3, где переключатели жестко связываются через путь к данным и имя группы, в версии 7.7 механика работы с радиокнопками базируется на двух строгих правилах:
Если с первым пунктом разработчики обычно справляются без проблем, то второй пункт — порядок обхода — часто упускается из виду. Платформа 1С 7.7 объединяет переключатели в единую группу исключительно на основании их последовательности в списке порядка обхода. Группа начинается с элемента, у которого установлена галочка «Первый в группе», и продолжается по списку обхода до тех пор, пока платформа не встретит другой элемент управления (текстовое поле, рамку, кнопку, поле ввода или другой переключатель с признаком «Первый в группе»).
Если в эту последовательность номеров порядка обхода между вторым и третьим переключателем «вклинивается» любой другой объект (даже невидимый текст или фоновая рамка), целостность группы мгновенно нарушается. Третий переключатель начинает вести себя как самостоятельный элемент или отрывается от общей логики, что и приводит к ситуации, когда на форме загораются сразу две точки.
Давайте по шагам разберем процесс настройки элементов формы, который гарантирует безупречную работу переключателей любой вложенности.
Прежде всего, нам нужно убедиться в правильности заполнения свойств каждого элемента в нашей группе переключателей. Откроем свойства каждого из трех переключателей:
гзВыбор). Обязательно устанавливаем флажок «Первый в группе». В поле «Числовое значение» пишем 1.2.3.Теперь переходим к самому критическому этапу, из-за которого чаще всего и происходит сбой. Нам нужно выстроить наши три переключателя строго друг за другом в списке обхода.
...
Переключатель 1 (Первый в группе)
Переключатель 2
Переключатель 3
...
Чтобы при открытии формы переключатели сразу принимали корректное визуальное состояние, хорошей практикой является явная программная инициализация переменной группы в модуле формы. Рассмотрим простой пример кода в процедуре ПриОткрытии():
Процедура ПриОткрытии()
// Установим значение по умолчанию (выбираем первый вариант)
гзВыбор = 1;
КонецПроцедуры
Если в процессе работы нам потребуется полностью сбросить выбор со всех переключателей в группе, мы можем присвоить этой переменной нулевое значение:
// Сброс всех переключателей в группе
гзВыбор = 0;
При активной разработке мы часто прибегаем к быстрому копированию элементов через сочетания клавиш Ctrl+C и Ctrl+V. При копировании переключателей в 1С 7.7 скрываются две неочевидные проблемы:
ИспользоватьСлои()), помните важнейшее правило: все переключатели одной группы обязаны находиться на одном и том же слое. Попытка перенести один из переключателей на другой слой нарушит контекст их взаимодействия, и платформа не сможет корректно переключать их состояния.Таким образом, соблюдая эти несложные, но строгие правила проектирования интерфейсов в 1С:Предприятии 7.7, мы сможем гарантировать стабильную и предсказуемую работу любых групп переключателей на формах наших решений!