Как получить значение флажка (типа Булево) в форме 1С?

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

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

Архитектура управляемых форм: элементы против реквизитов

Главный принцип работы управляемых форм 1С заключается в четком разделении визуального интерфейса и данных. Разберем основную концепцию:

  1. Реквизиты (Данные) — хранят фактическую информацию. Реквизит формы или реквизит объекта (документа, справочника, отчета) содержит конкретное значение: число, строку или булево значение (Истина / Ложь). Все операции по чтению и изменению данных выполняются только через реквизиты.
  2. Элементы (Интерфейс) — отвечают исключительно за отображение данных на экране. Коллекция ЭтаФорма.Элементы содержит визуальные объекты (например, ПолеФормы). Элементы сами по себе данные не хранят. У элемента формы может не быть реквизита, а у реквизита может не быть элемента на форме, если его не нужно показывать пользователю.

Когда в коде выполняется обращение вида ЭтаФорма.Элементы.ИмяЭлемента, платформа возвращает объект управления графическим интерфейсом (ПолеФормы). При попытке использовать его в условии Если Элементы.Флажок Тогда 1С сообщает о невозможности приведения типа ПолеФормы к типу Булево.

Почему возникает ошибка «Переменная не определена»

Если обращение происходит напрямую по имени (например, Если ВыводитьИсполнителя Тогда), но платформа выдает ошибку о том, что переменная не определена, проанализируем структуру реквизитов формы в Конфигураторе:

  1. Если реквизит является самостоятельным реквизитом формы, он доступен напрямую по имени: ИмяРеквизита.
  2. Если реквизит входит в состав основного реквизита формы (например, Объект для документа/справочника или Отчет для внешнего отчета), к нему нужно обращаться через родительский объект: Объект.ИмяРеквизита или Отчет.ИмяРеквизита.

Способы получения значения флажка в коде

Вариант 1. Обращение к реквизиту формы

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


&НаКлиенте
Процедура ВыводитьИсполнителяПриИзменении(Элемент)
    Если ВыводитьИсполнителя Тогда
        Сообщить("Исполнитель будет выведен в отчет");
    Иначе
        Сообщить("Вывод исполнителя отключен");
    КонецЕсли;
КонецПроцедуры

Вариант 2. Обращение к реквизиту объекта или отчета

Если элемент формы связан с реквизитом объекта (документа, справочника) или отчета, используем имя соответствующего родительского реквизита:


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

    // Для формы отчета:
    Если Отчет.ВыводитьИсполнителя Тогда
        // Выполняем действия
    КонецЕсли;
КонецПроцедуры

Пошаговый чек-лист для проверки привязки флажка

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

  1. Откроем нужную форму и выделим элемент флажка в дереве элементов (слева вверху).
  2. В панели свойств элемента найдем строку Путь к данным (DataPath).
  3. Посмотрим, какой реквизит указан в качестве источника данных:
    • Если в поле написано ВыводитьИсполнителя, в коде пишем ВыводитьИсполнителя.
    • Если написано Объект.ВыводитьИсполнителя, в коде пишем Объект.ВыводитьИсполнителя.
    • Если написано Отчет.ВыводитьИсполнителя, в коде пишем Отчет.ВыводитьИсполнителя.
  4. Если поле Путь к данным пустое, элемент не связан с данными. Создадим реквизит формы с типом Булево на вкладке «Реквизиты» (справа вверху) и перетащим его на элемент или укажем его в свойстве «Путь к данным».
← На главную