При верстке макетов печатных форм и отчетов в табличных документах (MXL) разработчики часто сталкиваются с ситуацией, когда длинный текст не помещается в ячейку стандартной ширины. В текстовых процессорах вроде Microsoft Word эту проблему можно решить путем горизонтального сжатия текста или уменьшения межзнакового интервала (трекинга). Разберем, почему аналогичный эффект не получается получить стандартными средствами 1С и какие решения существуют для данной задачи.
Проанализируем работу графического движка табличных документов платформы «1С:Предприятие». В объекте Шрифт и в редакторе табличных документов MXL отсутствуют параметры для прямого управления трекингом (межсимвольным интервалом), горизонтальным сжатием (масштабированием текста по оси X) или межстрочным интервалом.
Платформа 1С выполняет вывод текста через базовый интерфейс рендеринга шрифтов операционной системы (GDI). В отличие от специализированных графических редакторов или текстовых процессоров, 1С меняет только размер шрифта (кегль в пунктах), но не его пропорции и плотность. При масштабировании изменяются и высота, и ширина букв одновременно.
Самый простой и стандартный вариант решения проблемы внутри табличного документа 1С — применение специально разработанных узких гарнитур. Такие шрифты имеют в своем названии пометку Condensed или Narrow.
Рассмотрим порядок действий для настройки печатной формы:
Condensed).Шрифт.При этом подходе символ сохраняет естественные пропорции графики, но занимает существенно меньше места по ширине ячейки.
Если печатная форма отображается в форме отчета или выводится во внутреннем окне, её можно сформировать на базе CSS и HTML-верстки. В веб-технологиях параметры плотности текста поддерживаются нативно.
Разберем основные свойства CSS, которые позволяют гибко управлять текстом:
letter-spacing — напрямую задает межзнаковый интервал (например, letter-spacing: -1px; для уплотнения).font-stretch или трансформация transform: scaleX(0.8) — позволяет сжать текст по горизонтали без изменения его высоты.Сформированный HTML-код выводится в элемент формы ПолеHTMLДокумента, откуда при необходимости также доступна стандартная печать.
Если бизнес-требования жестко регламентируют плотность текста и межсимвольный интервал, печатную форму генерируют программно с помощью внешних редакторов.
Посмотрим на пример использования COM-соединения с Microsoft Word из кода 1С:
Через объект Word.Application доступно прямое управление параметрами шрифта. В коде 1С можно обращаться к свойствам выделенного фрагмента Font.Spacing (межсимвольный интервал) и Font.Scaling (горизонтальное масштабирование в процентах).
Если задача заключается исключительно в том, чтобы длинный текст гарантированно поместился в ячейку фиксированной ширины без выхода за границы, применяют алгоритм программного уменьшения размера шрифта.
Перед выводом ячейки в результирующий табличный документ проверяется высота или ширина выводимой области. Если текст вылезает за пределы, размер шрифта уменьшается на несколько пунктов до тех пор, пока строка не впишется в заданные границы.
При выборе варианта с установкой сторонних сжатых шрифтов (Condensed) необходимо учитывать особенности инфраструктуры 1С: