Подробный гайд: Поле в 1С выводит HTML-код вместо разметки
Почему это происходит
Когда вы видите <b>Текст</b> вместо Текст, причина всегда одна: платформа воспринимает содержимое как обычную строку, а не как HTML-документ. Разберём все варианты решения от простого к сложному.
1. Проверьте тип элемента формы
Неправильно: «Поле надписи»
Элемент «Поле надписи» (тип Надпись) всегда выводит текст как есть. Даже если в свойстве Заголовок или в данных содержится HTML — теги не интерпретируются.
Правильно: используйте подходящий элемент
| Задача | Элемент формы |
|---|---|
| Простое форматирование (жирный, цвет, списки) | Поле форматированного документа |
| Полноценная HTML-страница | Поле веб-документа (браузер) |
| Отображение HTML из внешнего источника | Поле веб-документа + установка данных |
Откройте конфигуратор → форма → удалите элемент «Поле надписи» → добавьте новый элемент нужного типа.
2. Поле форматированного документа (простой случай)
Если вам нужно отобразить небольшой фрагмент с тегами:
В конфигураторе
- Добавить элемент → тип «Поле форматированного документа».
- Свойство
Формат: оставить пустым или указатьФормат=HTML.
В коде модуля формы
&НаКлиенте
Процедура ПоказатьТекст()
Элементы.МоеПоле.Документ = "<b>Привет</b>, <i>мир</i>!";
КонецПроцедуры
Если Документ ожидает объект ФорматированныйДокумент, формируйте его:
&НаКлиенте
Процедура ПоказатьТекст()
Формат = Новый ФорматированнаяСтрока;
Формат.Текст = "<b>Привет</b>";
Элементы.МоеПоле.Документ = Формат;
КонецПроцедуры
3. Поле веб-документа (полноценный HTML)
Это браузерный элемент (на базе Chromium/WebView2 в новых платформах или IE в старых). Он корректно рендерит любой HTML.
Шаги в конфигураторе
- Добавить элемент формы → тип «Поле веб-документа».
- Задать имя, например
ПолеБраузер. - Свойства по умолчанию подходят.
Загрузка 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. Теги экранированы
Если в строке вместо < стоит <, браузер покажет код как текст.
// Плохо — теги уже экранированы
Строка = "<b>Жирный</b>";
// Хорошо
Строка = "<b>Жирный</b>";
Проверьте, откуда приходят данные.
Если из базы или из внешнего API — снимите экранирование:
Функция СнятьЭкранирование(Знач Стр)
Стр = СтрЗаменить(Стр, "<", "<");
Стр = СтрЗаменить(Стр, ">", ">");
Стр = СтрЗаменить(Стр, "&", "&");
Стр = СтрЗаменить(Стр, """, """");
Возврат Стр;
КонецФункции
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 | Экранирование | Убедиться, что в строке <, а не < |
| 3 | Кодировка | Явно указать UTF-8 |
| 4 | Тип реквизита | Совпадает с ожидаемым типом элемента |
| 5 | Версия платформы | Для 8.3.23+ учесть особенности WebView2 |
| 6 | Пустые символы | СокрЛП() перед передачей |
| 7 | Табличный документ | Не поддерживает HTML — использовать поле формы |
Важно
- Нужно выделить текст жирным / цветом в форме → Поле форматированного документа.
- Нужна полноценная HTML-страница с картинками и скриптами → Поле веб-документа + временный файл или HTTP-сервис.
- Проблема в отчёте → Табличный документ не рендерит HTML; выводить в отдельное поле формы.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.