При работе с обработкой Печать ценников в старых конфигурациях, таких как УТ 10.3 (Внешние печатные формы для Управления торговлей 10.3), разработчики часто сталкиваются с проблемой: если текст номенклатуры не умещается в одну строку и переносится на следующую, расстояние между этими строками (интерлиньяж) выглядит либо слишком мелким, либо неоправданно большим. В отличие от текстовых редакторов, табличный документ 1С долгое время не имел прямого свойства для управления этим параметром. В данной статье мы подробно разберем, как решить эту задачу различными способами, начиная от классических «хитростей» с макетом и заканчивая современными возможностями платформы.
Прежде чем вносить изменения в логику формирования ценника (Редактирование печатных форм в программах 1С. Инструкция для пользователя), нам необходимо получить доступ к редактированию макета, если конфигурация находится на поддержке — есть редактор макетов печатных форм в пользовательском режиме. Рассмотрим этот процесс по шагам:
Конфигурация -> Поддержка -> Настройка поддержки.ПечатьЦенников.Макеты выберем нужный нам макет (например, Ценник).Важно: если мы просто растянем ячейку (Печать ценников с двумя ценами (УТ 10.3, КА 1.1, УПП 1.3)) по вертикали, это не изменит расстояние между строками текста внутри ячейки, а лишь увеличит свободное пространство снизу. Для изменения именно интервала перейдем к следующим методам.
Проанализируем ситуацию, когда стандартный перенос текста (свойство РазмещениеТекста -> Переносить) нас не устраивает по плотности строк. Популярным решением является «эмуляция» межстрочного интервала через добавление промежуточных пустых строк.
Разберем этот алгоритм:
ВысотаСтроки), мы фактически управляем визуальным разрывом между верхним и нижним блоком текста.Однако у этого метода есть существенный минус: программный код обработки должен уметь разбивать длинную строку на части и выводить их в разные области макета. В типовой УТ 10.3 это потребует модификации модуля обработки в процедуре печати.
Интересный способ решения проблемы заключается в использовании особенностей отрисовки шрифтов. Разберем ситуацию: каждый шрифт имеет встроенные параметры ascender (высота надстрочных знаков) и descender (глубина подстрочных знаков). Именно они определяют «внутренний» межстрочный интервал в ячейке 1С.
Рассмотрим рекомендации профессионалов:
Arial на Tahoma или Courier New — вы заметите, что при одной и той же высоте строки текст будет располагаться по-разному.В свойствах ячейки табличного документа есть параметр Вертикальное положение. Выясним причину, почему стандартное «По центру» часто не спасает:
Если мы установим значение Распределить (Distributed), 1С попытается растянуть строки текста таким образом, чтобы они заполнили всю высоту ячейки. Это работает аналогично функции выравнивания по ширине в Word, но только по вертикали. Если мы зафиксируем высоту ячейки чуть больше, чем занимают две строки, платформа автоматически увеличит интервал между ними, чтобы «прижать» первую строку к верху, а вторую к низу.
Если вы используете современную версию платформы 1С (начиная с 8.3.24), вам больше не нужно использовать «костыли». Разработчики добавили долгожданное свойство МежстрочныйИнтервал (Line Spacing).
Посмотрим, как это работает программно. Теперь мы можем управлять интервалом напрямую через объект ЯчейкаТабличногоДокумента или задать его в свойствах макета в Конфигураторе.
Пример программной установки интервала (если ценник формируется кодом):
// Получаем область макета
Область = Макет.ПолучитьОбласть("Строка");
Ячейка = Область.Область("R1C1"); // Адрес ячейки с наименованием
// Устанавливаем множитель межстрочного интервала (например, 1.2)
Ячейка.МежстрочныйИнтервал = 1.2;
// Выводим в табличный документ
ТабДок.Вывести(Область);
Это значение является множителем к стандартному интервалу шрифта. Значение 0.8 сделает текст очень плотным, а 1.5 — разреженным.
Проанализируем ситуацию, когда заказчик требует идеальной типографики, недоступной обычному табличному документу. В таком случае мы можем использовать Поле HTML-документа.
line-height для точной настройки интерлиньяжа в пикселях или процентах.Пример CSS для управления интервалом:
<div style="font-family: Arial; font-size: 12px; line-height: 0.9;">
Ваше очень длинное наименование товара, которое должно быть плотным
</div>
Выбор метода зависит от версии вашей платформы и критичности изменений:
МежстрочныйИнтервал.АвтоОтметкаНезаполненного в данном контексте не поможет, но поможет свойство ячейки Автомасштаб).Помните, что при изменении макета всегда стоит проверять результат на реальном принтере (особенно термопринтере этикеток), так как отображение в экранной форме 1С может незначительно отличаться от бумажного носителя из-за особенностей рендеринга шрифтов драйвером принтера.