Как отобразить таблицу в форматированном документе или письме 1С?

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

При разработке функционала отправки электронных писем в 1С:Предприятие часто возникает задача вставки табличных данных непосредственно в тело сообщения. Однако при попытке использования стандартного элемента Форматированный документ разработчики сталкиваются с тем, что таблицы не отображаются. Давайте разберем, почему это происходит и какие существуют способы обхода этого ограничения.

Почему таблицы не работают в «Форматированном документе»?

Важно понимать, что Форматированный документ — это специализированный элемент управления, предназначенный для базового оформления текста (шрифты, цвета, списки). Он не является полноценным HTML-браузером. Его движок сильно ограничен и попросту игнорирует сложные теги вроде table, tr или td. Даже если вы попытаетесь программно передать HTML-разметку с таблицей в этот элемент, результат вас разочарует: структура таблицы не будет построена.

Решение 1: Генерация HTML из табличного документа

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

Разберем алгоритм действий по шагам:

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

Посмотрим на пример кода для реализации этой задачи:


ИмяВременногоФайла = ПолучитьИмяВременногоФайла("html");
ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.HTML);
ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла);
ТелоHTML = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
УдалитьФайлы(ИмяВременногоФайла);

Решение 2: Использование поля HTML-документа на форме

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

Этот элемент базируется на движке браузера и отлично справляется с отображением таблиц. Чтобы объединить это с логикой письма, используйте следующую схему:

  1. Используйте один общий реквизит объекта для хранения HTML-кода (например, ТекстHTML).
  2. При открытии формы загружайте этот текст в Поле HTML-документа.
  3. Если пользователь должен редактировать текст, вы можете предоставить переключатель режимов: работа с простым форматированным текстом или работа с HTML-кодом.

Решение 3: Программная подготовка HTML перед записью

Часто в типовых конфигурациях Форматированный документ является лишь инструментом для ввода, а при записи объекта данные преобразуются в HTML. Вы можете вмешаться в этот процесс в процедуре ПередЗаписьюНаСервере.

Рассмотрим, как это происходит программно:


// Подготовим документ HTML из содержимого форматированного документа
СтруктураВложений = Новый Структура;
ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекущийОбъект.ТекстHTML, СтруктураВложений);

// Здесь вы можете дополнительно модифицировать строку с HTML,
// добавляя необходимые теги таблицы перед сохранением в базу.

Важное примечание: При отправке письма получателю, если его почтовый клиент является стандартным (Outlook, Gmail и т.д.), письмо будет корректно отображать таблицу, даже если в самой 1С она отображалась в упрощенном виде. Главное — правильно сформировать строку HTML-разметки в реквизите объекта.

Рекомендации по реализации

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

← На главную