Как сделать два флажка взаимоисключающими на форме в 1С 7.7?

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

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

Особенности работы с флажками в 1С 7.7

Прежде чем перейти к написанию выражений, проанализируем специфику платформы 1С 7.7:

  1. Тип данных: В 1С 7.7 флажки (чекбоксы) связываются с числовыми переменными. Значение 1 соответствует установленному флажку, а значение 0 — снятому. Булевы литералы Истина и Ложь в этой версии платформы отсутствуют.
  2. Свойство «Формула» элемента диалога: В свойствах элемента управления на вкладке «Дополнительно» можно указать либо имя процедуры модуля формы, либо короткое исполняемое выражение на встроенном языке.
  3. Отрисовка формы: При изменении значений переменных через формулы элементов форма не всегда автоматически обновляет отображение соседних элементов без явного вызова перерисовки.

Вариант 1. Использование условного оператора «?» прямо в формуле элемента диалога

Разберем вариант, когда изменение значения требуется описать непосредственно в свойствах элементов управления без написания отдельных процедур в модуле формы. Для этого применяется встроенный тернарный условный оператор ?().

Логика работы должна быть следующей: если пользователь устанавливает текущий флажок в значение 1, соседний флажок должен принудительно сбрасываться в 0. Если же пользователь снимает текущий флажок (устанавливает 0), состояние соседнего флажка изменяться не должно (чтобы оставалась возможность оставить оба флажка выключенными).

Пропишем выражения в свойствах элементов:

  1. В поле «Формула» для элемента Чек1 указываем выражение: Чек2 = ?(Чек1 = 1, 0, Чек2)
  2. В поле «Формула» для элемента Чек2 указываем симметричное выражение: Чек1 = ?(Чек2 = 1, 0, Чек1)

Также можно использовать альтернативную проверку суммы значений. Если оба флажка оказались взведены (сумма равна 2), соседний флажок сбрасывается:

  1. В формуле флажка Чек1: Чек2 = ?(Чек1 + Чек2 = 2, 0, Чек2)
  2. В формуле флажка Чек2: Чек1 = ?(Чек1 + Чек2 = 2, 0, Чек1)

Вариант 2. Обработка переключения через процедуры модуля формы

Использование выражений в формуле имеет существенный недостаток: при программном изменении зависимой переменной второй чекбокс на форме может визуально не перерисоваться до следующего клика или смены фокуса. Чтобы интерфейс обновлялся гарантированно и мгновенно, перенесем логику в модуль формы с вызовом метода Форма.Обновить().

Посмотрим на пример реализации с отдельными процедурами для каждого флажка:


Процедура ПриИзмененииЧек1()
    Если Чек1 = 1 Тогда
        Чек2 = 0;
    КонецЕсли;
    Форма.Обновить();
КонецПроцедуры

Процедура ПриИзмененииЧек2()
    Если Чек2 = 1 Тогда
        Чек1 = 0;
    КонецЕсли;
    Форма.Обновить();
КонецПроцедуры

В свойствах элемента Чек1 в поле «Формула» прописываем ПриИзмененииЧек1(), а в свойствах Чек2 — ПриИзмененииЧек2().

Если требуется объединить логику в одну универсальную процедуру, привяжем к обоим элементам общую процедуру-обработчик:


Процедура ПриВыбореФлага()
    // Проверяем, какой элемент был изменен в фокусе, либо проверяем совместное состояние
    Если (Чек1 = 1) И (Чек2 = 1) Тогда
        // Сбрасываем противоположный в зависимости от логики
        Чек2 = 0;
    КонецЕсли;
    Форма.Обновить();
КонецПроцедуры

Вариант 3. Использование стандартных переключателей (Radio buttons)

Выясним причину, почему в интерфейсах чаще применяют переключатели, а не флажки для взаимоисключающего выбора. Флажки визуально предполагают множественный выбор (каждый флажок независим), тогда как радиокнопки (переключатели) спроектированы именно для выбора одного варианта из группы.

Разберем по шагам, как настроить группу переключателей в 1С 7.7:

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

В этом случае переменная ВыбранныйВариант автоматически принимает значение 1 при выборе первой опции и 2 при выборе второй. Платформа самостоятельно управляет взаимоисключением без дополнительного кода и формул. Если потребуется программно сбросить выбор, чтобы ни один пункт не был активен, достаточно присвоить переменной ноль: ВыбранныйВариант = 0;.

← На главную