Как преобразовать обычный текст в HTML в 1С:УНФ с сохранением форматирования и переносов строк?

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

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

Обнаружение встроенной функции для преобразования текста в HTML

В ходе наших поисков мы обнаружили, что в конфигурации 1С:УНФ существует специализированная функция, предназначенная именно для этих целей. Это существенно упрощает задачу, так как нам не придется реализовывать парсер текста с нуля.

Функция ГипертекстВызовСервера.HTMLИзПростогоТекста

В конфигурации 1С:УНФ для преобразования обычного текста в HTML мы можем использовать функцию HTMLИзПростогоТекста, которая находится в общем модуле ГипертекстВызовСервера. Эта функция позволяет нам получить полноценную HTML-разметку из простой текстовой строки.

Синтаксис функции:

ГипертекстВызовСервера.HTMLИзПростогоТекста(ПростойТекст, ПолныйHTML)

Разберем параметры этой функции:

  1. ПростойТекст: Этот параметр представляет собой исходную строку с обычным текстом, который мы хотим преобразовать.
  2. ПолныйHTML: Это логический параметр. Если мы установим его в Истина, функция вернет полный HTML-документ, включающий базовые теги <html>, <head> и <body>. Если же мы передадим Ложь, функция вернет только фрагмент HTML, подходящий для вставки в существующий <body>.

Посмотрим на пример использования:


ПростойТекст = "Привет, мир!
Это первая строка.
А это вторая строка.";

// Преобразуем простой текст в полный HTML-документ
HTMLТекстПолный = ГипертекстВызовСервера.HTMLИзПростогоТекста(ПростойТекст, Истина);
Сообщить(HTMLТекстПолный);

// Преобразуем простой текст в HTML-фрагмент
HTMLТекстФрагмент = ГипертекстВызовСервера.HTMLИзПростогоТекста(ПростойТекст, Ложь);
Сообщить(HTMLТекстФрагмент);

Эта функция самостоятельно позаботится о замене специальных символов и правильном форматировании текста, что значительно экономит наше время и усилия.

Особенности работы с тегами и переносами строк в HTML

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

Назначение HTML тегов и поведение браузеров

HTML (Hypertext Markup Language) — это язык разметки, который определяет структуру и представление содержимого веб-страниц. Браузеры, такие как Google Chrome или Mozilla Firefox, интерпретируют HTML-теги для корректного отображения отформатированного текста.

Если мы просто поместим текст внутрь тегов <body>...</body> без каких-либо дополнительных тегов форматирования, браузер, как правило, отобразит его одной сплошной строкой. Все символы переноса строки, введенные нами вручную в исходном тексте (например, нажатием клавиши Enter), будут проигнорированы. Браузер перенесет строку только в том случае, если текст достигнет конца доступной ширины окна.

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

Обработка переносов строк

  1. Тег <br>:

    Этот тег является наиболее прямым способом создания переноса строки в HTML. Он создает разрыв строки без создания нового абзаца и добавления дополнительных вертикальных отступов. Тег <br> является одиночным (самозакрывающимся), то есть для него не требуется закрывающий тег </br>. В современном HTML5 рекомендуется использовать просто <br>.

    Мы используем <br>, когда нам нужен именно перенос строки, например, в адресах, стихах или подписях, где каждый элемент должен быть на новой строке, но не должен образовывать отдельный абзац со своим отступом.

    HTMLТекст = "Адрес:<br>Улица Ленина, 10<br>Город: Москва<br>Индекс: 123456";
  2. Тег <p>:

    Тег <p> используется для определения абзацев текста. Каждый абзац, обернутый в <p>, автоматически начинается с новой строки и имеет стандартные отступы сверху и снизу, определенные стилями браузера по умолчанию или каскадными таблицами стилей (CSS).

    Если наша функция ГипертекстВызовСервера.HTMLИзПростогоТекста преобразует переносы строк в абзацы, она, вероятно, будет оборачивать каждый логический абзац исходного текста в теги <p>...</p>.

    
    HTMLТекст = "<p>Это первый абзац текста.</p><p>Это второй абзац, который будет отображен с новой строки и отступами.</p>";
    
  3. CSS свойство white-space:

    Для более тонкого контроля над обработкой пробелов и переносов строк мы можем использовать CSS-свойство white-space. Например, значение pre-wrap сохраняет все пробелы и переносы строк из исходного HTML-кода и при этом позволяет тексту автоматически переноситься по ширине элемента.

    Это может быть полезно, если мы хотим, чтобы браузер полностью сохранял форматирование, как оно было в простом тексте, но при этом автоматически переносил длинные строки.

    
    <div style="white-space: pre-wrap;">
        Здесь будет текст, в котором
        сохранятся все переносы строк и пробелы,
        а длинные строки будут переноситься автоматически.
    </div>
    

Экранирование специальных символов

Критически важно помнить, что некоторые символы имеют специальное значение в HTML. К ним относятся:

Если мы хотим, чтобы эти символы отображались как обычный текст, а не интерпретировались браузером как часть HTML-разметки, их необходимо "экранировать", то есть заменить на соответствующие HTML-сущности:

  1. < заменяется на &lt;
  2. > заменяется на &gt;
  3. & заменяется на &amp;
  4. " заменяется на &quot;
  5. ' заменяется на &#39; или &apos;

Хорошая функция преобразования текста в HTML, такая как ГипертекстВызовСервера.HTMLИзПростогоТекста, должна автоматически выполнять это экранирование для нас.

Принципы работы функций преобразования текста в HTML

