Как отобразить произвольный текст и веб-страницы в поле HTML-документа 1С

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

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

Способ 1. Загрузка текста из файла и передача в реквизит формы

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

Проанализируем базовый алгоритм шагов:

  1. Создадим на форме реквизит с типом Строка (например, ТекстHTML).
  2. Добавим на форму элемент вида Поле HTML документа и свяжем его свойство ПутьКДанным с созданным реквизитом.
  3. Считаем файл с помощью объекта ЧтениеТекста.
  4. Если исходный файл содержит чистый текст без HTML-разметки, обернем его в стандартные теги <html><body>...</body></html>.

Посмотрим на пример кода для чтения файла и формирования HTML-структуры:


Чтение = Новый ЧтениеТекста;
Чтение.ОткрытьФайл(ПутьКФайлу, КодировкаТекста.UTF8);
ИсходныйТекст = Чтение.Прочитать();
Чтение.Закрыть();

// Формируем корректный HTML-документ с указанием кодировки
Разметка = "<html><head><meta charset=""utf-8""><meta http-equiv=""X-UA-Compatible"" content=""IE=edge""></head><body>" 
         + ИсходныйТекст 
         + "</body></html>";

Объект.РеквизитHTML = Разметка;

Способ 2. Прямая навигация к локальному файлу или веб-странице

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

Рассмотрим пример загрузки локального файла по протоколу file:///:


ПутьКФайлу = "C:/Templates/Page.html";
Элементы.ПолеHTMLДокумента.Перейти("file:///" + СтрЗаменить(ПутьКФайлу, "\", "/"));

Как объединить две и более страницы в одном поле HTML

Выясним, как отобразить несколько веб-страниц или блоков контента внутри одного элемента управления. Для этого существуют два основных подхода:

  1. Использование фреймов (<iframe>): В итоговый HTML-шаблон встраиваются теги <iframe>, указывающие на разные URL-адреса или файлы. Это позволяет отображать несколько независимых веб-страниц на одном экране.
    
    Разметка = "<html><body>"
             + "<iframe src=""https://site1.com"" width=""100%"" height=""300""></iframe>"
             + "<iframe src=""https://site2.com"" width=""100%"" height=""300""></iframe>"
             + "</body></html>";
    Объект.РеквизитHTML = Разметка;
    
  2. Программная сборка контента на сервере: Содержимое нескольких страниц запрашивается через объект HTTPСоединение и HTTPЗапрос. Полученные тела ответов объединяются в единый HTML-код перед выводом на форму.

Важные технические нюансы

При работе с HTML-полем в 1С следует учитывать следующие особенности:

  1. Экранирование спецсимволов: Если выводимый текст не содержит HTML-тегов, символы <, > и & могут исказить отображение. Чтобы сохранить переносы строк и исходный форматированный вид, текст стоит оборачивать в тег <pre>...</pre>.
  2. Кодировка и режим рендеринга: Всегда указывайте в блоке <head> мета-тег <meta charset="utf-8">, чтобы избежать проблем с кракозябрами, и <meta http-equiv="X-UA-Compatible" content="IE=edge"> для коректного применения стилей и скриптов встроенным движком.
  3. Альтернативные элементы формы: Если задача сводится к простому просмотру текста с базовым оформлением (цвета, шрифты, картинки), удобно использовать ФорматированныйДокумент или стандартное Поле текстового документа без погружения в HTML-разметку.
← На главную