При формировании печатных форм и отчетов часто возникает задача выделить жирным шрифтом постоянную часть строки (заголовок или пояснение), а значение заполняемого параметра оставить обычным начертанием. Рассмотрим, почему возникает эта сложность и какими способами можно реализовать разное оформление текста в рамках одной ячейки табличного документа в платформе 1С:Предприятие.
Проанализируем базовый принцип работы табличного документа. В классической модели свойства оформления (шрифт, цвет текста, размер, начертание) задаются не для отдельных символов, а для всей ячейки целиком. По этой причине при использовании типа заполнения ячейки Шаблон весь результирующий текст принимает единые настройки шрифта, заданные в палитре свойств.
Начиная с версии платформы 8.3.24, разработчики получили штатный механизм для решения этой проблемы. В табличных документах появилась прямая поддержка типа ФорматированнаяСтрока для ячеек.
Выясним, как это работает. Свойство Текст у объекта ОбластьЯчеекТабличногоДокумента теперь может принимать не только обычную строку, но и ФорматированнаяСтрока. Если в макете ячейка настроена как Параметр, в коде модуля можно передать в этот параметр составную форматированную строку.
Разберем по шагам пример формирования такой строки в коде:
// Создаем фрагменты строки с нужными шрифтами
ШрифтЖирный = Новый Шрифт(,, Истина);
ШрифтОбычный = Новый Шрифт(,, Ложь);
Фрагмент1 = Новый ФорматированнаяСтрока("Покупатель: ", ШрифтЖирный);
Фрагмент2 = Новый ФорматированнаяСтрока(Выборка.НаименованиеКонтрагента, ШрифтОбычный);
// Объединяем фрагменты в одну форматированную строку
МассивФрагментов = Новый Массив;
МассивФрагментов.Добавить(Фрагмент1);
МассивФрагментов.Добавить(Фрагмент2);
ИтоговаяСтрока = Новый ФорматированнаяСтрока(МассивФрагментов);
// Передаем значение в параметр области макета
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.ПокупательФорматированный = ИтоговаяСтрока;
ТабличныйДокумент.Вывести(ОбластьСтрока);
Важное ограничение: поддержка форматированных строк в табличном документе работает только в том случае, если режим совместимости конфигурации (или расширения) установлен не ниже 8.3.24. Если режим совместимости ниже, платформа автоматически преобразует форматированную строку в обычный текст без сохранения начертаний.
Если конфигурация работает в режиме совместимости ниже 8.3.24, рассмотрим классический вариант обхода — физическое разделение текста на две соседние ячейки макета:
Ограничение метода: если текст параметра не помещается по ширине, стандартное свойство РазмещениеТекста.Переносить будет переносить строки только в пределах правой ячейки. Текст не сможет автоматически продолжить заполнение под левой ячейкой на следующей строке.
Если требуется вывести большой абзац текста (например, преамбулу или условия договора), где жирные и обычные фрагменты чередуются, а также необходим плавный перенос строк по всей ширине, рассмотрим вариант перехода на HTML-разметку:
<b>, <span>, <p>).ФорматированныйДокумент или элемент формы ПолеHTMLДокумента.Для сложных печатных форм договоров, соглашений и заявлений отличной альтернативой табличному документу выступают макеты на основе документов Microsoft Word (DOCX) или OpenDocument (ODT). В текстовых процессорах сквозной перенос строк и смешанное форматирование фрагментов внутри одного абзаца работают на уровне стандарта формата и не вызывают трудностей при заполнении параметров.