Как раскрасить заголовок колонки таблицы в разные цвета в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Иногда перед разработчиком встает нестандартная задача: сделать заголовок колонки таблицы в управляемой форме разноцветным (например, раскрасить буквы в разные цвета или выделить одно слово красным, а другое — зеленым). На первый взгляд кажется логичным использовать для этого объект ФорматированнаяСтрока. Давайте проанализируем ситуацию и разберем по шагам, почему этот подход не работает и какие существуют альтернативные решения.

Почему не работает ФорматированнаяСтрока в заголовке?

Посмотрим на пример кода, который часто пытаются использовать разработчики:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Элементы.ТЗКолонка.Заголовок = Новый ФорматированнаяСтрока(
        Новый ФорматированнаяСтрока("1", Новый Шрифт("Consolas"),, Новый Цвет(234, 11, 255)),
        Новый ФорматированнаяСтрока("2", Новый Шрифт("Consolas"),, Новый Цвет(1, 11, 255))
    );
КонецПроцедуры

Запуская этот код, мы видим, что платформа игнорирует заданные цвета. Дело в том, что в управляемых формах (и особенно в интерфейсе «Такси») платформа 1С жестко стандартизирует отрисовку списков и таблиц для сохранения единообразия дизайна. Когда свойству Заголовок элемента формы присваивается ФорматированнаяСтрока, внутренние механизмы платформы автоматически преобразуют ее в обычный текст.

Также разработчики часто вспоминают про условное оформление. Выясним причину, почему оно тоже не подходит для нашей задачи. Условное оформление позволяет программно или пользовательски изменить цвет текста, фона и шрифт для колонки, однако оно применяется ко всей ячейке целиком. Сделать с помощью этого механизма одно слово красным, а другое зеленым внутри одного заголовка невозможно.

Рассмотрим подробнее рабочие обходные пути решения этой задачи.

Решение 1: Использование свойства «КартинкаВШапке»

Если нам критически важно сохранить стандартную таблицу формы, мы можем заменить текст рисунком. У колонок таблицы формы есть штатное свойство КартинкаВШапке. Разберем этот подход:

  1. Очищаем стандартный текст заголовка у нужной колонки.
  2. Формируем или заранее рисуем картинку, на которой текст написан нужными нам цветами.
  3. Устанавливаем эту картинку в свойство колонки.

В современных версиях платформы мы можем формировать такие изображения даже программно. Используя объекты БуферВПамяти, ДвоичныеДанные и Картинка, можно сгенерировать битмап (изображение) с нужным текстом прямо в коде и передать его в заголовок.

Решение 2: Скрытие шапки и использование декораций или надписей

Если вариант с картинками кажется избыточным, рассмотрим другой способ конструирования интерфейса.

Мы можем отключить видимость стандартной шапки у таблицы. Для этого установим свойство ОтображениеШапки в значение Ложь. Над таблицей мы создаем обычную горизонтальную группу без отображения рамки и помещаем в нее элементы для имитации заголовков.

В качестве "заголовка" нужной колонки мы можем использовать:

  1. Набор элементов вида Декорация. Каждое слово или буква — отдельная декорация со своим цветом текста.
  2. Элемент вида Поле надписи. В отличие от заголовка таблицы, поле надписи корректно поддерживает тип данных ФорматированнаяСтрока. Мы можем программно передать в него строку с разными цветами и шрифтами, и платформа отобразит ее без искажений.

Решение 3: Радикальные способы (Поле HTML или Поле табличного документа)

Если требования к многоцветному оформлению охватывают всю таблицу и заказчику необходима сложная верстка, возможно, от стандартной таблицы 1С лучше отказаться совсем. Рассмотрим альтернативные элементы управления:

  1. Поле HTML-документа: Позволяет сверстать любую таблицу с помощью HTML и CSS. Обернув каждую букву или слово в отдельный тег с нужным атрибутом стиля, мы получаем абсолютный контроль над цветами, градиентами и тенями, недоступными в стандартном интерфейсе.
  2. Поле табличного документа: Размещенный на форме табличный документ предоставляет богатый арсенал оформления ячеек. В макете гораздо проще работать со шрифтами, частичным выделением текста, объединением ячеек и сложными границами.

Подводя итог, проанализируем выбор: если задача разовая — проще всего использовать картинку или отключить стандартную шапку, заменив её на Поле надписи с форматированной строкой. Если же цветастая таблица — это основная "фишка" вашей обработки, целесообразно перевести ее вывод в Поле HTML-документа.

← На главную