Функции, предназначенные для преобразования простого текста в HTML, как правило, выполняют ряд стандартных операций, чтобы обеспечить корректное и безопасное отображение текста в браузере:

  1. Замена символов переноса строки: Определяют, какие символы используются для обозначения переноса строки в исходном тексте (\n для Unix-подобных систем, \r\n для Windows) и заменяют их на соответствующую HTML-разметку — теги <br> для простых переносов или оборачивают строки в теги <p> для абзацев. Выбор между <br> и <p> часто зависит от ожидаемого форматирования и параметров функции (например, параметра ПолныйHTML).
  2. Экранирование специальных символов: Автоматически заменяют HTML-зарезервированные символы (<, >, & и др.) на их HTML-сущности, чтобы предотвратить их неправильную интерпретацию браузером и потенциальные уязвимости (например, XSS-атаки).
  3. Оборачивание в структурные теги: Если требуется создать полноценный HTML-документ (как в случае, когда параметр ПолныйHTML равен Истина), функция добавит базовые структурные теги, такие как <html>, <head> (с метаданными, кодировкой) и <body>, чтобы документ был корректно сформирован и мог быть отображен в любом браузере как самостоятельная веб-страница.

Механизмы работы с HTML в 1С:Предприятии

Помимо уже найденной нами функции ГипертекстВызовСервера.HTMLИзПростогоТекста, платформа 1С:Предприятие предлагает ряд других инструментов и подходов для работы с HTML, что расширяет наши возможности при решении различных задач:

Общий модуль "ПоддержкаHTML" (ИТС)

На ИТС (Информационно-технологическое сопровождение) мы можем найти общий модуль под названием "ПоддержкаHTML". Этот модуль содержит процедуры, которые могут быть очень полезны при комплексной работе с HTML-страницами:

  1. РазвернутьHTMLСтраницу: Эта процедура предназначена для подготовки HTML-страницы к просмотру или редактированию. Она может, например, извлекать присоединенные файлы (изображения, таблицы стилей) и делать их доступными для отображения.
  2. ПреобразоватьHTMLСтраницуПередЗаписью: Используется для преобразования HTML-страницы перед ее сохранением, например, для инкапсуляции изображений или CSS в сам HTML-файл или для очистки разметки.
  3. СохранитьHTMLСтраницу: Процедура для сохранения подготовленной HTML-страницы, возможно, с учетом всех ее зависимостей.

Эти процедуры полезны, когда мы работаем с HTML как с цельным документом, который может включать внешние ресурсы.

Объекты "ЧтениеHTML", "ПостроительDOM", "ЗаписьDOM", "ЗаписьHTML"

Платформа 1С предоставляет объекты, которые позволяют нам работать с HTML на более низком уровне, манипулируя его структурой как объектной моделью документа (DOM):

  1. ЧтениеHTML: Позволяет нам читать HTML-текст и парсить его, чтобы получить доступ к отдельным элементам и их атрибутам.
  2. ПостроительDOM: Мы можем использовать его для программного создания DOM-дерева из HTML-текста, что дает нам возможность детально анализировать и модифицировать структуру страницы.
  3. ЗаписьDOM: После модификации DOM-дерева этот объект позволяет нам записать его обратно в HTML-текст.
  4. ЗаписьHTML: Используется для потоковой записи HTML, что может быть эффективно при генерации больших HTML-документов.

Эти объекты предоставляют мощный инструментарий для сложной программной обработки HTML, например, для создания HTML-редакторов или для преобразования HTML-документов по заданным правилам.

Функция ПолучитьОбычныйТекстИзHTML (БСП "Взаимодействия")

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

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

В 1С:Предприятии есть специальный элемент формы — "Поле HTML документа". Это по сути встроенный движок интернет-браузера (на ядре Webkit, как Google Chrome), который мы можем разместить прямо на форме нашего приложения. Этот элемент позволяет нам:

Использование "Поля HTML документа" открывает широкие возможности для интеграции веб-технологий. Например, существует интересный подход для замены поля ввода на платформе используя возможности поля HTML документ, который особенно актуален для веб-клиента.

Функция plainText (сторонние решения)

Хотя напрямую не относится к типовым механизмам 1С, некоторые платформы и библиотеки, работающие с текстом (например, GreenData), могут предоставлять функцию plainText(text). Ее назначение — очистка текста от форматирования путем удаления всех HTML-тегов, оставляя только чистое текстовое содержимое. Это полезно, когда нам нужно получить "сырой" текст без какой-либо разметки.

Определение подсистемы для функции ГипертекстВызовСервера.HTMLИзПростогоТекста

Возникает логичный вопрос: к какой подсистеме относится общий модуль ГипертекстВызовСервера? В 1С:Предприятии подсистемы служат для структурирования конфигурации, группируя объекты по их функциональному назначению и формируя элементы пользовательского интерфейса.

Библиотека стандартных подсистем (БСП) — это набор готовых функциональных блоков, которые можно встраивать в прикладные решения 1С. Хотя первоначально в БСП такая функция не была найдена, это не исключает ее присутствия в других подсистемах конфигурации УНФ или в специализированных библиотеках, которые используются в УНФ.

Наиболее вероятно, что модуль ГипертекстВызовСервера входит в подсистему, отвечающую за:

Для точного определения подсистемы мы можем открыть конфигурацию УНФ в режиме "Конфигуратор" и через поиск по метаданным найти общий модуль ГипертекстВызовСервера. В свойствах модуля или через контекстное меню мы сможем увидеть, к каким подсистемам он относится.

Таким образом, функция ГипертекстВызовСервера.HTMLИзПростогоТекста является мощным и удобным инструментом для преобразования текстовых данных в HTML-формат в 1С:УНФ, позволяя нам легко интегрировать форматированный текст в наши приложения.

← На главную