Как создать простую HTML-таблицу на встроенном языке 1С для отправки в электронном письме?

Программист IT и автоматизация бизнеса
← На главную

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

Простой способ: формирование HTML в многострочной строке

Самый простой и быстрый вариант — написать HTML-разметку прямо в коде 1С с помощью многострочных строковых literal (символ вертикальной черты |). Посмотрим на базовый пример создания таблицы:


ТекстHTML =
"<html>
|<body>
|  <h1 align=""center"">Предупреждение</h1>
|  <center>
|  <table border=""1"">
|    <tr>
|      <td colspan=""3"">Если в таблице два тега TR, то в ней две строки.</td>
|    </tr>
|    <tr>
|      <td>Если в строке три тега TD,</td>
|      <td>то в ней</td>
|      <td>три столбца.</td>
|    </tr>
|  </table>
|  </center>
|</body>
|</html>";

В данном примере используется стандартная синтаксическая конструкция 1С для многострочного текста. Каждая новая строка разметки начинается с символа |, а кавычки внутри строки экранируются удвоением ("").

Использование функций подстановки и CSS-стилей для писем

На практике таблицы заполняются динамическими данными из 1С. Разберем, как сделать рассылку удобной для поддержки и гарантировать правильное отображение цветов и рамок в почтовых клиентах (Outlook, Gmail и др.).

Большинство почтовых программ вырезают теги <style> в заголовке письма. Поэтому оформление нужно задавать через инлайн-стили в атрибуте style каждого тега. Для удобной подстановки динамических данных воспользуемся функцией СтрШаблон():


ЗаголовокСообщения = "Внимание: обнаружены критические ошибки!";
ТекстОшибки = "Не заполнен контрагент в документе 'Реализация товаров и услуг'";

ШаблонHTML =
"<html>
|<body style=""font-family: Arial, sans-serif; margin: 10px;"">
|  <table style=""border-collapse: collapse; width: 100%; border: 1px solid #cccccc;"">
|    <tr style=""background-color: #ffcccc; color: #990000;"">
|      <th style=""padding: 8px; border: 1px solid #cccccc; text-align: left;"">%1</th>
|    </tr>
|    <tr>
|      <td style=""padding: 8px; border: 1px solid #cccccc;"">%2</td>
|    </tr>
|  </table>
|</body>
|</html>";

ТекстHTML = СтрШаблон(ШаблонHTML, ЗаголовокСообщения, ТекстОшибки);

Альтернативный вариант: создание HTML через ТабличныйДокумент

Если требуется сформировать сложную таблицу с объединением ячеек и динамическими цветами, но писать HTML-теги вручную не хочется, можно программно заполнить объект ТабличныйДокумент и экспортировать его в HTML:

  1. Создаем объект ТабличныйДокумент в коде.
  2. Заполняем ячейки значениями, настраиваем параметры шрифта, рамки через Область.Обвести() и цвет фона с помощью Область.ЦветФона.
  3. Сохраняем результат во временный файл методом Записать(ИмяФайла, ТипФайлаТабличногоДокумента.HTML).
  4. Считываем полученный файл в текстовую переменную с помощью объекта ЧтениеТекста.

Правила отправки HTML-письма из 1С

Чтобы почтовый клиент отобразил таблицу как оформленный веб-документ, а не как исходный код тегов, проанализируем порядок настройки почтового сообщения:

  1. При формировании объекта ИнтернетПочтовоеСообщение добавляем текст письма и обязательно указываем тип ТипТекстаПочтовогоСообщения.HTML.
  2. Задаем кодировку сообщения UTF-8 (Письмо.Кодировка = "utf-8"), чтобы избежать проблем с отображением кириллицы.
  3. Если динамический текст подставляется из базы (например, наименования номенклатуры), экранируем спецсимволы <, >, &, чтобы избежать сбоев в верстке.

Рассмотрим пример кода отправки письма через объект ИнтернетПочтовоеСообщение:


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Кодировка = "utf-8";
Письмо.Тема = "Уведомление системы";

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

Таким образом, для простых текстовых предупреждений с таблицей достаточно использовать многострочные строки 1С с инлайн-стилями CSS, а для сложных отчетов — экспорт объекта ТабличныйДокумент в HTML.

← На главную