Долгое время в платформе 1С:Предприятие существовало жесткое ограничение: одна ячейка табличного документа могла иметь только один набор параметров оформления. Если вам требовалось выделить одно слово жирным шрифтом внутри длинного предложения или раскрасить артикул в другой цвет, не меняя цвет остального текста, программистам приходилось прибегать к сложным ухищрениям. Однако с развитием платформы ситуация изменилась. В этой статье мы подробно разберем, как реализовать разное форматирование текста в одной ячейке, используя современные возможности и проверенные временем обходные пути.
Начиная с версии платформы 8.3.23, разработчики получили долгожданный инструмент — поддержку типа ФорматированнаяСтрока непосредственно в ячейках табличного документа. Это самый правильный и эффективный способ решения задачи на сегодняшний день.
Проанализируем, как это работает на практике. Вместо того чтобы присваивать ячейке обычную строку, мы создаем сложный объект, который содержит части текста с разными свойствами. Рассмотрим пример кода, в котором мы выводим в одну ячейку текст с разным начертанием:
// Создаем части форматированной строки
Часть1 = "Товар: ";
ШрифтЖирный = Новый Шрифт(,, Истина); // Жирный шрифт
Часть2 = Новый ФорматированнаяСтрока("Колбаса Докторская", ШрифтЖирный, ЦветаСтиля.ПоясняющийТекст);
Часть3 = " (в наличии)";
// Собираем итоговую форматированную строку в массив
МассивЧастей = Новый Массив;
МассивЧастей.Добавить(Часть1);
МассивЧастей.Добавить(Часть2);
МассивЧастей.Добавить(Часть3);
ИтоговаяСтрока = Новый ФорматированнаяСтрока(МассивЧастей);
// Выводим в табличный документ
Область = ТабДок.Область("R1C1");
Область.Текст = ИтоговаяСтрока;
Разберем по шагам, что произошло в этом коде. Мы использовали конструктор объекта ФорматированнаяСтрока, который может принимать массив. Каждым элементом массива может быть либо обычная строка (она примет оформление ячейки по умолчанию), либо другой объект ФорматированнаяСтрока, имеющий свои настройки Шрифт, ЦветТекста или ЦветФона. Для практического изучения механики преобразования текста подойдёт пример работы с форматированным документом и строками.
Важно помнить, что при использовании этого метода 1С автоматически корректно экспортирует такое форматирование в форматы PDF и XLSX, что ранее было практически невозможно при использовании хаков.
Если ваша платформа ниже версии 8.3.23, или вам требуется еще более гибкое позиционирование, можно использовать механизм графических объектов типа Текст. Суть метода заключается в том, что поверх ячеек "накладывается" невидимый графический контейнер, внутри которого располагается текст.
Рассмотрим алгоритм реализации этого метода:
Проанализируем программное управление таким объектом:
// Получаем область с рисунком
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаДанных");
РисунокТекст = ОбластьМакета.Рисунки.Текст1; // Имя рисунка в макете
// Устанавливаем текст
РисунокТекст.Текст = "Динамическое описание";
// Мы можем управлять свойствами самого рисунка, но внутри него текст все еще монолитный.
// Однако мы можем наложить НЕСКОЛЬКО рисунков друг на друга с микро-смещением.
Важное ограничение: Использование рисунков сильно усложняет динамическое расширение строк. Если текст внутри рисунка не помещается, ячейка под ним автоматически не растянется. Вам придется программно вычислять высоту текста и изменять высоту строки и размер рисунка.
Как упоминалось в обсуждении на форуме, одним из вариантов является использование HTML. Табличный документ 1С позволяет вставлять содержимое в формате HTML. Выясним причину, почему это иногда удобно: HTML позволяет использовать теги <b>, <i>, <span style="...">, что дает практически неограниченные возможности оформления.
Для реализации этого метода в ячейке макета нужно установить тип значения "Содержимое HTML". Однако у этого способа есть существенные минусы:
В старых конфигурациях или специфических задачах (например, печать ярлыков с составом продукции) разработчики использовали "визуальные хаки". Например, подчеркивание отдельных слов с помощью символов нижнего подчеркивания на второй строке или использование специальных шрифтов-символов.
Рассмотрим ситуацию, когда нужно выделить слово подчеркиванием в версии платформы 8.2:
"_".Конечно, этот метод крайне трудозатратен и считается "костылем", но в условиях отсутствия ФорматированнойСтроки он позволял добиваться нужного визуального результата на печатных формах.
Подводя итог нашему анализу, дадим несколько практических советов:
Во-первых, если у вас есть возможность обновить платформу до версии 8.3.23 или выше — сделайте это. Объект ФорматированнаяСтрока в ячейках решает 99% задач по выделению текста, сохраняя при этом производительность и корректность экспорта в сторонние форматы.
Во-вторых, при формировании сложных отчетов в СКД (Система компоновки данных), помните, что вы также можете возвращать из функций общих модулей объекты типа ФорматированнаяСтрока. СКД поймет этот тип и применит оформление в итоговом отчете автоматически.
В-третьих, всегда проверяйте, как ваше форматирование выглядит при предварительном просмотре печати. HTML-поля и рисунки могут вести себя непредсказуемо в зависимости от установленного в системе драйвера принтера.
Мы надеемся, что этот подробный разбор поможет вам создавать красивые и информативные печатные формы в 1С!