Разработка и Конфигурация · 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Создайте объект Новый ТабличныйДокумент
- 2Подготовьте строку с HTML: прочитайте из файла, реквизита или сформируйте в коде
- 3Получите область-приёмник, например ТабДок.Область("R1C1")
- 4Вызовите ТабДок.ВставитьHTML(Область, СтрокаHTML)
- 5Покажите документ пользователю или сохраните в нужный формат
- 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-документа работает и на тонком, и на веб-клиенте, чего нельзя сказать о программной работе с табличным документом. Однако у этого способа есть ограничения: содержимое нельзя напрямую отправить на печать штатными средствами табличного документа, а отображение зависит от движка (в разных клиентах используются разные компоненты отображения), поэтому сложная вёрстка может выглядеть по-разному.
Сравнение вариантов
Подходит для печатных форм и сохранения в PDF/Excel. Ограничение: узкий набор поддерживаемых тегов и стилей, работа в основном на сервере или толстом клиенте.
Подходит для просмотра на экране, работает на тонком и веб-клиенте. Ограничение: нет прямой печати и сохранения в форматы табличного документа.
Программное заполнение областей макета без HTML. Подходит, когда нужен полный контроль над оформлением и предсказуемый результат печати.
Проверка результата и типичные ошибки
После вставки HTML обязательно проверьте документ визуально перед тем, как отдавать функционал пользователям. Признаки корректной работы: текст разбит на строки по абзацам, выделение и цвета применились, таблицы из HTML превратились в области ячеек, списки отображаются как отдельные строки. Если весь HTML попал в одну ячейку как обычный текст с видимыми тегами — значит, метод не был вызван или строка была экранирована дважды.
Частая ошибка — передача в метод уже экранированной строки (с < вместо <). В этом случае парсер не видит тегов и выводит текст как есть. Вторая типичная проблема — попытка выполнить код на тонком клиенте, где программное создание и заполнение табличного документа недоступно: перенесите формирование в серверную процедуру и верните готовый документ в реквизит формы.
Третья группа ошибок связана с ожиданиями по оформлению: внешние шрифты, отступы в пикселях, float-вёрстка и фоновые изображения в табличном документе не воспроизводятся. Если критичен точный внешний вид, формируйте печатную форму классическим способом — через макет с именованными областями и параметрами.
Когда HTML не нужен: макет с областями как надёжная альтернатива
Если HTML используется только как промежуточный способ оформления, а исходные данные у вас структурированные (таблица значений, выборка из запроса), разумнее отказаться от HTML вовсе. Создайте макет табличного документа с именованными областями «Шапка», «Строка», «Подвал», задайте форматирование прямо в макете и заполняйте параметры в цикле.
Такой подход даёт полный контроль над шириной колонок, шрифтами, границами и нумерацией страниц, корректно работает с автоотступами и повторением шапки при печати. Он требует больше кода, чем одна строка ВставитьHTML(), но результат предсказуем и не зависит от ограничений HTML-парсера.
Как выбрать действие
FAQ
Можно ли вызвать ВставитьHTML на тонком клиенте?
Нет, программная работа с табличным документом на тонком и веб-клиенте недоступна. Формируйте документ в серверной процедуре, помещайте его в реквизит формы типа «ТабличныйДокумент» и отображайте через элемент формы «Поле табличного документа».
Почему после вставки видны сами теги, а не форматирование?
Чаще всего строка экранирована: вместо символов < и > в ней содержатся < и >. Проверьте источник строки — например, XML-сериализация или чтение из некоторых форматов могут экранировать угловые скобки. Передайте в метод строку с обычными символами тегов.
Загрузятся ли картинки из HTML по ссылкам?
Гарантии нет: загрузка зависит от доступности ресурса с сервера, где выполняется код, и от настроек прокси. Надёжный вариант — получить двоичные данные изображения заранее и вставить его в табличный документ как рисунок, привязав к нужной области.
Как сохранить результат в PDF?
После формирования вызовите ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF). Учтите, что запись в PDF доступна не во всех режимах клиента; на сервере убедитесь, что у процесса есть права на запись в целевой каталог.
Что делать, если HTML приходит с сайта и вёрстка «разваливается»?
Очистите строку перед вставкой: удалите теги script, style, iframe, замените сложные блоки на простые абзацы и таблицы. Если после упрощения результат всё равно неприемлем, откажитесь от HTML и формируйте печатную форму через макет с областями — это даст полный контроль над оформлением.
Что важно запомнить
Для вывода HTML в табличный документ используйте ВставитьHTML на сервере, предварительно упростив разметку до базовых тегов. Для отображения на экране достаточно поля HTML-документа на форме. Если нужен точный и предсказуемый результат печати, формируйте документ через макет с именованными областями. Всегда проверяйте результат визуально перед передачей пользователям.