Рассмотрим частую и довольно неприятную ситуацию, с которой сталкивались многие разработчики: веб-страница (например, с Google Картами или сложным JavaScript) отлично открывается в обычном браузере, нормально обрабатывается в коде 1С через объект HTMLDocument, но при выводе на форму через Поле HTML-документа скрипты обрываются, выдают ошибки синтаксиса или страница попросту остается пустой. Проанализируем причину такого поведения, выясним техническую разницу между объектами платформы и разберем по шагам рабочие варианты решения проблемы.
Для начала выясним причину непонимания работы платформы с веб-контентом. В 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С не мог его корректно выполнить.
Проанализируем ситуацию с картами, которая массово проявилась в конце 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.1565, фирма "1С" совершила технологический скачок и полностью отказалась от использования Internet Explorer.
Вместо IE в платформу для всех операционных систем (Windows, Linux, macOS) была интегрирована современная кроссплатформенная библиотека WebKit. Благодаря этому:
Важные последствия перехода на WebKit: Если ваш старый код активно взаимодействовал с JavaScript, обратите внимание на архитектурные изменения. Ранее доступ к окну браузера осуществлялся через свойство parentWindow. В WebKit его нет, и нужно использовать defaultView. Кроме того, технология WebKit не поддерживает передачу COM-объектов 1С напрямую в JS — теперь обмен данными должен строиться на простых типах (строки, числа) или JSON-сериализации.
Если обновление платформы временно невозможно (например, вы жестко привязаны к версии 8.3.9), рассмотрим обходной путь решения. Платформу можно принудительно заставить использовать движок IE11 вместо IE7 с помощью системного механизма Windows.
Проанализируем шаги по настройке реестра:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION (для применения ко всем пользователям сервера используйте ветку HKEY_LOCAL_MACHINE).1cv8.exe (для толстого/тонкого клиента) или 1cv8c.exe (для тонкого клиента).11001 (в десятичной системе счисления). Это заставит 1С всегда использовать стандарты IE11 при отрисовке Поля HTML-документа, игнорируя директивы внутри самого файла.Для массового применения этот процесс можно автоматизировать, создав простой .bat файл для пользователей, который внесет эти ключи в реестр за считанные секунды.
Итог: Мы подробно разобрали, почему один и тот же HTML-код может вести себя по-разному в памяти платформы и на экране пользователя. Для стабильной работы современных веб-интерфейсов и карт настоятельно рекомендуется использовать версию платформы не ниже 8.3.14 с современным движком WebKit.