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