При разработке интерфейсов для работы с электронной почтой, базами знаний или тикет-системами (например, в решениях класса ITIL) часто требуется предоставить пользователю возможность оформления текста: изменение шрифтов, цветов, добавление списков, таблиц и отступов. В платформе 1С:Предприятие эту задачу можно решить двумя принципиально разными путями: с помощью нативного элемента ФорматированныйДокумент или посредством интеграции веб-редактора в ПолеHTMLДокумента. Разберем по шагам оба подхода, их особенности, методы работы и сопутствующие ограничения.
Самый простой и быстрый способ добавить визуальное форматирование на управляемую форму — использовать встроенный тип данных ФорматированныйДокумент. Этот объект предоставляет готовую командную панель со стандартным набором инструментов для работы со шрифтами, выравниванием и цветом.
Рассмотрим порядок настройки реквизитов формы:
ФорматированныйДокумент.ХранилищеЗначения. При чтении данных извлекаем объект из хранилища, а при записи — упаковываем обратно.Выясним причину частой проблемы при работе с почтой: как загрузить в форматированный документ входящий текст письма, оформленный в виде HTML. Для этого в платформе предусмотрен штатный метод УстановитьHTML. Проанализируем его синтаксис:
ФорматированныйДокумент.УстановитьHTML(<ТекстHTML>, <Вложения>)
Параметры метода:
Картинка.Посмотрим на пример серверной процедуры, выполняющей загрузку разметки и последующую обратную выгрузку в строку HTML:
&НаСервере
Процедура ЗагрузитьHTMLВФорматированныйДокумент(ТекстHTML, СтруктураВложений)
// Преобразуем входящий HTML в ФорматированныйДокумент
ФорматированныйДокументРеквизит.УстановитьHTML(ТекстHTML, СтруктураВложений);
КонецПроцедуры
&НаСервере
Функция ВыгрузитьHTMLИзФорматированногоДокумента(СтруктураВложений)
// Получаем строку HTML и извлекаем новые вложения
ТекстHTML = "";
ФорматированныйДокументРеквизит.ПолучитьHTML(ТекстHTML, СтруктураВложений);
Возврат ТекстHTML;
КонецФункции
Обратим внимание на важное ограничение: методы УстановитьHTML и ПолучитьHTML доступны исключительно на стороне сервера или во внешнем соединении. На тонком клиенте выполнить эти методы напрямую нельзя, поэтому требуется вызов серверного контекста.
Кроме того, нативный ФорматированныйДокумент имеет ряд архитектурных ограничений:
div) и скрипты, что может нарушить верстку сложных входящих писем.cid:) нужно программно извлекать из письма и передавать в структуру вложений отдельным списком.В тиражных отраслевых конфигурациях (включая ITIL и продвинутые системы документооборота) разработчики чаще выбирают более функциональный подход — использование элемента формы ПолеHTMLДокумента. Внутрь этого поля загружается веб-страница с готовым WYSIWYG-редактором на JavaScript (например, TinyMCE, CKEditor, Quill или Summernote).
Разберем по шагам, как устроено такое взаимодействие:
ДвоичныеДанные или ТекстовыйДокумент помещаются файлы HTML-страницы, скрипты редактора и стили оформления.ПолеHTMLДокумента загружается HTML-шаблон. Текст для редактирования подставляется в разметку на этапе генерации страницы либо передается динамически через DOM-модель.Элементы.ПолеHTML.Документ.defaultView, что позволяет выполнять JavaScript-функции.v8:saveContent?...). На стороне 1С перехватывается событие элемента формы ПриНажатии или событие перехода по URL, после чего переданные данные считываются и сохраняются в реквизитах формы.При использовании поля HTML важно учитывать кроссплатформенность решения:
Таким образом, если перед нами стоит задача быстро предоставить пользователю базовое форматирование шрифтов и списков, оптимальным выбором будет нативный ФорматированныйДокумент с вызовами УстановитьHTML на сервере. Если же требуются полноценная работа с таблицами, гибкая разметка писем и богатая панель инструментов, задачу следует решать интеграцией стороннего JavaScript-редактора в ПолеHTMLДокумента.