Как в 1С задать определенный шрифт и размер текста для электронного письма?

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

При автоматизации рассылок из 1С часто возникает задача привести внешний вид письма к корпоративному стандарту. Например, использовать шрифт Calibri размером 11pt. Поскольку объект ИнтернетПочтовоеСообщение сам по себе не содержит визуального редактора, оформление текста выполняется с помощью языка разметки HTML. В этой статье мы подробно разберем, как правильно сконструировать HTML-код письма, чтобы он корректно отображался у получателя.

Основы формирования HTML-письма в 1С

Для того чтобы почтовый клиент получателя (например, Outlook или Gmail) понял, что письмо содержит оформление, нам необходимо использовать объект ИнтернетПочтовоеСообщение и явно указать тип текста. Рассмотрим базовый алгоритм:

  1. Создаем объект сообщения.
  2. Формируем строку с HTML-кодом.
  3. Добавляем текст в коллекцию Тексты сообщения.
  4. Устанавливаем свойство ТипТекста в значение ТипТекстаПочтовогоСообщения.HTML.

Проанализируем типичную ошибку начинающих разработчиков, когда HTML-теги пишутся некорректно или используются устаревшие методы. Рассмотрим пример неправильного кода:


// ОШИБКА: Неправильный синтаксис кавычек и использование устаревшего тега font
ТекстПисьма = ТекстПисьма + "<font face"<"Calibri">"</font>"; 

Такой код вызовет ошибку компиляции или интерпретации в 1С из-за путаницы с кавычками. Кроме того, тег font считается устаревшим в современной веб-разработке. Вместо него следует использовать современные CSS-стили.

Использование инлайновых стилей (Inline CSS)

Большинство почтовых клиентов игнорируют внешние файлы стилей или блоки <style> в заголовке письма. Поэтому самым надежным способом является использование атрибута style непосредственно внутри HTML-тегов. Чтобы задать шрифт для всего письма, мы можем обернуть основной текст в тег <div> или <span>.

Разберем пример реализации задачи (Calibri, 11pt):


ТекстПисьма = "<div style='font-family: Calibri, sans-serif; font-size: 11pt;'>";
ТекстПисьма = ТекстПисьма + "Здравствуйте, " + Руководитель + "!" + "<br/><br/>";
ТекстПисьма = ТекстПисьма + "Информируем вас о предстоящих отпусках сотрудников.";
ТекстПисьма = ТекстПисьма + "</div>";

Письмо = Новый ИнтернетПочтовоеСообщение;
Текст = Письмо.Тексты.Добавить(ТекстПисьма);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;

Обратите внимание на использование font-family: Calibri, sans-serif;. Указание sans-serif после основного шрифта — это правило хорошего тона. Если на устройстве получателя вдруг не окажется шрифта Calibri, система подберет наиболее похожий шрифт без засечек.

Оформление таблиц в письмах 1С

Когда мы выводим данные из информационных баз (например, списки сотрудников или остатки товаров), мы часто используем таблицы. Важно помнить, что стили, заданные в родительском <div>, часто не наследуются ячейками таблицы в некоторых почтовых клиентах (особенно в Microsoft Outlook).

Рассмотрим, как правильно оформить таблицу, чтобы шрифт оставался единым во всем документе. Выясним причину: для гарантии отображения стиля его нужно дублировать в описании таблицы и, желательно, в каждой ячейке <td>.


// Задаем стиль для таблицы
ТекстТаблицы = "<table border='1' style='border-collapse: collapse; font-family: Calibri; font-size: 11pt; width: 100%;'>";
ТекстТаблицы = ТекстТаблицы + "<tr style='background-color: #f2f2f2;'>
    |<th>Сотрудник</th>
    |<th>Дата начала</th>
    |<th>Дата окончания</th></tr>";

Для Каждого Строка Из ДанныеОтпуска Цикл
    ТекстТаблицы = ТекстТаблицы + "<tr>";
    // Для максимальной надежности можно добавлять style в каждый td
    ТекстТаблицы = ТекстТаблицы + "<td style='padding: 5px;'>" + Строка.Сотрудник + "</td>";
    ТекстТаблицы = ТекстТаблицы + "<td style='padding: 5px;'>" + Формат(Строка.ДатаНачала, "ДФ=dd.MM.yyyy") + "</td>";
    ТекстТаблицы = ТекстТаблицы + "<td style='padding: 5px;'>" + Формат(Строка.ДатаОкончания, "ДФ=dd.MM.yyyy") + "</td>";
    ТекстТаблицы = ТекстТаблицы + "</tr>";
КонецЦикла;

ТекстТаблицы = ТекстТаблицы + "</table>";

Безопасные шрифты для рассылок

Хотя в корпоративной среде Calibri является стандартом, при отправке внешним контрагентам лучше использовать "безопасные" шрифты, которые гарантированно есть на всех устройствах (Windows, macOS, iOS, Android). Проанализируем список наиболее популярных сочетаний:

Продвинутый метод: использование HTML-макетов

Вместо того чтобы собирать сложную строку в коде 1С, что часто ведет к ошибкам и плохой читаемости конфигурации, мы рекомендуем использовать Макеты типа "HTML документ". Это позволяет:

  1. Визуально спроектировать письмо в редакторе (или вставить готовый код из веб-редактора).
  2. Использовать параметры-заполнители (например, [ИмяПолучателя]).
  3. Сохранить логику формирования данных отдельно от дизайна.

Посмотрим на пример работы с макетом:


// Получаем текст из макета
Макет = ПолучитьМакет("МакетПисьмаHTML");
ТекстHTML = Макет.ПолучитьТекст();

// Выполняем подстановку данных
ТекстHTML = СтрЗаменить(ТекстHTML, "[Руководитель]", Данные.ФИО);
ТекстHTML = СтрЗаменить(ТекстHTML, "[ТаблицаДанных]", СформированнаяСтрокаТаблицы);

// Отправляем
Письмо = Новый ИнтернетПочтовоеСообщение;
ТекстСообщения = Письмо.Тексты.Добавить(ТекстHTML);
ТекстСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;

Рекомендации по размерам шрифта (px vs pt)

В 1С и офисных приложениях (Word, Outlook) принято измерять шрифт в пунктах (pt). Однако веб-интерфейсы часто используют пиксели (px). Чтобы письмо выглядело предсказуемо, полезно знать их соотношение:

Использование pt в почте вполне допустимо, так как Microsoft Outlook ориентирован именно на эти единицы измерения. Если же ваша рассылка нацелена на мобильные устройства и веб-интерфейсы, попробуйте задать размер в px для более точного контроля.

Таким образом, комбинируя использование объекта ИнтернетПочтовоеСообщение, инлайновые стили CSS и аккуратную работу с HTML-разметкой, мы можем создавать профессионально оформленные письма, которые будут выглядеть одинаково хорошо у всех сотрудников компании.

← На главную