Как обратиться к булеву элементу формы и проверить его значение в 1С 8.3

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

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

Разделение понятий: данные и элементы интерфейса

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

Рассмотрим, как устроена работа с булевыми значениями в управляемых и обычных формах.

Обращение к данным в управляемых формах (1С 8.3)

В управляемом интерфейсе коллекция Элементы предназначена исключительно для управления визуальными свойствами полей (такими как Видимость, Доступность, ТолькоПросмотр, ЦветТекста). У элементов формы в управляемом режиме отсутствует свойство Значение. Обращение к данным зависит от того, где именно объявлен реквизит.

  1. Реквизит принадлежит основному объекту (справочнику, документу)

    Если флаг привязан к реквизиту метаданных, обращение происходит через основной реквизит формы — Объект:

    
    Если Объект.МойБулевРеквизит Тогда
        // Действия, если флаг установлен (Истина)
        Элементы.ГруппаДополнительно.Видимость = Истина;
    Иначе
        // Действия, если флаг снят (Ложь)
        Элементы.ГруппаДополнительно.Видимость = Ложь;
    КонецЕсли;
    
  2. Реквизит создан непосредственно в самой форме

    Если булев реквизит добавлен на вкладке «Реквизиты» самой формы и не входит в состав метаданных объекта, к нему обращаются напрямую по имени или через контекст формы:

    
    Если МойРеквизитФормы Тогда
        // Выполняем необходимые манипуляции
    КонецЕсли;
    
    // Альтернативное явное обращение:
    ЭтаФорма.МойРеквизитФормы = Истина;
    
  3. Реквизит находится в строке табличной части

    Если флаг расположен внутри таблицы формы, обращение через Объект.ИмяРеквизита невозможно. В этом случае на клиенте получают данные текущей выделенной строки через свойство ТекущиеДанные:

    
    ТекущаяСтрока = Элементы.ТабличнаяЧасть.ТекущиеДанные;
    Если ТекущаяСтрока <> Неопределено И ТекущаяСтрока.ФлагАктивен Тогда
        // Обработка активной строки
    КонецЕсли;
    

Интерактивная реакция на изменение флага

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


&НаКлиенте
Процедура МойБулевРеквизитПриИзменении(Элемент)
    
    // В момент вызова события значение в данных формы уже обновлено
    Если Объект.МойБулевРеквизит Тогда
        Элементы.ПолеКомментарий.Доступность = Истина;
    Иначе
        Элементы.ПолеКомментарий.Доступность = Ложь;
    КонецЕсли;
    
    // Компактный вариант управления видимостью/доступностью:
    Элементы.ПолеКомментарий.Доступность = Объект.МойБулевРеквизит;
    
КонецПроцедуры

Динамическое обращение к реквизитам

Посмотрим на ситуацию, когда имя реквизита формируется динамически или передается в виде строки. В таком случае используют синтаксис квадратных скобок:


ИмяРеквизитаСтрокой = "МойБулевРеквизит";
ЗначениеФлага = Объект[ИмяРеквизитаСтрокой];

Если ЗначениеФлага Тогда
    // Выполнение манипуляций
КонецЕсли;

Если необходимо программно узнать, к какому именно источнику привязан визуальный элемент, обратимся к его свойству Элементы.ИмяЭлемента.ПутьКДанным.

Особенности обычных форм (обычный интерфейс 1С 8.2 / 8.3)

В обычном интерфейсе принципы работы отличаются. Здесь элемент управления формы содержит свойство Значение, через которое можно как читать, так и записывать данные:

  1. Через коллекцию элементов формы:

    
    Если ЭлементыФормы.МойБулевРеквизит.Значение = Истина Тогда
        // Условие выполнено
    КонецЕсли;
    

    Важно: этот способ работает только тогда, когда имя элемента управления совпадает с именем элемента в структуре формы.

  2. Прямое обращение к реквизиту объекта или формы:

    
    Если МойБулевРеквизит Тогда
        // Прямой доступ к реквизиту
    КонецЕсли;
    

Таким образом, для надежного и платформенно-корректного кода в управляемом приложении всегда обращаемся напрямую к структуре данных — Объект.ИмяРеквизита или ЭтаФорма.ИмяРеквизита.

← На главную