При автоматизации уведомлений и рассылок из 1С часто возникает необходимость отправить пользователю аккуратное форматированное письмо, например, с выделенным цветом блоком предупреждения или сводной таблицей. Создавать отдельный макет и сохранять его в файл веб-страницы не всегда целесообразно. Рассмотрим, как быстро сформировать HTML-таблицу непосредственно в коде 1С и корректно отправить ее получателю.
Самый простой и быстрый вариант — написать 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С для многострочного текста. Каждая новая строка разметки начинается с символа |, а кавычки внутри строки экранируются удвоением ("").
На практике таблицы заполняются динамическими данными из 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).ЧтениеТекста.Чтобы почтовый клиент отобразил таблицу как оформленный веб-документ, а не как исходный код тегов, проанализируем порядок настройки почтового сообщения:
ИнтернетПочтовоеСообщение добавляем текст письма и обязательно указываем тип ТипТекстаПочтовогоСообщения.HTML.Письмо.Кодировка = "utf-8"), чтобы избежать проблем с отображением кириллицы.<, >, &, чтобы избежать сбоев в верстке.Рассмотрим пример кода отправки письма через объект ИнтернетПочтовоеСообщение:
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Кодировка = "utf-8";
Письмо.Тема = "Уведомление системы";
ТекстПисьма = Письмо.Тексты.Добавить(ТекстHTML);
ТекстПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
Таким образом, для простых текстовых предупреждений с таблицей достаточно использовать многострочные строки 1С с инлайн-стилями CSS, а для сложных отчетов — экспорт объекта ТабличныйДокумент в HTML.