Почему не работает или не редактируется «Форматированный документ» в 1С и как это исправить?

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

Разработчики 1С часто сталкиваются с неприятной ситуацией: при добавлении на управляемую форму стандартного элемента «Форматированный документ» поле отображается серым, не реагирует на ввод с клавиатуры, либо текст, переданный в него программно через метод УстановитьHTML(), попросту не выводится на экран. При этом отладчик показывает, что внутри объекта текст присутствует, а метод ПолучитьHTML() успешно возвращает исходную разметку.

В этой статье мы подробно разберем, почему возникает эта платформенная проблема, проанализируем её технические причины, связанные с системным окружением Windows, и рассмотрим несколько надежных способов её решения.

Причина 1: Зависимость от системного браузера Internet Explorer (движок MSHTML)

В старых версиях платформы «1С:Предприятие» (включая ветку 8.2 и релизы 8.3 до версии 8.3.14) элемент управления «Форматированный документ» в тонком и толстом клиентах работал исключительно на базе системной библиотеки Windows — MSHTML (движок браузера Internet Explorer).

Если в операционной системе пользователя (особенно часто это происходит в терминальных сессиях RDP на Windows Server) установлены жесткие политики безопасности или повреждены системные библиотеки, элемент управления блокируется. К основным системным факторам относятся:

  1. Отключенные «Активные сценарии» (Active Scripting) в настройках зон безопасности Internet Explorer.
  2. Блокировка выполнения JavaScript-скриптов в локальной зоне.
  3. Повреждение или некорректная регистрация системной библиотеки jscript.dll.

Поскольку элемент формы под капотом пытается запустить мини-редактор на HTML-движке, блокировка скриптов приводит к тому, что поле визуально «умирает» — оно перестает быть доступным для ввода и не может отрисовать переданный текст.

Причина 2: Ограничения встроенного парсера HTML в 1С

Метод УстановитьHTML() объекта ФорматированныйДокумент имеет очень жесткие ограничения на поддерживаемые теги. Этот объект предназначен для создания простых текстов с базовым оформлением (шрифты, цвета, списки, простые картинки). Если вы попытаетесь передать туда сложный HTML-код, содержащий:

Встроенный парсер 1С не сможет корректно обработать и отобразить эти элементы. Объект сохранит исходный код (поэтому обратный метод сработает), но визуальный редактор на форме сломается, отобразив пустой лист.

---

Решение 1: Обновление технологической платформы (Рекомендуемое решение)

Самый простой и надежный способ победить эту проблему раз и навсегда — обновить платформу «1С:Предприятие». Начиная с версии 8.3.14, компания 1С полностью отказалась от устаревшего движка Internet Explorer в пользу современного встроенного веб-компонента на базе WebKit (Chromium).

Практика показывает, что на релизах платформы начиная с 8.3.12.1790 и выше, большинство проблем с зависанием элемента управления пропадают сами собой, так как разработчики платформы существенно оптимизировали взаимодействие с системными библиотеками отрисовки.

Решение 2: Проверка настроек безопасности Windows и Internet Explorer

Если у вас нет возможности оперативно обновить платформу (например, информационная база работает на старых релизах 8.2 или 8.3.10), вам придется настроить параметры операционной системы:

  1. Откройте классическую «Панель управления» Windows и перейдите в «Свойства браузера» (Internet Options).
  2. Перейдите на вкладку «Безопасность» (Security).
  3. Выберите зону «Надежные сайты» (Trusted sites) или «Интернет» (Internet) в зависимости от того, где развернута база, и нажмите кнопку «Другой» (Custom level).
  4. Найдите раздел «Сценарии» (Scripting) и убедитесь, что в пункте «Активные сценарии» (Active scripting) установлено значение «Включить» (Enable).
  5. Если проблема наблюдается на терминальном сервере, выполните перерегистрацию библиотеки выполнения скриптов. Для этого запустите командную строку от имени Администратора и выполните команду: regsvr32 jscript.dll

Решение 3: Правильное программное заполнение документа

Давайте разберем по шагам, как правильно передавать текст в объект ФорматированныйДокумент, избегая конфликтов парсера. Мы должны передавать только максимально очищенный 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-стили).

Решение 4: Проверка привязки командной панели на Управляемой Форме

В управляемых формах для полноценного редактирования форматированного документа обязательно должна быть создана соответствующая командная панель. Без нее поле может вести себя некорректно.

Выполним следующие шаги по настройке элементов формы:

  1. Добавьте на форму элемент управления типа Поле форматированного документа и свяжите его с соответствующим реквизитом формы (тип реквизита должен быть ФорматированныйДокумент).
  2. Добавьте на форму элемент Командная панель.
  3. В свойствах созданной командной панели найдите свойство «Источник команд» (Command source) и выберите в нем ваше Поле форматированного документа.
  4. Платформа автоматически заполнит панель стандартными кнопками форматирования текста (выбор шрифта, цвета, выравнивания, списков). Это активирует внутренние обработчики фокуса элемента, и поле станет доступным для ввода.

Решение 5: Переход на «Поле HTML документа» и сторонний JS-редактор (Альтернатива)

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

Этот подход отлично работает на современных версиях платформы 1С с движком WebKit. Интеграция выполняется по следующему принципу:

  1. Вы скачиваете дистрибутив редактора TinyMCE (набор JS и CSS файлов).
  2. Помещаете эти файлы в макет конфигурации (как двоичные данные или текстовые макеты).
  3. При открытии формы программно собираете HTML-страницу, которая подключает скрипт редактора и инициализирует его на текстовом поле <textarea>.
  4. С помощью методов Документ.parentWindow (для старых платформ) или через обработку событий ПриНажатии / ПриИзменении обмениваетесь текстом между JavaScript и кодом 1С.

Такой подход полностью решает проблемы кроссплатформенности и позволяет вашим пользователям работать с текстами любой сложности без зависаний интерфейса.

← На главную