В чем разница между Полем HTML-документа и Документом HTML в 1С и почему не работают веб-карты?

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

Рассмотрим частую и довольно неприятную ситуацию, с которой сталкивались многие разработчики: веб-страница (например, с Google Картами или сложным JavaScript) отлично открывается в обычном браузере, нормально обрабатывается в коде 1С через объект HTMLDocument, но при выводе на форму через Поле HTML-документа скрипты обрываются, выдают ошибки синтаксиса или страница попросту остается пустой. Проанализируем причину такого поведения, выясним техническую разницу между объектами платформы и разберем по шагам рабочие варианты решения проблемы.

Архитектурная разница: Поле HTML-документа и Документ HTML

Для начала выясним причину непонимания работы платформы с веб-контентом. В 1С эти два термина обозначают абсолютно разные уровни взаимодействия:

  1. Поле HTML-документа — это визуальный элемент управления формы (интерфейсный контейнер). Его задача заключается в том, чтобы отрисовать готовую страницу пользователю, запустить связанные скрипты (JavaScript), применить стили (CSS) и обработать интерактив (клики, скроллинг). По сути, это встроенный в 1С мини-браузер.
  2. Документ HTML — это программная объектная модель (DOM-дерево). В 1С это объект типа HTMLDocument, который представляет собой абстрактный набор данных, описывающий структуру тегов страницы.

Посмотрим на пример из старых платформ, когда разработчики обращались к HTML напрямую через COM-объект:


objIE = Новый COMОбъект("InternetExplorer.Application");
objIE.Navigate(ФайлHTML.ПолноеИмя);
ТелоДокумента = objIE.Document.body;

Когда вы работаете просто с Документом HTML, платформа 1С парсит его как текст. Но как только этот же код передается в элемент формы, управление перехватывает встроенный движок рендеринга. До версии 8.3.14 в Windows этим движком выступал системный Internet Explorer, запущенный через технологию ActiveX/COM. Из-за этого и возникала разница в поведении: текст читался без ошибок, а вот "браузер" 1С не мог его корректно выполнить.

Почему сломались Google Карты и сложный JavaScript?

Проанализируем ситуацию с картами, которая массово проявилась в конце 2018 года. Google Maps JavaScript API прекратил поддержку устаревших браузеров, начав требовать современные стандарты ECMAScript.

По умолчанию встроенный в Windows компонент WebBrowser (MSHTML), который использовался в платформе 1С, запускался в режиме эмуляции Internet Explorer 7. Этот устаревший движок физически не мог переварить современный код. Попытки принудительно включить режим IE11 через метатег в HTML (IE=11) приводили к непредсказуемым последствиям: из-за особенностей COM-взаимодействия 1С и библиотек MSHTML длинный JS-код часто аварийно "обрезался" в памяти, что приводило к падениям (AppCrash).

Решение 1: Обновление платформы до версии 8.3.14 и выше

Разберем самое надежное и концептуально верное решение — обновление платформы "1С:Предприятие". Начиная с версии 8.3.14.1565, фирма "1С" совершила технологический скачок и полностью отказалась от использования Internet Explorer.

Вместо IE в платформу для всех операционных систем (Windows, Linux, macOS) была интегрирована современная кроссплатформенная библиотека WebKit. Благодаря этому:

  1. Появилась полноценная поддержка HTML5, CSS3 и современных стандартов JavaScript.
  2. Google Карты, Яндекс.Карты и другие тяжелые веб-сервисы начали работать в 1С "из коробки" без дополнительных "костылей".
  3. Отображение HTML стало одинаковым на всех ОС.

Важные последствия перехода на WebKit: Если ваш старый код активно взаимодействовал с JavaScript, обратите внимание на архитектурные изменения. Ранее доступ к окну браузера осуществлялся через свойство parentWindow. В WebKit его нет, и нужно использовать defaultView. Кроме того, технология WebKit не поддерживает передачу COM-объектов 1С напрямую в JS — теперь обмен данными должен строиться на простых типах (строки, числа) или JSON-сериализации.

Решение 2: Настройка эмуляции браузера через реестр (для старых платформ)

Если обновление платформы временно невозможно (например, вы жестко привязаны к версии 8.3.9), рассмотрим обходной путь решения. Платформу можно принудительно заставить использовать движок IE11 вместо IE7 с помощью системного механизма Windows.

Проанализируем шаги по настройке реестра:

  1. Откройте редактор реестра Windows (regedit).
  2. Перейдите по пути: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION (для применения ко всем пользователям сервера используйте ветку HKEY_LOCAL_MACHINE).
  3. Создайте новый параметр типа DWORD (32 бита).
  4. В качестве имени параметра укажите имя исполняемого файла 1С: 1cv8.exe (для толстого/тонкого клиента) или 1cv8c.exe (для тонкого клиента).
  5. Установите значение 11001 (в десятичной системе счисления). Это заставит 1С всегда использовать стандарты IE11 при отрисовке Поля HTML-документа, игнорируя директивы внутри самого файла.

Для массового применения этот процесс можно автоматизировать, создав простой .bat файл для пользователей, который внесет эти ключи в реестр за считанные секунды.

Итог: Мы подробно разобрали, почему один и тот же HTML-код может вести себя по-разному в памяти платформы и на экране пользователя. Для стабильной работы современных веб-интерфейсов и карт настоятельно рекомендуется использовать версию платформы не ниже 8.3.14 с современным движком WebKit.

← На главную