Как настроить отображение флажка в колонке табличного поля
Если в табличном поле есть колонка логического типа без элемента управления, по умолчанию в ней выводится текст, а не флажок. Ниже показано, как настроить колонку и какие события табличного поля обработать, чтобы флажок отображался и переключался по клику.
Пошаговое решение
В ситуациях, когда у табличного поля имеется колонка, не связанная с источником данных, и в ней необходимо хранить значения логического типа в виде установленного или сброшенного флажка, для этого следует настроить отображение данного флажка.
Решение.
Для указанной колонки необходимо установить тип значения булево и не использовать никакой элемент управления (в палитре свойств опцию "элемент управления" оставить пустой) и прописать следующий код в событиях табличного поля "ПриВыводеСтроки" и "ПриИзмененииФлажка":
// выключаем отображение текста и устанавливаем отображение флажка
Процедура ТабличноеПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.НазваниеКолонки.ОтображатьТекст = Ложь;
ОформлениеСтроки.Ячейки.НазваниеКолонки.ОтображатьФлажок = Истина;
ОформлениеСтроки.Ячейки.НазваниеКолонки.Флажок = ДанныеСтроки.НазваниеКолонки;
КонецПроцедуры
// изменяем соответствующие флажку данные
Процедура ТабличноеПолеПриИзмененииФлажка(Элемент, Колонка)
ТекСтрока = Элемент.ТекущиеДанные;
ТекСтрока.НазваниеКолонки = Не ТекСтрока.НазваниеКолонки;
КонецПроцедуры
Актуальность для новых версий
Описанный способ работает в обычных формах. В управляемых формах колонку таблицы формы связывают с реквизитом типа Булево и выбирают вид поля «Поле флажка» — флажок отображается и переключается без дополнительного кода. Для колонки, которой нет в источнике данных, добавляют реквизит в коллекцию формы (например, колонку таблицы значений).
Частые вопросы
Почему у колонки не нужно указывать элемент управления?
Если оставить элемент управления пустым, ячейка отображается только средствами оформления строки. Это позволяет в событии ПриВыводеСтроки отключить текст и включить отображение флажка.
Зачем нужен обработчик ПриИзмененииФлажка?
Клик по флажку сам по себе не меняет данные строки. В обработчике значение реквизита строки инвертируется, и при следующем выводе строки флажок отображается в новом состоянии.
Что подставить вместо «НазваниеКолонки»?
Имя колонки табличного поля и одноимённого поля в данных строки. В примере они совпадают, поэтому одно имя используется и в ОформлениеСтроки.Ячейки, и в ДанныеСтроки.