Как программно выводить текст разного цвета в форме 1С?

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

В процессе разработки часто возникает задача визуального разделения информации в интерфейсе. Например, при выполнении групповой обработки документов пользователю важно сразу видеть результат: успешно обработанные строки должны быть выделены зеленым цветом, а ошибки — красным. Попытка изменить цвет обычного строкового реквизита целиком не дает нужного результата, так как в многострочном поле нам нужно раскрасить лишь отдельные фрагменты текста. В данной статье мы разберем несколько эффективных способов решения этой задачи в среде «1С:Предприятие 8».

Способ 1. Использование объекта «ФорматированнаяСтрока»

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

Разберем алгоритм реализации:

  1. На форме создадим реквизит с типом Произвольный (или просто будем использовать программную переменную).
  2. Добавим на форму элемент типа Поле декорации (вид — Поле надписи).
  3. В программном коде сформируем массив элементов, из которых будет состоять итоговая строка.

Рассмотрим пример кода, который решает задачу автора темы:


// Создаем массив для хранения частей форматированной строки
ЧастиСтроки = Новый Массив;

// Добавляем успешное событие (зеленый цвет)
ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока("По документу " + ДокументЗаказ + " полная оплата", , WebЦвета.Зеленый));
ЧастиСтроки.Добавить(Символы.ПС);

// Добавляем сообщение об ошибке (красный цвет)
ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(ДокументЗаказ + " не был записан.", , WebЦвета.Красный));

// Собираем итоговый объект и присваиваем его элементу формы
Элементы.ПолеДекорацииРезультат.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки);

Важное ограничение: объект ФорматированнаяСтрока не предназначен для хранения в базе данных в обычных реквизитах типа «Строка». Он используется исключительно для визуализации данных на форме здесь и сейчас.

Способ 2. Использование Поля табличного документа

Если лог событий предполагается очень длинным или пользователю может потребоваться скопировать отдельные части текста в Excel, лучше всего использовать Поле табличного документа. Это наиболее профессиональный подход для вывода технических протоколов.

Проанализируем преимущества этого метода:

Выясним, как это реализовать программно:


// Очищаем табличный документ на форме
ТабДок = Элементы.РезультатЛога;
ТабДок.Очистить();

// Пример вывода успешной записи
Область = ТабДок.Область(ТабДок.ВысотаТаблицы + 1, 1);
Область.Текст = "Документ " + ДокументЗаказ + " успешно обработан";
Область.ЦветТекста = WebЦвета.Зеленый;

// Пример вывода ошибки
ОбластьОшибки = ТабДок.Область(ТабДок.ВысотаТаблицы + 1, 1);
ОбластьОшибки.Текст = "Ошибка при записи документа " + ДокументЗаказ;
ОбластьОшибки.ЦветТекста = WebЦвета.Красный;

Способ 3. Использование Поля HTML-документа

Когда требуется максимально гибкий дизайн (например, использование разных шрифтов, отступов или даже иконок внутри лога), на помощь приходит Поле HTML-документа. Мы можем программно сформировать HTML-код и отобразить его пользователю.

Разберем по шагам, как сформировать такой текст:

Сначала подготовим строковую переменную, в которую будем «собирать» наш HTML-код. Используем стандартные теги span с атрибутом style для управления цветом.


ТекстHTML = "<html><body>";
ТекстHTML = ТекстHTML + "<div style='color: green;'>Успешно: Документ №123</div>";
ТекстHTML = ТекстHTML + "<div style='color: red;'>Ошибка: Недостаточно прав для проведения документа №124</div>";
ТекстHTML = ТекстHTML + "</body></html>";

// Присваиваем реквизиту формы, связанному с полем HTML
РеквизитТекстHTML = ТекстHTML;

Этот метод считается более «тяжелым» для платформы, но он незаменим, если вы хотите добиться безупречного внешнего вида отчета.

Способ 4. Таблица значений с условным оформлением

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

Рассмотрим порядок действий:

  1. Создаем таблицу на форме с колонками: «Сообщение» (строка) и «Статус» (число: 0 — успех, 1 — ошибка).
  2. Заходим в свойства формы, вкладка «Условное оформление».
  3. Добавляем новое правило:
    • Оформление: Цвет текста — Красный.
    • Условие: Статус Равно 1.
    • Оформляемые поля: Сообщение.
  4. Аналогично создаем правило для статуса 0 (Зеленый цвет).

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

Резюме и рекомендации

Выбор метода зависит от ваших конкретных целей:

Помним, что удобство пользователя напрямую зависит от читаемости предоставляемой информации. Использование цвета — отличный способ акцентировать внимание на критических ошибках, не заставляя человека вчитываться в каждую строку монохромного текста.

← На главную