Иногда перед разработчиком встает нестандартная задача: сделать заголовок колонки таблицы в управляемой форме разноцветным (например, раскрасить буквы в разные цвета или выделить одно слово красным, а другое — зеленым). На первый взгляд кажется логичным использовать для этого объект ФорматированнаяСтрока. Давайте проанализируем ситуацию и разберем по шагам, почему этот подход не работает и какие существуют альтернативные решения.
Посмотрим на пример кода, который часто пытаются использовать разработчики:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Элементы.ТЗКолонка.Заголовок = Новый ФорматированнаяСтрока(
Новый ФорматированнаяСтрока("1", Новый Шрифт("Consolas"),, Новый Цвет(234, 11, 255)),
Новый ФорматированнаяСтрока("2", Новый Шрифт("Consolas"),, Новый Цвет(1, 11, 255))
);
КонецПроцедуры
Запуская этот код, мы видим, что платформа игнорирует заданные цвета. Дело в том, что в управляемых формах (и особенно в интерфейсе «Такси») платформа 1С жестко стандартизирует отрисовку списков и таблиц для сохранения единообразия дизайна. Когда свойству Заголовок элемента формы присваивается ФорматированнаяСтрока, внутренние механизмы платформы автоматически преобразуют ее в обычный текст.
Также разработчики часто вспоминают про условное оформление. Выясним причину, почему оно тоже не подходит для нашей задачи. Условное оформление позволяет программно или пользовательски изменить цвет текста, фона и шрифт для колонки, однако оно применяется ко всей ячейке целиком. Сделать с помощью этого механизма одно слово красным, а другое зеленым внутри одного заголовка невозможно.
Рассмотрим подробнее рабочие обходные пути решения этой задачи.
Если нам критически важно сохранить стандартную таблицу формы, мы можем заменить текст рисунком. У колонок таблицы формы есть штатное свойство КартинкаВШапке. Разберем этот подход:
В современных версиях платформы мы можем формировать такие изображения даже программно. Используя объекты БуферВПамяти, ДвоичныеДанные и Картинка, можно сгенерировать битмап (изображение) с нужным текстом прямо в коде и передать его в заголовок.
Если вариант с картинками кажется избыточным, рассмотрим другой способ конструирования интерфейса.
Мы можем отключить видимость стандартной шапки у таблицы. Для этого установим свойство ОтображениеШапки в значение Ложь. Над таблицей мы создаем обычную горизонтальную группу без отображения рамки и помещаем в нее элементы для имитации заголовков.
В качестве "заголовка" нужной колонки мы можем использовать:
ФорматированнаяСтрока. Мы можем программно передать в него строку с разными цветами и шрифтами, и платформа отобразит ее без искажений.Если требования к многоцветному оформлению охватывают всю таблицу и заказчику необходима сложная верстка, возможно, от стандартной таблицы 1С лучше отказаться совсем. Рассмотрим альтернативные элементы управления:
Подводя итог, проанализируем выбор: если задача разовая — проще всего использовать картинку или отключить стандартную шапку, заменив её на Поле надписи с форматированной строкой. Если же цветастая таблица — это основная "фишка" вашей обработки, целесообразно перевести ее вывод в Поле HTML-документа.