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

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

При интеграции 1С с интернет-магазинами и сторонними сервисами часто возникает необходимость редактировать текстовые описания товаров с HTML-разметкой. Однако при использовании штатного объекта ФорматированныйДокумент разработчики часто сталкиваются со следующей проблемой: простой фрагмент вида <p><b>Привет мир</b></p> после загрузки и обратной выгрузки превращается в массивный HTML-документ со служебными заголовками, стилями <style>, а также встроенными стилями <span style="font-weight: bold;">.

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

Выясним причину: как работает «ФорматированныйДокумент»

Рассмотрим внутреннее устройство объекта ФорматированныйДокумент. Этот объект не является прямым редактором сырого HTML-кода. Внутри платформы он работает с собственным внутренним объектным представлением текста (абзацы, шрифты, параметры форматирования, списки и таблицы).

Проанализируем цепочку преобразований:

  1. При вызове метода УстановитьHTML платформенный парсер читает переданную строку, разбирает доступные теги и переводит их во внутренний формат 1С.
  2. При обратном вызове метода ПолучитьHTML 1С заново генерирует стандартную веб-страницу. В результат автоматически добавляются служебные теги <html>, <head>, <style> и <body>, а логические теги оформления (например, <b> или <i>) заменяются на универсальные <span> со стилями CSS.

Таким образом, операция «выгрузить в HTML — загрузить обратно» принципиально не гарантирует совпадения строки с исходным кодом. Если для сайта требуется только чистый внутренний фрагмент (body), эти системные обертки необходимо удалять.

Способ 1. Извлечение HTML-фрагмента через объекты работы с DOM

Рассмотрим способ очистки выгруженного HTML-кода. Мы можем прочитать полученную от ФорматированныйДокумент строку как документ DOM с помощью объектов ЧтениеHTML и ПостроительDOM, а затем обрезать системные теги и выгрузить только дочерние узлы элемента Тело (body).

Посмотрим на пример реализации данного алгоритма в 1С:


// Выгружаем данные из объекта "ФорматированныйДокумент"
Описание.ПолучитьHTML(Содержимое, Новый Структура);

// Инициализируем объекты для чтения и построения DOM-модели
Построитель = Новый ПостроительDOM;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(Содержимое);
ДокументHTML = Построитель.Прочитать(ЧтениеHTML); 

// Подготавливаем объекты для записи фильтрованного DOM
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьHTML = Новый ЗаписьHTML;
ЗаписьHTML.УстановитьСтроку();

// Обходим дочерние узлы тела документа, исключая крайние служебные элементы при необходимости
Для Каждого Элемент Из ДокументHTML.Тело.ДочерниеУзлы Цикл
    Если Элемент = ДокументHTML.Тело.ДочерниеУзлы[0]
        ИЛИ Элемент = ДокументHTML.Тело.ДочерниеУзлы[ДокументHTML.Тело.ДочерниеУзлы.Количество() - 1] Тогда
        Продолжить;
    КонецЕсли;

    ЗаписьDOM.Записать(Элемент, ЗаписьHTML);
КонецЦикла;

// Получаем итоговый очищенный HTML-фрагмент
Содержимое = ЗаписьHTML.Закрыть();

Важно: этот метод позволяет избавиться от внешних оболочек <html>, <head> и <body>, оставив только содержательные блоки для публикации на сайте.

Способ 2. Альтернативные варианты редактирования HTML в 1С

Если специфика вашего проекта требует сохранения точного HTML-кода (включая уникальные CSS-классы, теги <iframe>, JS-скрипты или кастомную верстку), встроенный ФорматированныйДокумент не подойдет, так как он вырезает неподдерживаемые элементы. В таких случаях разберем два альтернативных решения:

  1. Редактирование сырого текста с предпросмотром: На форму выводится обычное многострочное поле ввода для редактирования исходного текста HTML и элемент формы вида ПолеHTMLДокумента. В текстовом поле пользователь правит код, а в поле HTML-документа через метод УстановитьТекст отображается живой предпросмотр. Это гарантирует 100% сохранность верстки.
  2. Использование внешнего JS-редактора (WYSIWYG): В элемент ПолеHTMLДокумента загружается готовый визуальный редактор на JavaScript (например, CKEditor, TinyMCE или Summernote). Обмен HTML-строкой между 1С и редактором выполняется с помощью вызовов JavaScript-функций и обработки событий элемента формы.
← На главную