К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как вывести HTML в табличный документ 1С

Как вывести HTML в табличный документ 1С: метод ВставитьHTML, подготовка строки HTML, ограничения форматирования, примеры кода и типичные ошибки.

Задача вывести HTML в табличный документ 1С возникает, когда нужно отобразить форматированный текст с картинками, цветными заголовками или списками прямо в макете печатной формы — например, вывести коммерческое предложение, сохранённое в формате HTML, или визуализировать результат веб-запроса. Платформа 1С:Предприятие поддерживает такую возможность через метод ВставитьHTML() объекта «ТабличныйДокумент», но у него есть ограничения, о которых нужно знать заранее.

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

Важно понимать: ВставитьHTML() не является полноценным браузерным движком. Он поддерживает ограниченное подмножество HTML и CSS, игнорирует скрипты, внешние стили и многие теги. Сложная вёрстка «поедет», поэтому HTML перед вставкой часто нужно упрощать. Ниже разобраны оба подхода с рабочим кодом, проверкой результата и разбором ошибок.

Как работает метод ВставитьHTML и когда его применять

Метод ВставитьHTML() вызывается у объекта «ТабличныйДокумент» и принимает два ключевых параметра: область, начиная с которой будет размещено содержимое, и строку с HTML-кодом. Платформа разбирает разметку и преобразует её в ячейки табличного документа: абзацы становятся строками, таблицы — областями ячеек, а поддерживаемые стили — оформлением ячеек (шрифт, цвет, выравнивание, границы).

Метод уместен, когда конечный результат — печатная форма, файл Excel или PDF, то есть когда нужен именно табличный документ как итоговый формат. Типовой сценарий: в информационной базе хранится HTML-текст (описание товара, письмо, результат обмена с сайтом), и его требуется включить в печатную форму или отчёт без потери базового форматирования.

Если же цель — только показать пользователю красиво оформленный текст на экране, табличный документ не нужен вовсе. В этом случае правильнее использовать элемент формы «Поле HTML-документа», который отображает HTML гораздо ближе к браузерному поведению, хотя и со своими ограничениями в зависимости от режима совместимости и клиента.

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

Минимальный рабочий пример выглядит так: создаётся табличный документ, определяется область вставки (обычно первая ячейка), и вызывается метод вставки. Код выполняется на сервере или в толстом клиенте — это важно, потому что на тонком и веб-клиенте возможности работы с табличным документом ограничены.

&НаСервере

Процедура СформироватьПечатнуюФорму()

ТабДок = Новый ТабличныйДокумент;

СтрокаHTML =

"<h2>Коммерческое предложение</h2>"

+ "<p><b>Клиент:</b> ООО «Ромашка»</p>"

+ "<ul><li>Товар А — 10 шт.</li><li>Товар Б — 5 шт.</li></ul>";

ОбластьПриемник = ТабДок.Область("R1C1");

ТабДок.ВставитьHTML(ОбластьПриемник, СтрокаHTML);

КонецПроцедуры

Обратите внимание на экранирование: в модуле 1С строка HTML записывается с угловыми скобками как есть (<h2> в примере — это представление для чтения; в реальном коде используются обычные символы < и >). Если HTML получен из файла или веб-сервиса, его достаточно прочитать в строку и передать в метод без дополнительной обработки.

После вставки табличный документ можно показать пользователю (ТабДок.Показать()), сохранить в файл (ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF)) или отправить на печать. Проверьте результат визуально: заголовки должны стать крупным шрифтом, списки — маркированными строками, жирный текст — полужирным начертанием.

Порядок действий
  1. 1
    Создайте объект Новый ТабличныйДокумент
  2. 2
    Подготовьте строку с HTML: прочитайте из файла, реквизита или сформируйте в коде
  3. 3
    Получите область-приёмник, например ТабДок.Область("R1C1")
  4. 4
    Вызовите ТабДок.ВставитьHTML(Область, СтрокаHTML)
  5. 5
    Покажите документ пользователю или сохраните в нужный формат
  6. 6
    Проверьте форматирование и при необходимости упростите HTML

Подготовка HTML: что поддерживается, а что нет

Главная причина неудач при вставке HTML — ожидание браузерного поведения. Встроенный парсер платформы понимает базовые теги: заголовки, абзацы, списки, таблицы, выделение текста, переносы строк, гиперссылки и простые inline-стили (цвет, размер шрифта, выравнивание). Он не выполняет JavaScript, не загружает внешние CSS-файлы и игнорирует большинство современных CSS-свойств.

На практике это означает: HTML, выгруженный из визуального редактора сайта или полученный от внешнего API, почти всегда нужно чистить. Уберите теги <script>, <style>, <iframe>, сложные вложенные конструкции и позиционирование. Оставьте простую семантическую разметку: заголовки, абзацы, списки, таблицы, выделение.

Картинки — отдельная тема. Изображения, заданные внешними URL, при вставке в табличный документ могут не загрузиться (особенно на сервере без доступа в интернет) или не попасть в печатную форму. Надёжнее вставлять картинки отдельно: объектом «Рисунок» табличного документа, загрузив файл или двоичные данные на сервере.

Альтернатива: поле HTML-документа на форме

