Разработчики 1С часто сталкиваются с неприятной ситуацией: при добавлении на управляемую форму стандартного элемента «Форматированный документ» поле отображается серым, не реагирует на ввод с клавиатуры, либо текст, переданный в него программно через метод УстановитьHTML(), попросту не выводится на экран. При этом отладчик показывает, что внутри объекта текст присутствует, а метод ПолучитьHTML() успешно возвращает исходную разметку.
В этой статье мы подробно разберем, почему возникает эта платформенная проблема, проанализируем её технические причины, связанные с системным окружением Windows, и рассмотрим несколько надежных способов её решения.
В старых версиях платформы «1С:Предприятие» (включая ветку 8.2 и релизы 8.3 до версии 8.3.14) элемент управления «Форматированный документ» в тонком и толстом клиентах работал исключительно на базе системной библиотеки Windows — MSHTML (движок браузера Internet Explorer).
Если в операционной системе пользователя (особенно часто это происходит в терминальных сессиях RDP на Windows Server) установлены жесткие политики безопасности или повреждены системные библиотеки, элемент управления блокируется. К основным системным факторам относятся:
jscript.dll.Поскольку элемент формы под капотом пытается запустить мини-редактор на HTML-движке, блокировка скриптов приводит к тому, что поле визуально «умирает» — оно перестает быть доступным для ввода и не может отрисовать переданный текст.
Метод УстановитьHTML() объекта ФорматированныйДокумент имеет очень жесткие ограничения на поддерживаемые теги. Этот объект предназначен для создания простых текстов с базовым оформлением (шрифты, цвета, списки, простые картинки). Если вы попытаетесь передать туда сложный HTML-код, содержащий:
<div> со сложным позиционированием;<table>;<script>.Встроенный парсер 1С не сможет корректно обработать и отобразить эти элементы. Объект сохранит исходный код (поэтому обратный метод сработает), но визуальный редактор на форме сломается, отобразив пустой лист.
---
Самый простой и надежный способ победить эту проблему раз и навсегда — обновить платформу «1С:Предприятие». Начиная с версии 8.3.14, компания 1С полностью отказалась от устаревшего движка Internet Explorer в пользу современного встроенного веб-компонента на базе WebKit (Chromium).
Практика показывает, что на релизах платформы начиная с 8.3.12.1790 и выше, большинство проблем с зависанием элемента управления пропадают сами собой, так как разработчики платформы существенно оптимизировали взаимодействие с системными библиотеками отрисовки.
Если у вас нет возможности оперативно обновить платформу (например, информационная база работает на старых релизах 8.2 или 8.3.10), вам придется настроить параметры операционной системы:
regsvr32 jscript.dll
Давайте разберем по шагам, как правильно передавать текст в объект ФорматированныйДокумент, избегая конфликтов парсера. Мы должны передавать только максимально очищенный HTML-код с базовым форматированием.
Рассмотрим пример правильной программной инициализации текста на форме:
&НаКлиенте
Процедура ЗаполнитьДокумент()
// Подготовим простейший HTML с поддержкой только базовых тегов
ТекстHTML = "<html><body><p style=""font-family: Arial; font-size: 12pt; color: #333333;"">"
+ "Добро пожаловать в редактор 1С!</p>"
+ "<ul><li>Первый пункт</li><li>Второй пункт</li></ul>"
+ "</body></html>";
// Инициализируем структуру вложений (картинок)
Вложения = Новый Структура;
// Передаем данные в реквизит формы, имеющий тип "ФорматированныйДокумент"
Объект.ИмяРеквизитаФорматированныйДокумент.УстановитьHTML(ТекстHTML, Вложения);
КонецПроцедуры
Обратите внимание: избегайте вложенных контейнеров <div> и использования внешних CSS-классов. Все стили оформления (размер шрифта, цвет, отступы) желательно задавать непосредственно внутри тегов через атрибут style (inline-стили).
В управляемых формах для полноценного редактирования форматированного документа обязательно должна быть создана соответствующая командная панель. Без нее поле может вести себя некорректно.
Выполним следующие шаги по настройке элементов формы:
ФорматированныйДокумент).Если стандартный «Форматированный документ» категорически отказывается работать или его функционала вам недостаточно (например, требуется вставка таблиц, работа с кодом, сложная верстка), рассмотрите профессиональную альтернативу. Вместо капризного стандартного поля можно использовать обычное ПолеHTMLДокумента, внедрив в него бесплатный визуальный JavaScript-редактор, такой как TinyMCE или CKEditor.
Этот подход отлично работает на современных версиях платформы 1С с движком WebKit. Интеграция выполняется по следующему принципу:
<textarea>.Документ.parentWindow (для старых платформ) или через обработку событий ПриНажатии / ПриИзменении обмениваетесь текстом между JavaScript и кодом 1С.Такой подход полностью решает проблемы кроссплатформенности и позволяет вашим пользователям работать с текстами любой сложности без зависаний интерфейса.