Разработка и Конфигурация · 11 мин
Что такое DOM в 1С и как с ним работать
DOM в 1С: что такое объектная модель документа, как работать с HTML через ПолеHTMLДокумента, примеры кода, типичные ошибки и ограничения платформы.
DOM (Document Object Model, объектная модель документа) — это программное представление HTML-документа в виде дерева объектов, к которым можно обращаться из кода: читать содержимое, менять текст, атрибуты, стили и структуру страницы. В контексте 1С термин «DOM» чаще всего возникает, когда разработчик работает с полем HTML-документа на форме и хочет управлять отображаемой страницей из встроенного языка.
Платформа 1С:Предприятие позволяет выводить HTML прямо на управляемую форму через реквизит типа «ПолеHTMLДокумента». После того как страница загружена, её содержимое доступно как DOM-дерево: корневой элемент, теги, атрибуты, текстовые узлы. Через свойство Документ поля HTML-документа разработчик получает доступ к этой модели и может программно изменять страницу без её перезагрузки.
Типовые сценарии использования DOM в 1С: построение интерактивных отчётов и дашбордов на HTML/JS, отображение форматированных инструкций и карточек, интеграция с веб-сервисами через встроенный браузер, парсинг загруженных веб-страниц, а также организация обмена данными между JavaScript на странице и кодом 1С.
Где в 1С встречается DOM
Основная точка входа — реквизит формы с типом «ПолеHTMLДокумента». В него помещают HTML-текст (свойство УстановитьТекст в обычных формах или присвоение строки с HTML в управляемых), после чего платформа отрисовывает страницу встроенным браузерным движком. В зависимости от версии платформы и настроек используется Internet Explorer (устаревший режим) или WebKit.
Доступ к DOM появляется только после того, как документ полностью загружен. До этого момента обращение к Документ вернёт неопределённое значение или неполное дерево. Поэтому вся работа с элементами страницы выполняется в обработчике события ДокументСформирован (управляемые формы) или ДокументСформирован/onclick-событиях в обычных формах.
Вторая область, где встречается понятие DOM, — программный разбор HTML, полученного по HTTP. Здесь платформа не даёт полноценного встроенного HTML-парсера с DOM API, поэтому разработчики либо загружают текст в невидимое поле HTML-документа и работают через его DOM, либо используют регулярные выражения и построители DOM через внешние компоненты.
Как получить доступ к DOM из кода 1С
Базовая последовательность выглядит так. На форму добавляется реквизит, например ПолеHTML, типа «Строка» с элементом формы «Поле HTML-документа». В коде присваивается HTML-строка, а в событии ДокументСформирован начинается работа с деревом.
Объектная модель доступна через Элементы.ПолеHTML.Документ — это аналог браузерного document. От него вызываются стандартные методы: getElementById, getElementsByTagName, getElementsByClassName, querySelector. Найденному элементу можно менять innerHTML, textContent, атрибуты через setAttribute и стили через style.
&НаКлиенте
Процедура ПолеHTMLДокументСформирован(Элемент)
Док = Элементы.ПолеHTML.Документ;
Узел = Док.getElementById("status");
Если Не Узел = Неопределено Тогда
Узел.innerHTML = "Данные загружены";
Узел.style.color = "green";
КонецЕсли;
КонецПроцедурыВажно помнить: код, работающий с DOM, выполняется на клиенте. Директива &НаКлиенте обязательна, а обращения к серверным данным требуют отдельного серверного вызова. Также часть методов DOM может отличаться в зависимости от движка: в режиме IE доступен не весь современный API, в режиме WebKit возможностей заметно больше.
Режимы браузера: Internet Explorer и WebKit
Платформа умеет работать с полем HTML-документа в двух режимах. Режим определяется свойством конфигурации «Режим использования поля HTML-документа» и может быть переопределён программно. От выбора движка напрямую зависит, какой DOM API и какой JavaScript доступны на странице.
| Параметр | Internet Explorer | WebKit |
|---|---|---|
| Стандарт HTML/CSS | Устаревший, ограниченный | Современный (HTML5, CSS3) |
| JavaScript | Старые версии, без ES6 | Современный синтаксис |
| DOM API | Базовый набор методов | querySelector, события, расширенные API |
| Поддержка библиотек | Сторонние JS-библиотеки часто не работают | Работают большинство библиотек |
Для новых разработок разумно ориентироваться на WebKit: это снимает большинство ограничений и позволяет использовать привычные веб-технологии. Режим IE стоит оставлять только там, где требуется совместимость со старыми решениями.
Обмен данными между 1С и JavaScript на странице
Одна из главных причин работать с DOM — двусторонняя связь между страницей и кодом 1С. Из 1С в JavaScript данные передаются двумя способами: либо прямым изменением DOM (записать текст в элемент, установить атрибут), либо вызовом JS-функции через Документ.defaultView.ИмяФункции(параметры) в режиме WebKit либо через parentWindow в IE.
Обратное направление — из JavaScript в 1С — реализуется через событие ПриНажатии поля HTML-документа. Стандартный приём: на странице создаётся ссылка или кнопка, при клике на которую срабатывает событие, а в параметрах события доступны данные элемента (например, href с закодированными параметрами или атрибуты узла). Далее код 1С разбирает эти данные и выполняет нужную логику.
- 1Добавьте на форму реквизит типа ПолеHTMLДокумента и элемент формы для него
- 2Сформируйте HTML-строку с элементами, у которых есть id или ссылки с параметрами
- 3Присвойте HTML полю и дождитесь события ДокументСформирован
- 4В обработчике ПриНажатии получите данные события и разберите параметры
- 5Передайте данные на сервер при необходимости и обновите страницу через DOM
При передаче строк из 1С в JavaScript экранируйте кавычки и спецсимволы, иначе HTML или JS-код сломается. Для сложных структур удобно сериализовать данные в JSON на сервере и вставлять готовую JSON-строку в скрипт страницы.
Типовые сценарии применения
Интерактивные отчёты и дашборды
Когда возможностей табличного документа не хватает, отчёт строят на HTML: графики, сворачиваемые блоки, подсветка, всплывающие подсказки. Данные из запроса 1С сериализуются и подставляются в шаблон страницы, а дальнейшее обновление идёт через DOM без полной перегенерации HTML.
Форматированные инструкции и карточки
HTML удобен для красивого отображения справочной информации: карточка товара с фото, пошаговая инструкция для оператора, подсказки по заполнению документа. Здесь DOM используется для подстановки актуальных значений в готовый шаблон.
Парсинг веб-страниц
Если нужно извлечь данные из HTML, полученного по HTTP, текст можно загрузить в поле HTML-документа и обойти дерево методами getElementsByTagName и навигацией по childNodes. Это надёжнее регулярных выражений, когда структура страницы сложная. Учтите, что скрипты на загружаемой странице могут выполняться — для чистого парсинга их лучше отключать или вычищать.
Ограничения и типичные ошибки
Работа с DOM в 1С имеет границы, которые важно учитывать заранее. Во-первых, доступ к документу возможен только на толстом и тонком клиенте с формой; на сервере и в веб-клиенте возможности сильно ограничены. Во-вторых, обращение к дереву до события ДокументСформирован — самая частая причина ошибок «объект не найден».
Ещё одна группа проблем — производительность. Частое обращение из 1С к DOM (например, обновление сотен элементов в цикле) работает медленно из-за межпроцессного взаимодействия с браузерным движком. Эффективнее передать данные одним вызовом JS-функции и обновить страницу средствами самого JavaScript.
Как проверить, что всё работает
После внедрения решения на базе DOM полезно пройти короткий контроль: страница загружается без ошибок, элементы находятся по id, клики по ссылкам вызывают событие в 1С, данные корректно передаются в обе стороны. Проверять стоит на том же виде клиента и в том же браузерном режиме, что используют конечные пользователи.
Как проверить результат
Обработчик вызывается один раз после загрузки страницы
Обработчик не срабатывает или Документ равен Неопределено
getElementById возвращает объект элемента
Возвращается Неопределено — проверьте id и момент вызова
Срабатывает событие ПриНажатии с данными элемента
Событие не приходит — проверьте подписку на событие и структуру ссылки
Текст отображается на странице без искажений
Пропадают кавычки, ломается разметка — нужно экранирование
FAQ
Можно ли работать с DOM в веб-клиенте 1С?
Возможности ограничены: поле HTML-документа в веб-клиенте имеет урезанную функциональность, и прямой доступ к DOM через свойство Документ может быть недоступен. Для веб-клиента обычно проектируют обмен через события поля либо выносят интерактивность в отдельные внешние страницы.
Чем отличается ПолеHTMLДокумента от простого текстового поля с HTML?
Текстовое поле показывает HTML как обычный текст с тегами. Поле HTML-документа отрисовывает страницу браузерным движком и предоставляет DOM для программного доступа — только оно подходит для интерактивных сценариев.
Как вызвать функцию JavaScript из кода 1С?
В режиме WebKit — через объект окна документа: Элементы.ПолеHTML.Документ.defaultView.ИмяФункции(Параметр). Функция должна быть объявлена в глобальной области страницы, а вызов выполняется после события ДокументСформирован.
Почему getElementById возвращает Неопределено?
Чаще всего код выполняется до полной загрузки документа либо id в HTML не совпадает с искомым (регистр букв, опечатка). Реже — элемент создаётся скриптом страницы с задержкой, тогда нужно дождаться его появления.
Можно ли использовать сторонние JS-библиотеки, например для графиков?
Да, в режиме WebKit большинство библиотек работает: их подключают тегом script в HTML-строке или встраивают кодом. В режиме Internet Explorer современные библиотеки, как правило, несовместимы из-за старого движка.
Как передать таблицу значений на HTML-страницу?
На сервере преобразуйте данные в JSON (через ЗаписьJSON), передайте строку на клиент и подставьте её в скрипт страницы или передайте параметром в JS-функцию. Прямой перебор строк таблицы с обновлением DOM по одному элементу будет работать значительно медленнее.
Что важно запомнить
DOM в 1С — это доступ к объектной модели страницы, загруженной в поле HTML-документа. Работайте с деревом только после события ДокументСформирован, выбирайте режим WebKit для новых решений, передавайте данные пакетно через JSON и JS-функции и не загружайте недоверенный HTML без очистки скриптов.