При автоматизации рассылок из системы 1С часто возникает задача привести внешний вид писем в соответствие с корпоративными стандартами или требованиями заказчика. Одной из таких задач является установка фиксированного межстрочного интервала, измеряемого в пунктах (pt). Стандартный механизм формирования текстовых сообщений ПростойТекст не позволяет управлять такими тонкими настройками, поэтому нам необходимо рассмотреть переход на использование HTML-верстки.
В этой статье мы подробно разберем, как программно сформировать письмо с заданными отступами в 3, 4 или 5 пт, рассмотрим особенности работы почтовых клиентов и проанализируем примеры кода для реализации этой задачи в 1С.
Для начала выясним причину, по которой обычный текст не подходит для решения нашей задачи. В режиме ТипТекстаПочтовогоСообщения.ПростойТекст письмо представляет собой набор символов. Перенос строки в нем осуществляется только с помощью спецсимвола Символы.ПС, что эквивалентно нажатию клавиши Enter. Это создает отступ, равный высоте целой строки, и мы никак не можем уменьшить его до 5 или 3 пунктов.
Единственный верный путь — использование HTML. Как отмечают участники обсуждения, формирование письма в формате HTML позволяет применять каскадные таблицы стилей (CSS), которые дают полный контроль над типографикой. Разберем по шагам, как это реализовать.
Основным инструментом для настройки расстояния между строками в веб-верстке является 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. Это приложение использует движок Word для рендеринга HTML, который имеет свои специфические нюансы. Посмотрим на них внимательнее. Для того чтобы Outlook строго соблюдал заданный интервал, нам необходимо добавить специальное свойство mso-line-height-rule: exactly;.
Если проигнорировать этот параметр, Outlook может автоматически увеличить ваш интервал, если посчитает, что он слишком мал для выбранного шрифта. Рассмотрим правильную структуру тега для максимальной совместимости:
<p style="mso-line-height-rule: exactly; line-height: 14pt; margin: 0;">
Этот текст будет отображаться с жестко заданным интервалом даже в Outlook.
</p>
Теперь разберем, как объединить эти знания при написании кода в 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 между блоками реализуются через пустые строки-разделители.
Рассмотрим структуру такой таблицы:
Пример кода разделителя в таблице:
<tr>
<td height="5" style="font-size: 5pt; line-height: 5pt; background-color: #ffffff;"> </td>
</tr>
Обратите внимание: в атрибуте height значение указывается без единиц измерения (по умолчанию пиксели), но в style мы можем продублировать его в пунктах для обеспечения нужной точности. Помните, что 1pt примерно равен 1.33px.
Как справедливо заметил один из участников форума, если вы не знакомы с HTML-версткой глубоко, можно воспользоваться комбинированным методом. Создайте письмо в Microsoft Outlook, настройте все абзацные отступы и интервалы через стандартный интерфейс (Правой кнопкой мыши -> Абзац -> Межстрочный интервал -> Точно -> 15 пт).
После этого сохраните письмо как «Веб-страница (HTML)». Открыв полученный файл через «Блокнот», вы сможете скопировать сгенерированный код и использовать его в 1С как основу для формирования тела сообщения. Это значительно упростит процесс верстки сложных писем.
Подводя итог, отметим: для реализации точных отступов в 3, 4 или 5 пт в 1С всегда выбирайте ТипТекстаПочтовогоСообщения.HTML, используйте свойство line-height вместе с mso-line-height-rule и не забывайте проверять результат в разных почтовых сервисах.