Как изменить межстрочный интервал в макете при печати ценников в 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При работе с обработкой Печать ценников в старых конфигурациях, таких как УТ 10.3 (Внешние печатные формы для Управления торговлей 10.3), разработчики часто сталкиваются с проблемой: если текст номенклатуры не умещается в одну строку и переносится на следующую, расстояние между этими строками (интерлиньяж) выглядит либо слишком мелким, либо неоправданно большим. В отличие от текстовых редакторов, табличный документ 1С долгое время не имел прямого свойства для управления этим параметром. В данной статье мы подробно разберем, как решить эту задачу различными способами, начиная от классических «хитростей» с макетом и заканчивая современными возможностями платформы.

Метод 1. Настройка прав на редактирование макета (Подготовительный этап)

Прежде чем вносить изменения в логику формирования ценника (Редактирование печатных форм в программах 1С. Инструкция для пользователя), нам необходимо получить доступ к редактированию макета, если конфигурация находится на поддержке — есть редактор макетов печатных форм в пользовательском режиме. Рассмотрим этот процесс по шагам:

  1. Откроем Конфигуратор и перейдем в меню Конфигурация -> Поддержка -> Настройка поддержки.
  2. Найдем в дереве объектов обработку ПечатьЦенников.
  3. В ветке Макеты выберем нужный нам макет (например, Ценник).
  4. Установим правило (Печать ценников с выбором ценника (УТ 10.3, КА 1.1, УПП 1.3)): Объект поставщика редактируется с сохранением поддержки.
  5. После этого макет станет доступен для визуального редактирования.

Важно: если мы просто растянем ячейку (Печать ценников с двумя ценами (УТ 10.3, КА 1.1, УПП 1.3)) по вертикали, это не изменит расстояние между строками текста внутри ячейки, а лишь увеличит свободное пространство снизу. Для изменения именно интервала перейдем к следующим методам.

Метод 2. Использование составных строк в макете (Обходной путь)

Проанализируем ситуацию, когда стандартный перенос текста (свойство РазмещениеТекста -> Переносить) нас не устраивает по плотности строк. Популярным решением является «эмуляция» межстрочного интервала через добавление промежуточных пустых строк.

Разберем этот алгоритм:

  1. Вместо одной ячейки для наименования товара выделим в макете две или три строки.
  2. Объединим их так, чтобы они визуально составляли один блок, либо оставим их раздельными.
  3. Между значимыми строками вставим узкую пустую строку. Регулируя высоту этой строки (параметр ВысотаСтроки), мы фактически управляем визуальным разрывом между верхним и нижним блоком текста.

Однако у этого метода есть существенный минус: программный код обработки должен уметь разбивать длинную строку на части и выводить их в разные области макета. В типовой УТ 10.3 это потребует модификации модуля обработки в процедуре печати.

Метод 3. Подбор шрифтов с разной метрикой (Визуальная коррекция)

Интересный способ решения проблемы заключается в использовании особенностей отрисовки шрифтов. Разберем ситуацию: каждый шрифт имеет встроенные параметры ascender (высота надстрочных знаков) и descender (глубина подстрочных знаков). Именно они определяют «внутренний» межстрочный интервал в ячейке 1С.

Рассмотрим рекомендации профессионалов:

Метод 4. Вертикальное выравнивание «Распределить»

В свойствах ячейки табличного документа есть параметр Вертикальное положение. Выясним причину, почему стандартное «По центру» часто не спасает:

Если мы установим значение Распределить (Distributed), 1С попытается растянуть строки текста таким образом, чтобы они заполнили всю высоту ячейки. Это работает аналогично функции выравнивания по ширине в Word, но только по вертикали. Если мы зафиксируем высоту ячейки чуть больше, чем занимают две строки, платформа автоматически увеличит интервал между ними, чтобы «прижать» первую строку к верху, а вторую к низу.

Метод 5. Новые возможности платформы 8.3.24+

Если вы используете современную версию платформы 1С (начиная с 8.3.24), вам больше не нужно использовать «костыли». Разработчики добавили долгожданное свойство МежстрочныйИнтервал (Line Spacing).

Посмотрим, как это работает программно. Теперь мы можем управлять интервалом напрямую через объект ЯчейкаТабличногоДокумента или задать его в свойствах макета в Конфигураторе.

Пример программной установки интервала (если ценник формируется кодом):


// Получаем область макета
Область = Макет.ПолучитьОбласть("Строка");
Ячейка = Область.Область("R1C1"); // Адрес ячейки с наименованием

// Устанавливаем множитель межстрочного интервала (например, 1.2)
Ячейка.МежстрочныйИнтервал = 1.2;

// Выводим в табличный документ
ТабДок.Вывести(Область);

Это значение является множителем к стандартному интервалу шрифта. Значение 0.8 сделает текст очень плотным, а 1.5 — разреженным.

Метод 6. Использование HTML-полей для сложной верстки

Проанализируем ситуацию, когда заказчик требует идеальной типографики, недоступной обычному табличному документу. В таком случае мы можем использовать Поле HTML-документа.

  1. Сформируем текст ценника в виде HTML-кода.
  2. Используем CSS-свойство line-height для точной настройки интерлиньяжа в пикселях или процентах.
  3. Сгенерированный HTML-текст можно преобразовать в картинку или вывести через специальный контейнер (хотя для массовой печати ценников этот метод трудозатратен в реализации).

Пример CSS для управления интервалом:


<div style="font-family: Arial; font-size: 12px; line-height: 0.9;">
    Ваше очень длинное наименование товара, которое должно быть плотным
</div>

Резюме и рекомендации

Выбор метода зависит от версии вашей платформы и критичности изменений:

Помните, что при изменении макета всегда стоит проверять результат на реальном принтере (особенно термопринтере этикеток), так как отображение в экранной форме 1С может незначительно отличаться от бумажного носителя из-за особенностей рендеринга шрифтов драйвером принтера.

← На главную