При разработке интерфейсов на управляемых формах 1С часто возникает задача динамического скрытия определенных элементов управления для конкретных строк табличной части. Самый очевидный путь — использование механизма условного оформления, однако при попытке установить Видимость = Ложь для колонки с типом «Флажок» мы сталкиваемся с неприятным побочным эффектом: платформа начинает некорректно отображать всю таблицу, вызывая сдвиги контента или исчезновение значений в соседних колонках. Давайте разберем, почему так происходит и как элегантно решить эту задачу.
Когда вы устанавливаете Видимость = Ложь через условное оформление, платформа 1С воспринимает это как изменение структуры представления таблицы в момент отрисовки. Поскольку табличная часть — это сложный UI-элемент, принудительное удаление ячейки из DOM-дерева интерфейса на лету может приводить к «ломанию» верстки. В управляемых формах лучше избегать манипуляций со структурой колонок, если это возможно, и использовать методы, которые просто ограничивают взаимодействие с элементом.
Наиболее надежным и архитектурно правильным способом скрыть флажок (или сделать его визуально неактивным для определенных условий) является использование свойства ТолькоПросмотр в настройках условного оформления. Вместо того чтобы «вырезать» колонку, мы сообщаем системе, что в данной строке флажок не должен быть доступен для редактирования. В большинстве случаев при значении «Ложь» флажок становится визуально «пустым» или скрытым в зависимости от настроек темы оформления и конкретной версии платформы.
Разберем по шагам, как настроить это в конфигураторе:
ТолькоПросмотр в значение Истина.МояКолонка = Ложь или проверка на определенное значение поля строки).Хотя метод ТолькоПросмотр = Истина является стандартным решением, важно понимать особенности его работы:
Истина, при установке свойства ТолькоПросмотр флажок все равно останется видимым, просто с ним нельзя будет взаимодействовать. Этот метод идеально подходит для случаев, когда нужно скрыть «пустые» флажки (со значением Ложь).ПриАктивизацииСтроки. Старайтесь придерживаться декларативного стиля настройки.Если задача требует более сложной логики (например, замены флажка на текст или другую картинку в зависимости от условий), мы можем использовать дополнительные приемы:
Рассмотрим вариант с программным управлением содержимым ячеек. Если условного оформления недостаточно, можно создать дополнительную колонку с типом Строка или Картинка и выводить в нее нужные данные вместо флажка. Однако такой подход требует написания кода в модуле формы:
// Пример программного управления выводом в таблице
&НаКлиенте
Процедура ТаблицаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.УсловиеСкрытия Тогда
ОформлениеСтроки.Ячейки.КолонкаФлажка.ОтображатьФлажок = Ложь;
КонецЕсли;
КонецПроцедуры
Мы настоятельно рекомендуем начинать именно с настройки ТолькоПросмотр через условное оформление. Это решение закрывает 90% запросов разработчиков, работающих с управляемыми формами, и исключает риск возникновения артефактов отрисовки интерфейса. Если же вы все-таки решите использовать программный подход, будьте готовы к необходимости тщательной отладки отображения во всех состояниях (при выделении строки, при редактировании и т.д.), так как поведение ОформлениеСтроки может отличаться в разных релизах платформы 1С:Предприятие 8.3.