Как работать с текстом с форматированием и HTML-тегами в 1С?

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

При автоматизации предметных областей со специфическим текстовым наполнением (например, медицина, юриспруденция или технические описания) часто возникает необходимость хранить, редактировать и выводить на печать текст с форматированием (подстрочные и надстрочные символы, цвета, шрифты, выделения). В 1С:Предприятие 8 стандартная реквизитная строка не поддерживает внутренние стили. Рассмотрим, какие механизмы платформы позволяют решить задачи работы с formatted/rich text.

Хранение и редактирование с помощью объекта ФорматированныйДокумент

Наиболее удобным и штатным способом работы с обогащенным текстом на управляемой форме является использование специального типа данных ФорматированныйДокумент.

Для реализации этого подхода выполним следующие шаги:

  1. В реквизитах объекта базы данных (справочника или документа) создадим реквизит с типом ХранилищеЗначения. Именно в нем будет бинарно сохраняться объект ФорматированныйДокумент.
  2. На управляемой форме создадим реквизит формы с типом ФорматированныйДокумент.
  3. Разместим элемент на форме. Платформа автоматически создаст редактор текста с визуальной панелью инструментов (выбор шрифта, размера, начертания, выравнивания и списков).

Разберем, как программно прочитать и сохранить данные при работе с формой:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Прочитываем объект из хранилища значения при открытии формы
    ФорматированныйТекст = Объект.ХранилищеТекста.Получить();
    Если ТипЗнч(ФорматированныйТекст) = Тип("ФорматированныйДокумент") Тогда
        РеквизитФормыТекст = ФорматированныйТекст;
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    // Сохраняем объект в хранилище перед записью в базу данных
    ТекущийОбъект.ХранилищеТекста = Новый ХранилищеЗначения(РеквизитФормыТекст);
КонецПроцедуры

Редактирование HTML через ПолеHTMLДокумента и атрибут contenteditable

Если данные изначально приходят в формате HTML-строки с CSS-стилями, для их визуализации на форме используется элемент типа Поле HTML документа. Однако по умолчанию это поле работает в режиме просмотра. Посмотрим, как включить редактирование разметки напрямую внутри браузерного элемента.

Для включения возможности редактирования текста достаточно прописать атрибут contenteditable="true" в теге <body> загружаемой страницы. Проанализируем пример манипуляции DOM-моделью документа на клиенте:


&НаКлиенте
Процедура ПолучитьСодержимоеHTML()
    // Получение редактируемой HTML-строки с форматированием
    HTMLТекст = Элементы.ПолеHTML.Документ.body.innerHTML;
    
    // Получение чистого текста без HTML-тегов
    ОбычныйТекст = Элементы.ПолеHTML.Документ.body.innerText;
КонецПроцедуры

Важно: Данный подход отлично подходит для быстрого просмотра и мелкой правки готовых разметок, но для построения полнофункционального WYSIWYG-редактора в тонком и веб-клиенте рекомендуется подключать специализированные библиотеки JavaScript (например, TinyMCE или CKEditor).

Преобразование HTML и форматированного документа в простой текст (Plain Text)

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

Если текст загружен в объект ФорматированныйДокумент, получение неразмеченной строки выполняется с помощью метода ПолучитьТекст():


// Извлекаем чистую строку без тегов и оформления
ЧистыйТекст = ОбъектФорматированныйДокумент.ПолучитьТекст();

Если необходимо перегнать форматированный документ в строку HTML или наоборот, используются методы ПолучитьHTML() и УстановитьHTML():


&НаКлиенте
Процедура ПреобразоватьВHTML()
    Перем СтрокаHTML, СтруктураКартинок;
    
    // Экспортируем данные из объекта в HTML-строку
    ОбъектФорматированныйДокумент.ПолучитьHTML(СтрокаHTML, СтруктураКартинок);
    
    // Сохраняем полученную строку в текстовый файл при необходимости
    ТекстовыйДок = Новый ТекстовыйДокумент;
    ТекстовыйДок.УстановитьТекст(СтрокаHTML);
    ТекстовыйДок.Записать("C:\temp\document.html");
КонецПроцедуры

Вывод форматированного текста в печатные формы и файлы Word

Проанализируем варианты вывода отформатированных данных в печатную продукцию:

  1. Вывод в ячейку табличного документа 1С: Ячейка табличного документа не может отображать произвольный HTML-код напрямую. Однако она поддерживает тип ФорматированнаяСтрока. Вы можете сформировать объект типа ФорматированнаяСтрока с нужными шрифтами и цветами отдельных слов и присвоить его параметру ячейки.
  2. Формирование документов MS Word (DOCX): Если вам необходимо вставить кусок HTML в документ Word без потери стилей, наиболее производительным способом является использование конструкции altChunk при формировании структуры DOCX или программный импорт через COM-объект Word путем вставки предварительно сохраненных временных HTML-файлов.
← На главную