Разработчики, привыкшие к гибкости Microsoft Excel, часто сталкиваются с задачей выделить отдельные слова в одной ячейке табличного документа 1С разными цветами. Типовой пример: «Продано 10 штук», где число должно быть красным, а остальной текст — черным. Однако в платформе «1С:Предприятие» свойство ЦветТекста применяется ко всему объекту ОбластьЯчеек целиком. В этой статье мы подробно разберем, как обойти это ограничение, проанализируем доступные методы и выберем оптимальный вариант в зависимости от ваших целей (печать или отображение на форме).
Прежде всего, выясним причину: объект ТабличныйДокумент в 1С спроектирован как сетка, где каждая ячейка имеет единый набор свойств оформления. В отличие от текстовых процессоров, ячейка 1С не поддерживает внутреннюю разметку (как HTML или RTF) на уровне свойства Текст. Если вы установите цвет для области, он изменит все содержимое. Поэтому нам придется использовать «обходные пути».
Проанализируем ситуацию, когда нам крайне важно сохранить структуру таблицы, но вывести разноцветный текст. Один из самых надежных способов для печатных форм — использование коллекции Рисунки табличного документа. Вместо того чтобы записывать текст непосредственно в ячейку, мы создаем прозрачную надпись поверх неё.
Рассмотрим алгоритм реализации по шагам:
РисунокТабличногоДокумента.ТипРисункаТабличногоДокумента.Текст.Посмотрим на пример кода, который иллюстрирует логику добавления такой надписи:
// Пример добавления текстового рисунка поверх ячейки
ТабДок = Новый ТабличныйДокумент;
Область = ТабДок.Область("R1C1");
// Создаем рисунок
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Рисунок.Текст = "Красное слово";
Рисунок.ЦветТекста = ЦветаСтиля.ОсобыйТекст; // Красный
Рисунок.ГраницаСверху = Ложь;
Рисунок.ГраницаСлева = Ложь;
Рисунок.ГраницаСправа = Ложь;
Рисунок.ГраницаСнизу = Ложь;
// Указываем координаты (в миллиметрах или привязкой к ячейкам)
Рисунок.Расположить(Область);
Важный момент: Этот метод требует точного расчета ширины каждого слова в пикселях или миллиметрах, чтобы слова не «наезжали» друг на друга. Это трудозатратно, но позволяет добиться идеального результата при печати.
Разберем более простой, «классический» метод. Если структура отчета позволяет, мы можем сильно уменьшить ширину колонок (сделать «миллиметровку») и выводить каждое слово в отдельную ячейку. Соседние ячейки будут выглядеть как одна, если убрать границы между ними.
Проанализируем преимущества этого подхода:
ЦветТекста через обычные свойства оформления.При использовании этого метода мы просто объединяем ячейки там, где текст однородный, и оставляем разделенными там, где требуется разный цвет.
Если ваша задача — показать пользователю красивую таблицу в интерфейсе (а не распечатать её), то лучшим решением будет использование Поля HTML-документа. В HTML-разметке раскрашивание отдельных слов является стандартной задачей.
Выясним, как это реализовать:
Строка и перетащите его на форму, выбрав вид «Поле HTML-документа».<table>.<td> используйте теги <span> с атрибутом style.Пример формирования текста для такого поля:
ТекстHTML = "<html><body>
|<table border='1'>
| <tr>
| <td>Обычный текст <span style='color:red;'>КРАСНЫЙ</span> снова обычный</td>
| </tr>
|</table>
|</body></html>";
ЭтаФорма.РеквизитПолеHTML = ТекстHTML;
Этот способ позволяет использовать всю мощь CSS для оформления: жирность, курсив, подчеркивание и любые цвета в рамках одной строки.
Рассмотрим продвинутый метод для версий платформы 8.3. Объект ФорматированныйДокумент позволяет работать с текстом разного оформления. Хотя его нельзя напрямую вставить в ячейку табличного документа, его можно преобразовать в картинку.
Алгоритм действий:
ФорматированныйДокумент.ПолучитьHTML() или механизмы рендеринга (через временные файлы), чтобы получить изображение этого текста.Рисунок табличного документа, как мы разбирали в Способе 1.Это позволяет обойти проблему ручного расчета координат каждого слова, так как движок форматированного документа сам расставит слова правильно.
Если отчет в конечном итоге должен быть в формате Excel, проанализируем вариант постобработки. Вы можете сохранить стандартный табличный документ 1С в файл .xlsx, а затем открыть его через COM-соединение и применить форматирование к конкретным символам в ячейке.
Пример логики на языке 1С:
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Open("C:\отчет.xlsx");
Лист = Книга.Sheets(1);
Ячейка = Лист.Cells(1, 1);
// Раскрашиваем символы с 5-го по 10-й в красный цвет (код цвета 255)
Ячейка.Characters(5, 5).Font.Color = 255;
Книга.Save();
Excel.Quit();
Важно: Данный метод требует наличия установленного Microsoft Excel на сервере или клиенте (в зависимости от места выполнения кода) и работает медленнее остальных вариантов.
Мы выяснили, что прямой поддержки многоцветного текста в одной ячейке ТабличногоДокумента нет, но мы нашли пять рабочих инструментов для решения этой задачи. Для печати наиболее профессиональным является метод с использованием графических объектов-надписей или измельчение сетки. Для интерфейса — использование HTML-полей. Выбор метода зависит от сложности вашего макета и требований к производительности системы.