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