При работе с конфигурацией 1С:УНФ (Управление нашей фирмой) часто возникает необходимость отобразить или сохранить текстовую информацию в формате HTML, будь то для использования в веб-отчетах, отправки по электронной почте или отображения внутри самой системы. Рассмотрим подробно, как мы можем преобразовать обычный текст в HTML, учитывая такие нюансы, как обработка переносов строк и вставка необходимых тегов.
В ходе наших поисков мы обнаружили, что в конфигурации 1С:УНФ существует специализированная функция, предназначенная именно для этих целей. Это существенно упрощает задачу, так как нам не придется реализовывать парсер текста с нуля.
Функция ГипертекстВызовСервера.HTMLИзПростогоТекста
В конфигурации 1С:УНФ для преобразования обычного текста в HTML мы можем использовать функцию HTMLИзПростогоТекста, которая находится в общем модуле ГипертекстВызовСервера. Эта функция позволяет нам получить полноценную HTML-разметку из простой текстовой строки.
Синтаксис функции:
ГипертекстВызовСервера.HTMLИзПростогоТекста(ПростойТекст, ПолныйHTML)
Разберем параметры этой функции:
ПростойТекст: Этот параметр представляет собой исходную строку с обычным текстом, который мы хотим преобразовать.ПолныйHTML: Это логический параметр. Если мы установим его в Истина, функция вернет полный HTML-документ, включающий базовые теги <html>, <head> и <body>. Если же мы передадим Ложь, функция вернет только фрагмент HTML, подходящий для вставки в существующий <body>.Посмотрим на пример использования:
ПростойТекст = "Привет, мир!
Это первая строка.
А это вторая строка.";
// Преобразуем простой текст в полный HTML-документ
HTMLТекстПолный = ГипертекстВызовСервера.HTMLИзПростогоТекста(ПростойТекст, Истина);
Сообщить(HTMLТекстПолный);
// Преобразуем простой текст в HTML-фрагмент
HTMLТекстФрагмент = ГипертекстВызовСервера.HTMLИзПростогоТекста(ПростойТекст, Ложь);
Сообщить(HTMLТекстФрагмент);
Эта функция самостоятельно позаботится о замене специальных символов и правильном форматировании текста, что значительно экономит наше время и усилия.
В процессе преобразования текста в HTML мы часто сталкиваемся с вопросами о том, какие теги необходимо вставлять и как правильно обрабатывать переносы строк. Давайте проанализируем эти аспекты подробнее.
HTML (Hypertext Markup Language) — это язык разметки, который определяет структуру и представление содержимого веб-страниц. Браузеры, такие как Google Chrome или Mozilla Firefox, интерпретируют HTML-теги для корректного отображения отформатированного текста.
Если мы просто поместим текст внутрь тегов <body>...</body> без каких-либо дополнительных тегов форматирования, браузер, как правило, отобразит его одной сплошной строкой. Все символы переноса строки, введенные нами вручную в исходном тексте (например, нажатием клавиши Enter), будут проигнорированы. Браузер перенесет строку только в том случае, если текст достигнет конца доступной ширины окна.
Для того чтобы текст начинал новую строку именно там, где это задумано, нам необходимо использовать соответствующие HTML-теги.
<br>:
Этот тег является наиболее прямым способом создания переноса строки в HTML. Он создает разрыв строки без создания нового абзаца и добавления дополнительных вертикальных отступов. Тег <br> является одиночным (самозакрывающимся), то есть для него не требуется закрывающий тег </br>. В современном HTML5 рекомендуется использовать просто <br>.
Мы используем <br>, когда нам нужен именно перенос строки, например, в адресах, стихах или подписях, где каждый элемент должен быть на новой строке, но не должен образовывать отдельный абзац со своим отступом.
HTMLТекст = "Адрес:<br>Улица Ленина, 10<br>Город: Москва<br>Индекс: 123456";
<p>:
Тег <p> используется для определения абзацев текста. Каждый абзац, обернутый в <p>, автоматически начинается с новой строки и имеет стандартные отступы сверху и снизу, определенные стилями браузера по умолчанию или каскадными таблицами стилей (CSS).
Если наша функция ГипертекстВызовСервера.HTMLИзПростогоТекста преобразует переносы строк в абзацы, она, вероятно, будет оборачивать каждый логический абзац исходного текста в теги <p>...</p>.
HTMLТекст = "<p>Это первый абзац текста.</p><p>Это второй абзац, который будет отображен с новой строки и отступами.</p>";
white-space:
Для более тонкого контроля над обработкой пробелов и переносов строк мы можем использовать CSS-свойство white-space. Например, значение pre-wrap сохраняет все пробелы и переносы строк из исходного HTML-кода и при этом позволяет тексту автоматически переноситься по ширине элемента.
Это может быть полезно, если мы хотим, чтобы браузер полностью сохранял форматирование, как оно было в простом тексте, но при этом автоматически переносил длинные строки.
<div style="white-space: pre-wrap;">
Здесь будет текст, в котором
сохранятся все переносы строк и пробелы,
а длинные строки будут переноситься автоматически.
</div>
Критически важно помнить, что некоторые символы имеют специальное значение в HTML. К ним относятся:
< (знак "меньше") - используется для начала тега.> (знак "больше") - используется для окончания тега.& (амперсанд) - используется для начала HTML-сущностей." (двойная кавычка) - используется для значений атрибутов.' (одиночная кавычка) - также используется для значений атрибутов.Если мы хотим, чтобы эти символы отображались как обычный текст, а не интерпретировались браузером как часть HTML-разметки, их необходимо "экранировать", то есть заменить на соответствующие HTML-сущности:
< заменяется на <> заменяется на >& заменяется на &" заменяется на "' заменяется на ' или 'Хорошая функция преобразования текста в HTML, такая как ГипертекстВызовСервера.HTMLИзПростогоТекста, должна автоматически выполнять это экранирование для нас.
Функции, предназначенные для преобразования простого текста в HTML, как правило, выполняют ряд стандартных операций, чтобы обеспечить корректное и безопасное отображение текста в браузере:
\n для Unix-подобных систем, \r\n для Windows) и заменяют их на соответствующую HTML-разметку — теги <br> для простых переносов или оборачивают строки в теги <p> для абзацев. Выбор между <br> и <p> часто зависит от ожидаемого форматирования и параметров функции (например, параметра ПолныйHTML).<, >, & и др.) на их HTML-сущности, чтобы предотвратить их неправильную интерпретацию браузером и потенциальные уязвимости (например, XSS-атаки).ПолныйHTML равен Истина), функция добавит базовые структурные теги, такие как <html>, <head> (с метаданными, кодировкой) и <body>, чтобы документ был корректно сформирован и мог быть отображен в любом браузере как самостоятельная веб-страница.Помимо уже найденной нами функции ГипертекстВызовСервера.HTMLИзПростогоТекста, платформа 1С:Предприятие предлагает ряд других инструментов и подходов для работы с HTML, что расширяет наши возможности при решении различных задач:
На ИТС (Информационно-технологическое сопровождение) мы можем найти общий модуль под названием "ПоддержкаHTML". Этот модуль содержит процедуры, которые могут быть очень полезны при комплексной работе с HTML-страницами:
РазвернутьHTMLСтраницу: Эта процедура предназначена для подготовки HTML-страницы к просмотру или редактированию. Она может, например, извлекать присоединенные файлы (изображения, таблицы стилей) и делать их доступными для отображения.ПреобразоватьHTMLСтраницуПередЗаписью: Используется для преобразования HTML-страницы перед ее сохранением, например, для инкапсуляции изображений или CSS в сам HTML-файл или для очистки разметки.СохранитьHTMLСтраницу: Процедура для сохранения подготовленной HTML-страницы, возможно, с учетом всех ее зависимостей.Эти процедуры полезны, когда мы работаем с HTML как с цельным документом, который может включать внешние ресурсы.
Платформа 1С предоставляет объекты, которые позволяют нам работать с HTML на более низком уровне, манипулируя его структурой как объектной моделью документа (DOM):
ЧтениеHTML: Позволяет нам читать HTML-текст и парсить его, чтобы получить доступ к отдельным элементам и их атрибутам.ПостроительDOM: Мы можем использовать его для программного создания DOM-дерева из HTML-текста, что дает нам возможность детально анализировать и модифицировать структуру страницы.ЗаписьDOM: После модификации DOM-дерева этот объект позволяет нам записать его обратно в HTML-текст.ЗаписьHTML: Используется для потоковой записи HTML, что может быть эффективно при генерации больших HTML-документов.Эти объекты предоставляют мощный инструментарий для сложной программной обработки HTML, например, для создания HTML-редакторов или для преобразования HTML-документов по заданным правилам.
ПолучитьОбычныйТекстИзHTML (БСП "Взаимодействия")В Библиотеке стандартных подсистем (БСП), в частности, в общем модуле "Взаимодействия", мы можем найти функцию ПолучитьОбычныйТекстИзHTML. Эта функция выполняет обратную операцию — извлекает обычный, неформатированный текст из HTML-разметки. Для быстрого освоения подобных возможностей БСП рекомендуем изучить справочник по методам БСП с примерами использования. Наличие такой функции в БСП подтверждает, что разработчики 1С предусмотрели механизмы для работы с HTML как в прямом, так и в обратном направлении, что указывает на развитую поддержку работы с этим форматом в типовых решениях.
В 1С:Предприятии есть специальный элемент формы — "Поле HTML документа". Это по сути встроенный движок интернет-браузера (на ядре Webkit, как Google Chrome), который мы можем разместить прямо на форме нашего приложения. Этот элемент позволяет нам:
Использование "Поля HTML документа" открывает широкие возможности для интеграции веб-технологий. Например, существует интересный подход для замены поля ввода на платформе используя возможности поля HTML документ, который особенно актуален для веб-клиента.
plainText (сторонние решения)Хотя напрямую не относится к типовым механизмам 1С, некоторые платформы и библиотеки, работающие с текстом (например, GreenData), могут предоставлять функцию plainText(text). Ее назначение — очистка текста от форматирования путем удаления всех HTML-тегов, оставляя только чистое текстовое содержимое. Это полезно, когда нам нужно получить "сырой" текст без какой-либо разметки.
ГипертекстВызовСервера.HTMLИзПростогоТекстаВозникает логичный вопрос: к какой подсистеме относится общий модуль ГипертекстВызовСервера? В 1С:Предприятии подсистемы служат для структурирования конфигурации, группируя объекты по их функциональному назначению и формируя элементы пользовательского интерфейса.
Библиотека стандартных подсистем (БСП) — это набор готовых функциональных блоков, которые можно встраивать в прикладные решения 1С. Хотя первоначально в БСП такая функция не была найдена, это не исключает ее присутствия в других подсистемах конфигурации УНФ или в специализированных библиотеках, которые используются в УНФ.
Наиболее вероятно, что модуль ГипертекстВызовСервера входит в подсистему, отвечающую за:
Для точного определения подсистемы мы можем открыть конфигурацию УНФ в режиме "Конфигуратор" и через поиск по метаданным найти общий модуль ГипертекстВызовСервера. В свойствах модуля или через контекстное меню мы сможем увидеть, к каким подсистемам он относится.
Таким образом, функция ГипертекстВызовСервера.HTMLИзПростогоТекста является мощным и удобным инструментом для преобразования текстовых данных в HTML-формат в 1С:УНФ, позволяя нам легко интегрировать форматированный текст в наши приложения.