При разработке печатных форм в 1С:Предприятии часто возникает задача выделить часть текста в ячейке особым оформлением. Типичный пример: в фразе "По указанию [ФИОРуководителя]" словосочетание "По указанию" должно остаться обычным черным текстом, а подставляемая фамилия — стать красной или жирной. На первый взгляд кажется, что достаточно настроить свойства самого параметра, но на практике разработчики сталкиваются с жестким ограничением платформы.
В этой статье мы подробно разберем, почему стандартный механизм "Шаблона" не позволяет реализовать такое оформление, и изучим проверенные методы, которые помогут добиться нужного визуального результата.
Рассмотрим, как работает механизм Шаблон в ячейке табличного документа. Когда мы устанавливаем тип заполнения ячейки как Шаблон и пишем текст вида по указанию [ФИОРуководителя], платформа 1С воспринимает это как единую строковую конструкцию. В момент формирования печатной формы (при вызове метода Вывести() или Присоединить()) система просто заменяет текст в квадратных скобках на значение переменной.
Ключевая проблема заключается в том, что объект ОбластьЯчеекТабличногоДокумента обладает свойствами ЦветТекста и Шрифт, которые применяются ко всей ячейке целиком. В объектной модели 1С для табличного документа не предусмотрено возможности обратиться к конкретному символу или слову внутри ячейки, чтобы изменить его индивидуальные свойства. Как только параметр подставлен, результат становится монолитной строкой.
Таким образом, попытки программного кода вида Область.Параметры.ФИОРуководителя.Цвет = ЦветаСтиля.ОсобыйТекст являются ошибочными, так как параметр в данном контексте — это просто строковое значение, не имеющее собственных визуальных атрибутов.
Это самый надежный и распространенный способ, который используют профессиональные разработчики. Если мы не можем покрасить часть текста в одной ячейке, мы разделим этот текст на несколько соседних ячеек, каждая из которых будет иметь свое оформление.
Разберем этот метод по шагам:
Текст.ФИОРуководителя. Устанавливаем тип заполнения Параметр. Именно для этой ячейки в свойствах макета задаем нужный нам красный цвет или жирный шрифт.Линия (границы) в значение Нет линии для всех внутренних стыков.По правой границе, а для ячейки с параметром — По левой границе. Это позволит тексту "прижаться" друг к другу без лишних визуальных разрывов.Проанализируем ситуацию с переменной длиной текста. Главный минус этого метода — фиксированная ширина колонок. Если ФИО руководителя окажется длиннее, чем выделенная ячейка, текст может обрезаться или "наехать" на соседние области.
Чтобы избежать проблем с разной длиной ФИО, мы можем программно управлять шириной колонок в момент формирования отчета. Рассмотрим пример кода, который динамически подстраивает область под размер данных:
// Получаем область из макета
Область = Макет.ПолучитьОбласть("СтрокаРуководителя");
// Устанавливаем значение параметра
Область.Параметры.ФИОРуководителя = "Иванов Иван Иванович";
// Примерный расчет требуемой ширины (зависит от среднего размера шрифта)
КоличествоСимволов = СтрДлина(Область.Параметры.ФИОРуководителя);
ШиринаВЗнаках = КоличествоСимволов * 1.2; // Коэффициент подбирается опытным путем
// Устанавливаем ширину конкретной колонки, где находится параметр
// Допустим, параметр во второй колонке области
Область.Область(1, 2, 1, 2).ШиринаКолонки = ШиринаВЗнаках;
ТабДок.Вывести(Область);
Этот метод требует аккуратности, так как изменение ширины колонки в одной строке затронет весь табличный документ. Поэтому данный способ лучше всего работает, если отчет строится из множества мелких колонок (сетка), которые объединяются в нужных местах.
В платформе 1С существует объект ФорматированнаяСтрока, который позволяет хранить текст с разным оформлением. Его удобно использовать в формах (в декорациях или надписях). Однако, важно понимать: ячейка табличного документа не поддерживает тип "ФорматированнаяСтрока" напрямую.
Если вы попробуете присвоить в Область.Параметры.ИмяПараметра = НоваяФорматированнаяСтрока(...), система автоматически преобразует её в обычную строку, потеряв все цвета и шрифты. Поэтому данный метод применим только если вы выводите данные не в печатную форму .mxl, а, например, в поле HTML-документа на форме.
Если задача стоит максимально гибко оформить текст и печать планируется не через классический принтер 1С, а через браузер или специализированные формы, можно воспользоваться HTML-представлением. Разберем, как это работает:
В HTML мы можем обернуть любую часть строки в тег <span> с указанием стиля. Выясним, как это реализовать программно:
ТекстHTML = "<html><body>По указанию <span style='color:red; font-weight:bold;'>"
+ ФИОРуководителя
+ "</span></body></html>";
// Далее этот текст можно поместить в реквизит формы с типом "Строка",
// связанный с полем HTML-документа.
К сожалению, при попытке передать такой HTML-текст в ячейку макета 1С, пользователь увидит в распечатке сами теги вместо отформатированного текста. Поэтому данный метод является специфическим и подходит только для экранных форм или выгрузок во внешние файлы.
Если требования к оформлению печатной формы слишком высоки (например, сложные юридические договоры, где внутри абзаца нужно выделять цветом десятки разных параметров), стандартный табличный документ 1С становится слишком неудобным инструментом. В таких случаях мы рекомендуем использовать интеграцию с MS Word через COM-соединение.
В объектной модели Word можно найти текст по шаблону и заменить его, применив к объекту Range любые свойства оформления. Рассмотрим упрощенный алгоритм:
.dotx шаблона.Find.Execute для поиска строки-маркера (например, "{ФИОРуководителя}").Font.Color.Проанализируем минусы этого подхода: он требует наличия установленного Microsoft Office на компьютере и значительно замедляет скорость формирования документа по сравнению с родными макетами 1С.
Подводя итог, можно сказать, что в рамках стандартного макета 1С (ячейка типа Шаблон) реализовать разноцветный текст невозможно из-за архитектурных особенностей платформы.
Для решения задачи мы рекомендуем:
Мы надеемся, что эти способы помогут вам создать красивые и информативные печатные формы, соответствующие всем требованиям дизайна и корпоративного стиля вашей компании.