Подробный гайд: Поле в 1С выводит HTML-код вместо разметки

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

2026.10.10                  


Подробный гайд: Поле в 1С выводит HTML-код вместо разметкиПодробный гайд: Поле в 1С выводит HTML-код вместо разметки

Почему это происходит

Когда вы видите <b>Текст</b> вместо Текст, причина всегда одна: платформа воспринимает содержимое как обычную строку, а не как HTML-документ. Разберём все варианты решения от простого к сложному.


1. Проверьте тип элемента формы

Неправильно: «Поле надписи»

Элемент «Поле надписи» (тип Надпись) всегда выводит текст как есть. Даже если в свойстве Заголовок или в данных содержится HTML — теги не интерпретируются.




Правильно: используйте подходящий элемент

Задача Элемент формы
Простое форматирование (жирный, цвет, списки) Поле форматированного документа
Полноценная HTML-страница Поле веб-документа (браузер)
Отображение HTML из внешнего источника Поле веб-документа + установка данных

Откройте конфигуратор → форма → удалите элемент «Поле надписи» → добавьте новый элемент нужного типа.


2. Поле форматированного документа (простой случай)

Если вам нужно отобразить небольшой фрагмент с тегами:

В конфигураторе

  1. Добавить элемент → тип «Поле форматированного документа».
  2. Свойство Формат: оставить пустым или указать Формат=HTML.

В коде модуля формы

&НаКлиенте
Процедура ПоказатьТекст()
    Элементы.МоеПоле.Документ = "<b>Привет</b>, <i>мир</i>!";
КонецПроцедуры

Если Документ ожидает объект ФорматированныйДокумент, формируйте его:

&НаКлиенте
Процедура ПоказатьТекст()
    Формат = Новый ФорматированнаяСтрока;
    Формат.Текст = "<b>Привет</b>";
    Элементы.МоеПоле.Документ = Формат;
КонецПроцедуры

3. Поле веб-документа (полноценный HTML)

Это браузерный элемент (на базе Chromium/WebView2 в новых платформах или IE в старых). Он корректно рендерит любой HTML.

Шаги в конфигураторе

  1. Добавить элемент формы → тип «Поле веб-документа».
  2. Задать имя, например ПолеБраузер.
  3. Свойства по умолчанию подходят.

Загрузка HTML из строки

Напрямую вставить строку в поле веб-документа нельзя — нужно передать адрес или поток данных.

Основные способы:

Способ А: временный файл

&НаСервере
Процедура ПоказатьНаСервере()
    // Формируем временный файл
    ИмяВремФайла = ПолучитьИмяВременногоФайла(".html");
    ЗаписьТекста = Новый ЗаписьТекста(ИмяВремФайла, КодировкаТекста.UTF8);
    ЗаписьТекста.Записать("<html><body><h1>Привет из 1С!</h1></body></html>");
    ЗаписьТекста.Закрыть();

    // Передаём путь клиенту
    РеквизитФормы = ИмяВремФайла; // реквизит формы строкового типа
КонецПроцедуры

&НаКлиенте
Процедура Показать()
    ПоказатьНаСервере();
    Элементы.ПолеБраузер.Документ = "file:///" + РеквизитФормы;
КонецПроцедуры

Способ Б: через навигацию (если поддерживается)

&НаКлиенте
Процедура Показать()
    Элементы.ПолеБраузер.ПерейтиК("data:text/html;charset=utf-8,<h1>Привет</h1>");
КонецПроцедуры

Поддержка data: URI зависит от версии платформы. В 8.3.23+ работает, в старых может блокироваться.


Способ В: через реквизит формы и событие «При изменении»

Создайте реквизит формы АдресДокумента (строка). В конфигураторе свяжите Документ поля веб-документа с этим реквизитом. Присваивайте значение в коде.


4. Частые ошибки и их исправление

4.1. Теги экранированы

Если в строке вместо < стоит &lt;, браузер покажет код как текст.

// Плохо — теги уже экранированы
Строка = "&lt;b&gt;Жирный&lt;/b&gt;";

// Хорошо
Строка = "<b>Жирный</b>";

Проверьте, откуда приходят данные.


Если из базы или из внешнего API — снимите экранирование:

Функция СнятьЭкранирование(Знач Стр)
    Стр = СтрЗаменить(Стр, "&lt;", "<");
    Стр = СтрЗаменить(Стр, "&gt;", ">");
    Стр = СтрЗаменить(Стр, "&amp;", "&");
    Стр = СтрЗаменить(Стр, "&quot;", """");
    Возврат Стр;
КонецФункции

4.2. Кодировка

Если видите кракозябры, укажите кодировку явно:

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8);

Или добавьте мета-тег в HTML:

<meta charset="utf-8">



4.3. Данные приходят как строка, а поле ожидает документ

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


4.4. Пустое значение или пробелы в начале

Иногда в начале строки есть невидимые символы (BOM, нулевые символы).

Уберите их:

Строка = СокрЛП(Строка);

5. Отображение HTML в отчётах и печатных формах

Если проблема в табличном документе (отчёт, печатная форма), то там свой подход:

Ячейка.ТипЯчейки = ТипЯчейки.Текст; // по умолчанию — текст

// Для отображения HTML в ячейке нужно использовать форматирование:
Ячейка.Форматирование = Истина;
Ячейка.Текст = "<b>Жирный</b>"; // НЕ сработает — табличный документ не рендерит HTML

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


6. Платформа 8.3.23+ и новый веб-клиент

В новых версиях платформы (8.3.23 и выше) изменился механизм работы веб-элемента:

  • Используется WebView2 (Windows) или WebKitGTK (Linux).
  • Некоторые локальные файлы могут блокироваться политикой безопасности.
  • Для отладки откройте консоль разработчика: правый клик → «Просмотр кода» (если включён режим отладки).

Если в веб-клиенте поле не отображает file:///, используйте серверный способ — отдавайте HTML через HTTP-сервис:

// HTTP-сервис, отдающий HTML
Функция ПолучитьСтраницу(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки("<h1>Привет</h1>", КодировкаТекста.UTF8);
    Ответ.Заголовки.Вставить("Content-Type", "text/html; charset=utf-8");
    Возврат Ответ;
КонецФункции

А в клиенте:

Элементы.ПолеБраузер.ПерейтиК("http://вашсервер/сервис/страница");

7. Чек-лист диагностики

# Проверка Действие
1 Тип элемента формы Заменить «Надпись» на «Поле форматированного документа» или «Поле веб-документа»
2 Экранирование Убедиться, что в строке <, а не &lt;
3 Кодировка Явно указать UTF-8
4 Тип реквизита Совпадает с ожидаемым типом элемента
5 Версия платформы Для 8.3.23+ учесть особенности WebView2
6 Пустые символы СокрЛП() перед передачей
7 Табличный документ Не поддерживает HTML — использовать поле формы

Важно

  • Нужно выделить текст жирным / цветом в форме → Поле форматированного документа.
  • Нужна полноценная HTML-страница с картинками и скриптами → Поле веб-документа + временный файл или HTTP-сервис.
  • Проблема в отчёте → Табличный документ не рендерит HTML; выводить в отдельное поле формы.

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


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта