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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

В этой статье мы подробно разберем, как программно сформировать письмо с заданными отступами в 3, 4 или 5 пт, рассмотрим особенности работы почтовых клиентов и проанализируем примеры кода для реализации этой задачи в 1С.

Ограничения простого текста и переход к HTML

Для начала выясним причину, по которой обычный текст не подходит для решения нашей задачи. В режиме ТипТекстаПочтовогоСообщения.ПростойТекст письмо представляет собой набор символов. Перенос строки в нем осуществляется только с помощью спецсимвола Символы.ПС, что эквивалентно нажатию клавиши Enter. Это создает отступ, равный высоте целой строки, и мы никак не можем уменьшить его до 5 или 3 пунктов.

Единственный верный путь — использование HTML. Как отмечают участники обсуждения, формирование письма в формате HTML позволяет применять каскадные таблицы стилей (CSS), которые дают полный контроль над типографикой. Разберем по шагам, как это реализовать.

Использование свойства line-height для управления интервалами

Основным инструментом для настройки расстояния между строками в веб-верстке является CSS-свойство line-height. Рассмотрим подробнее, как оно работает. Важно понимать, что line-height определяет не «пустое пространство» между буквами, а общую высоту строки (от базовой линии одной строки до базовой линии следующей).

Проанализируем математику расчета интервала. Если ваш основной шрифт имеет размер 10pt, а вы хотите получить чистый отступ между строками в 5pt, то общее значение line-height должно составить 15pt. Если вы установите значение line-height равным 5pt при размере шрифта 10pt, строки просто наложатся друг на друга, сделав текст нечитаемым.

Пример использования встроенного стиля в теге абзаца:


// Пример строки с межстрочным интервалом 15 пунктов
ТекстАбзаца = "<p style='line-height: 15pt; margin-top: 0; margin-bottom: 0;'>Ваш текст здесь...</p>";

Особенности отображения в Microsoft Outlook

Многие корпоративные пользователи используют Microsoft Outlook. Это приложение использует движок Word для рендеринга HTML, который имеет свои специфические нюансы. Посмотрим на них внимательнее. Для того чтобы Outlook строго соблюдал заданный интервал, нам необходимо добавить специальное свойство mso-line-height-rule: exactly;.

Если проигнорировать этот параметр, Outlook может автоматически увеличить ваш интервал, если посчитает, что он слишком мал для выбранного шрифта. Рассмотрим правильную структуру тега для максимальной совместимости:


<p style="mso-line-height-rule: exactly; line-height: 14pt; margin: 0;">
    Этот текст будет отображаться с жестко заданным интервалом даже в Outlook.
</p>

Реализация формирования письма в коде 1С

Теперь разберем, как объединить эти знания при написании кода в 1С. Для отправки писем мы используем объект ИнтернетПочтовоеСообщение. Главное — правильно указать тип содержимого. Проанализируем пример функции формирования тела письма:


&НаСервере
Процедура СформироватьИОтправитьПисьмо()
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Сообщение.Тема = "Пример письма с точными отступами";
    
    // Формируем HTML-тело с использованием стилей
    ТекстHTML = "
    |<html>
    |<head>
    |   <style>
    |       .custom-spacing {
    |           mso-line-height-rule: exactly;
    |           line-height: 15pt;
    |           font-family: Arial, sans-serif;
    |           font-size: 10pt;
    |       }
    |   </style>
    |</head>
    |<body>
    |   <p class='custom-spacing'>Первая строка текста с отступом.</p>
    |   <p class='custom-spacing'>Вторая строка текста, между ними ровно 5pt чистого пространства.</p>
    |</body>
    |</html>";
    
    // Важно установить тип текста как HTML
    Сообщение.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);
    
    // Далее идет стандартный код отправки через ИнтернетПочта
КонецПроцедуры

Альтернативный метод: создание «невидимых» разделителей

Если использование line-height внутри абзацев по какой-то причине не подходит (например, если нужно сделать разовый отступ между разными блоками текста в 5пт), мы можем применить метод «пустой строки». Выясним, как это сделать элегантно.

Вместо использования нескольких тегов <br>, которые дают непредсказуемый результат, создадим пустой блок div или ячейку таблицы с фиксированной высотой. Посмотрим на пример:


<p>Верхний блок текста</p>
<div style="font-size: 5pt; line-height: 5pt; height: 5pt;"> </div>
<p>Нижний блок текста, который находится ровно на 5pt ниже</p>

Использование неразрывного пробела   внутри блока гарантирует, что почтовый клиент не «схлопнет» пустой тег.

Использование табличной верстки для максимальной точности

Для профессиональных рассылок, где важен каждый пиксель, мы рекомендуем использовать таблицы. Это самый надежный способ верстки писем. В таблицах отступы в 5pt между блоками реализуются через пустые строки-разделители.

Рассмотрим структуру такой таблицы:

  1. Создаем основную таблицу шириной 100%.
  2. Вставляем строку с текстом.
  3. Вставляем пустую строку-разделитель с фиксированной высотой.
  4. Вставляем следующую строку с текстом.

Пример кода разделителя в таблице:


<tr>
    <td height="5" style="font-size: 5pt; line-height: 5pt; background-color: #ffffff;"> </td>
</tr>

Обратите внимание: в атрибуте height значение указывается без единиц измерения (по умолчанию пиксели), но в style мы можем продублировать его в пунктах для обеспечения нужной точности. Помните, что 1pt примерно равен 1.33px.

Практический совет: подготовка шаблона в Outlook

Как справедливо заметил один из участников форума, если вы не знакомы с HTML-версткой глубоко, можно воспользоваться комбинированным методом. Создайте письмо в Microsoft Outlook, настройте все абзацные отступы и интервалы через стандартный интерфейс (Правой кнопкой мыши -> Абзац -> Межстрочный интервал -> Точно -> 15 пт).

После этого сохраните письмо как «Веб-страница (HTML)». Открыв полученный файл через «Блокнот», вы сможете скопировать сгенерированный код и использовать его в 1С как основу для формирования тела сообщения. Это значительно упростит процесс верстки сложных писем.

Подводя итог, отметим: для реализации точных отступов в 3, 4 или 5 пт в 1С всегда выбирайте ТипТекстаПочтовогоСообщения.HTML, используйте свойство line-height вместе с mso-line-height-rule и не забывайте проверять результат в разных почтовых сервисах.

← На главную