При разработке управляемых форм в платформе 1С:Предприятие 8.3 начинающие разработчики часто сталкиваются с ситуацией, когда при попытке узнать состояние флажка на форме система выдает ошибку «Невозможно преобразование к типу Булево» или «Переменная не определена». Рассмотрим подробно, как устроена работа с данными в управляемом интерфейсе, почему нельзя брать данные из элементов формы напрямую и как правильно обращаться к значениям флажков.
Главный принцип работы управляемых форм 1С заключается в четком разделении визуального интерфейса и данных. Разберем основную концепцию:
Истина / Ложь). Все операции по чтению и изменению данных выполняются только через реквизиты.ЭтаФорма.Элементы содержит визуальные объекты (например, ПолеФормы). Элементы сами по себе данные не хранят. У элемента формы может не быть реквизита, а у реквизита может не быть элемента на форме, если его не нужно показывать пользователю.Когда в коде выполняется обращение вида ЭтаФорма.Элементы.ИмяЭлемента, платформа возвращает объект управления графическим интерфейсом (ПолеФормы). При попытке использовать его в условии Если Элементы.Флажок Тогда 1С сообщает о невозможности приведения типа ПолеФормы к типу Булево.
Если обращение происходит напрямую по имени (например, Если ВыводитьИсполнителя Тогда), но платформа выдает ошибку о том, что переменная не определена, проанализируем структуру реквизитов формы в Конфигураторе:
ИмяРеквизита.Объект для документа/справочника или Отчет для внешнего отчета), к нему нужно обращаться через родительский объект: Объект.ИмяРеквизита или Отчет.ИмяРеквизита.Вариант 1. Обращение к реквизиту формы
Если флажок связан с собственным реквизитом формы верхнего уровня, обращаемся к нему напрямую по имени реквизита:
&НаКлиенте
Процедура ВыводитьИсполнителяПриИзменении(Элемент)
Если ВыводитьИсполнителя Тогда
Сообщить("Исполнитель будет выведен в отчет");
Иначе
Сообщить("Вывод исполнителя отключен");
КонецЕсли;
КонецПроцедуры
Вариант 2. Обращение к реквизиту объекта или отчета
Если элемент формы связан с реквизитом объекта (документа, справочника) или отчета, используем имя соответствующего родительского реквизита:
&НаКлиенте
Процедура ВыводитьИсполнителяПриИзменении(Элемент)
// Для формы документа или справочника:
Если Объект.ВыводитьИсполнителя Тогда
// Выполняем действия
КонецЕсли;
// Для формы отчета:
Если Отчет.ВыводитьИсполнителя Тогда
// Выполняем действия
КонецЕсли;
КонецПроцедуры
Чтобы быстро найти причину ошибки и получить значение флажка, выполним следующие шаги в редакторе формы Конфигуратора:
DataPath).ВыводитьИсполнителя, в коде пишем ВыводитьИсполнителя.Объект.ВыводитьИсполнителя, в коде пишем Объект.ВыводитьИсполнителя.Отчет.ВыводитьИсполнителя, в коде пишем Отчет.ВыводитьИсполнителя.Булево на вкладке «Реквизиты» (справа вверху) и перетащим его на элемент или укажем его в свойстве «Путь к данным».