Как окрасить часть текста в ячейке таблицы на форме 1С

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

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

Метод 1. Использование поля HTML-документа

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

Во-первых, в составе колонок вашей таблицы (будь то ТаблицаЗначений или ДинамическийСписок) необходимо изменить тип элемента формы, отображающего данные. Вместо «Поля надписи» или «Поля ввода» выберите Поле HTML-документа.

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


// Пример формирования текста с выделением
ТекстПеред = "Остаток на складе: ";
ВыделенныйТекст = "150 шт.";
ТекстПосле = " (в резерве 10)";

ЯчейкаHTML = "<html><body style='margin:0; padding:2px; font-family:Arial; font-size:10pt;'>" 
             + ТекстПеред 
             + "<span style='color:red; font-weight:bold;'>" + ВыделенныйТекст + "</span>" 
             + ТекстПосле 
             + "</body></html>";

Важные нюансы метода:

  1. Производительность: Помните, что для каждой отрисованной ячейки платформа инициализирует объект рендеринга. Если в вашей таблице одновременно отображается более 50-100 строк, интерфейс может начать «подтормаживать» при прокрутке.
  2. Стилизация: Чтобы текст в HTML-поле не выбивался из общего дизайна формы, обязательно указывайте системные шрифты и отступы (padding) в стиле body.
  3. Интерактивность: Выделение строки в таблице может работать некорректно, так как клик будет перехватываться внутренним полем HTML.

Метод 2. Визуальная имитация через разделение колонок

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

Разберем алгоритм действий по шагам:

  1. Разделите исходную строку на части в коде (например, при заполнении ТаблицыЗначений на сервере).
  2. Разместите эти части в соседних колонках таблицы формы.
  3. В свойствах таблицы снимите флажки Горизонтальные линии и Вертикальные линии (или используйте настройку «Отображать линии» — «Нет»).
  4. Для конкретной колонки, которую нужно выделить, настройте стандартное Условное оформление, задав нужный цвет текста или фона.

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

Метод 3. Динамическая генерация SVG-подложки

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

Проанализируем ситуацию: нам нужно подкрасить только первые 5 символов. Мы можем сгенерировать строку в формате base64, представляющую собой SVG-изображение с прямоугольником нужного цвета. Чтобы изображение растягивалось, используйте параметр preserveAspectRatio="none" в заголовке SVG-кода.


// Примерная структура SVG для фона части ячейки
// <svg width="100" height="20" preserveAspectRatio="none" ...>
//   <rect x="0" y="0" width="30" height="20" fill="yellow" />
// </svg>

Эту картинку можно установить в свойство ячейки КартинкаФона. Текст 1С будет наложен поверх этой картинки. Это позволяет сохранить возможность поиска и копирования текста, в отличие от метода с полным HTML.

Метод 4. Использование специальных символов и шрифтов

Рассмотрим еще один интересный вариант — использование символов Unicode или иконочных шрифтов типа FontAwesome. Если вам нужно не просто изменить цвет, а акцентировать внимание на части текста, можно программно добавлять спецсимволы (маркеры, точки, стрелки) непосредственно в строку.

Пример использования символов юникода:


ТекстЯчейки = "● " + "Важный статус " + " (обычный текст)";
// Символ ● (код 25CF) будет отображаться в ячейке. 
// С помощью условного оформления можно покрасить всю строку, 
// если в ней присутствует этот символ.

Выводы и рекомендации

Подводя итоги нашего анализа, можно выделить следующие рекомендации:

Выбор конкретного метода зависит от архитектуры вашей формы и требований к производительности. Надеемся, что рассмотренные подходы помогут вам создать удобный и визуально понятный интерфейс для ваших пользователей.

← На главную