Если задача — показать HTML пользователю без печати, добавьте на управляемую форму реквизит типа «Строка» и элемент формы с видом «Поле HTML-документа». В коде достаточно присвоить реквизиту строку с HTML — содержимое отобразится при открытии формы.

&НаКлиенте

Процедура ПриОткрытии(Отказ)

HTMLТекст = "<html><body>"

+ "<h1>Отчёт по продажам</h1>"

+ "<p style='color:green'>План выполнен</p>"

+ "</body></html>";

КонецПроцедуры

Поле HTML-документа работает и на тонком, и на веб-клиенте, чего нельзя сказать о программной работе с табличным документом. Однако у этого способа есть ограничения: содержимое нельзя напрямую отправить на печать штатными средствами табличного документа, а отображение зависит от движка (в разных клиентах используются разные компоненты отображения), поэтому сложная вёрстка может выглядеть по-разному.

Сравнение вариантов

ВставитьHTML в табличный документ

Подходит для печатных форм и сохранения в PDF/Excel. Ограничение: узкий набор поддерживаемых тегов и стилей, работа в основном на сервере или толстом клиенте.

Поле HTML-документа на форме

Подходит для просмотра на экране, работает на тонком и веб-клиенте. Ограничение: нет прямой печати и сохранения в форматы табличного документа.

Ручная разметка табличного документа

Программное заполнение областей макета без HTML. Подходит, когда нужен полный контроль над оформлением и предсказуемый результат печати.

Проверка результата и типичные ошибки

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

Частая ошибка — передача в метод уже экранированной строки (с &lt; вместо <). В этом случае парсер не видит тегов и выводит текст как есть. Вторая типичная проблема — попытка выполнить код на тонком клиенте, где программное создание и заполнение табличного документа недоступно: перенесите формирование в серверную процедуру и верните готовый документ в реквизит формы.

Третья группа ошибок связана с ожиданиями по оформлению: внешние шрифты, отступы в пикселях, float-вёрстка и фоновые изображения в табличном документе не воспроизводятся. Если критичен точный внешний вид, формируйте печатную форму классическим способом — через макет с именованными областями и параметрами.

Типичные ошибки
01
Передача дважды экранированной строки — теги выводятся как обычный текст, форматирование не применяется
02
Вызов ВставитьHTML на тонком клиенте — метод недоступен, формирование нужно выполнять на сервере
03
Ожидание поддержки внешних CSS и скриптов — они игнорируются, вёрстка упрощается
04
Вставка картинок по внешним URL — изображения могут не загрузиться, надёжнее вставлять их отдельным рисунком
05
Отсутствие визуальной проверки — дефекты разметки обнаруживаются пользователями уже на реальных документах

Когда HTML не нужен: макет с областями как надёжная альтернатива

Если HTML используется только как промежуточный способ оформления, а исходные данные у вас структурированные (таблица значений, выборка из запроса), разумнее отказаться от HTML вовсе. Создайте макет табличного документа с именованными областями «Шапка», «Строка», «Подвал», задайте форматирование прямо в макете и заполняйте параметры в цикле.

Такой подход даёт полный контроль над шириной колонок, шрифтами, границами и нумерацией страниц, корректно работает с автоотступами и повторением шапки при печати. Он требует больше кода, чем одна строка ВставитьHTML(), но результат предсказуем и не зависит от ограничений HTML-парсера.

Маршрут решения

Как выбрать действие

Нужна печатная форма или файл PDF/Excel, а исходный текст уже в HTMLИспользуйте ТабличныйДокумент.ВставитьHTML на сервере, предварительно упростив разметку
Нужно только показать форматированный текст на экранеИспользуйте поле HTML-документа на управляемой форме
Данные структурированы и важен точный внешний вид печатиФормируйте документ через макет с именованными областями без HTML
HTML содержит скрипты, внешние стили или сложную вёрсткуОчистите разметку до базовых тегов или перейдите на макет с областями

FAQ

Можно ли вызвать ВставитьHTML на тонком клиенте?

Нет, программная работа с табличным документом на тонком и веб-клиенте недоступна. Формируйте документ в серверной процедуре, помещайте его в реквизит формы типа «ТабличныйДокумент» и отображайте через элемент формы «Поле табличного документа».

Почему после вставки видны сами теги, а не форматирование?

Чаще всего строка экранирована: вместо символов < и > в ней содержатся &lt; и &gt;. Проверьте источник строки — например, XML-сериализация или чтение из некоторых форматов могут экранировать угловые скобки. Передайте в метод строку с обычными символами тегов.

Загрузятся ли картинки из HTML по ссылкам?

Гарантии нет: загрузка зависит от доступности ресурса с сервера, где выполняется код, и от настроек прокси. Надёжный вариант — получить двоичные данные изображения заранее и вставить его в табличный документ как рисунок, привязав к нужной области.

Как сохранить результат в PDF?

После формирования вызовите ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF). Учтите, что запись в PDF доступна не во всех режимах клиента; на сервере убедитесь, что у процесса есть права на запись в целевой каталог.

Что делать, если HTML приходит с сайта и вёрстка «разваливается»?

Очистите строку перед вставкой: удалите теги script, style, iframe, замените сложные блоки на простые абзацы и таблицы. Если после упрощения результат всё равно неприемлем, откажитесь от HTML и формируйте печатную форму через макет с областями — это даст полный контроль над оформлением.

Итог

Что важно запомнить

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