К статье
Практический материал

Разработка и Конфигурация · 10 мин

Документ HTML в 1С: как использовать поле HTML-документа

Как работать с полем HTML-документа в 1С: вывод отчётов, обработка событий ПриНажатии, навигация по ссылкам, ограничения браузерного движка и типичные ошибки разработчиков.

Поле HTML-документа в 1С — это элемент формы, который отображает веб-страницу внутри окна программы. С его помощью выводят форматированные отчёты, справку, карты, диаграммы, интерактивные элементы и даже целые мини-приложения на JavaScript, не выходя из интерфейса 1С. Реквизит формы типа «Строка» содержит либо URL, либо сам HTML-текст, а платформа рендерит содержимое через встроенный браузерный движок.

Типичные сценарии использования: красивые печатные формы и дашборды, отображение карты с геолокацией, интеграция с веб-сервисами через JavaScript, показ справочной информации, интерактивные подборы товаров. Во всех случаях логика делится на две части: 1С формирует HTML и обрабатывает события, а браузерный движок отвечает за отображение.

Ключевой момент, который нужно понять сразу: поле HTML-документа — не просто «картинка». Это двусторонний канал. Клики по ссылкам внутри страницы можно перехватить в коде 1С через событие ПриНажатии (в обычных формах — onclick), а из 1С можно обратиться к DOM-документу и выполнить скрипт. Именно эта двусторонность делает элемент мощным инструментом интеграции.

Как добавить поле HTML-документа на форму

В управляемой форме добавьте реквизит типа «Строка» (неограниченная длина), затем перетащите его в дерево элементов формы и в свойствах элемента установите «Вид поля» = «Поле HTML-документа». Путь к данным должен указывать на строковый реквизит — платформа сама поймёт, что внутри: если строка начинается с http:// или https://, будет загружена страница по адресу, иначе текст трактуется как готовый HTML.

Для программного формирования содержимого заполните реквизит HTML-текстом в обработчике ПриСозданииНаСервере или по команде. Минимальный пример: HTMLТекст = "<html><body><h1>Отчёт</h1></body></html>";. После присваивания поле автоматически перерисуется.

В обычных формах (толстый клиент) логика аналогична, но элемент называется «Поле HTML-документа» в палитре элементов, а события настраиваются через палитру свойств. Учтите, что обычные формы используют движок Internet Explorer, а управляемые в современных версиях платформы — WebKit или Edge WebView2 в зависимости от настроек, поэтому поведение одного и того же HTML может отличаться.

Порядок действий
  1. 1
    Создайте реквизит формы типа Строка с неограниченной длиной
  2. 2
    Добавьте элемент формы, установите вид «Поле HTML-документа» и привяжите к реквизиту
  3. 3
    Заполните реквизит URL или HTML-текстом в коде
  4. 4
    Назначьте обработчик события ПриНажатии для интерактивности
  5. 5
    Проверьте отображение в тонком клиенте и в веб-клиенте отдельно

Вывод отчётов и форматированного текста

Самое частое применение — вывод произвольно оформленной информации, которой тесно в табличном документе. HTML позволяет использовать CSS-стили, цветовые индикаторы, сворачивающиеся блоки, изображения в формате base64 прямо внутри разметки. Типовой приём — сформировать строку HTML в запросе-цикле по данным и присвоить её полю.

Чтобы страница работала автономно, встраивайте стили прямо в тег <style> внутри документа, а картинки — через data:image/png;base64,.... Внешние ресурсы (CDN, шрифты) будут недоступны на компьютерах без интернета и замедлят открытие формы. Для картинок из двоичных данных 1С используйте Base64Строка() для кодирования.

Учитывайте кодировку: если страница отображается «кракозябрами», добавьте в начало HTML <meta charset="utf-8">. Это самая частая причина проблем с кириллицей при программной генерации разметки.

Перехват нажатий: событие ПриНажатии

Интерактивность строится на событии ПриНажатии (элемент формы → события). Когда пользователь кликает по ссылке внутри страницы, 1С получает это событие до того, как браузер выполнит переход. В параметрах обработчика доступны данные события, из которых можно извлечь href нажатой ссылки и элемент, по которому кликнули.

Стандартный приём — кодировать команды в адресах ссылок: <a href="action:open&id=123">Открыть</a>. В обработчике разбираете строку href, извлекаете команду и параметры, выполняете нужное действие (открыть карточку товара, провести документ) и обязательно отменяете стандартную обработку, чтобы браузер не пытался перейти по несуществующему адресу. Для этого в данных события устанавливается отказ от стандартной обработки (свойство вида СтандартнаяОбработка = Ложь либо аналог через объект события, зависит от версии платформы).

1c
&НаКлиенте
Процедура ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Адрес = ДанныеСобытия.href;
    Если СтрНайти(Адрес, "action:open") > 0 Тогда
        ОткрытьЗначение(ПолучитьСсылкуИзПараметров(Адрес));
    КонецЕсли;
КонецПроцедуры

Проверяйте в обработчике, что ДанныеСобытия и его свойства заполнены: событие может срабатывать и при клике по пустой области, когда href отсутствует. Обращение к несуществующему свойству вызовет ошибку выполнения.

Обмен данными между 1С и JavaScript

Для вызова JavaScript из 1С используется объектная модель документа, доступная через свойство Документ поля HTML (в управляемых формах доступность зависит от версии платформы и режима совместимости). Можно получить элементы по идентификатору, изменить содержимое, вызвать функцию через parentWindow.execScript или eval. Однако в тонком и веб-клиенте прямой доступ к DOM сильно ограничен — там надёжнее работает схема «1С формирует новый HTML и перезагружает поле».

Обратная связь — из JavaScript в 1С — всегда идёт через навигацию: скрипт устанавливает document.location.href = "cmd:...", а 1С перехватывает это в ПриНажатии или событии изменения содержимого. Это работает во всех клиентах одинаково, поэтому кроссплатформенные решения строят именно на ссылках.

Ограничения движков и различия клиентов

Главный подводный камень — разные браузерные движки в разных клиентах. Толстый клиент в обычном приложении использует Internet Explorer, тонкий клиент современных версий — WebKit или WebView2, веб-клиент — браузер пользователя. Современный CSS (flexbox, grid) и ES6-скрипты могут не работать в старых конфигурациях. Перед внедрением проверяйте, в каких клиентах будет запускаться решение, и тестируйте в каждом.

Второе ограничение — производительность. Поле HTML-документа перерисовывается целиком при смене содержимого, поэтому частые обновления (например, каждую секунду) вызывают мерцание и нагрузку. Для динамических данных обновляйте поле по событию, а не по таймеру, либо обновляйте DOM через JavaScript без полной перезагрузки, если клиент это позволяет.

Контрольные точки

Как проверить результат

Отображение кириллицы
Норма

Русский текст читается сразу после загрузки

Тревожный признак

Кракозябры — не указан meta charset=utf-8

Клик по ссылке
Норма

Срабатывает обработчик ПриНажатии, перехода нет

Тревожный признак

Браузер пытается открыть адрес и показывает ошибку навигации

Открытие в разных клиентах
Норма

Страница выглядит одинаково в тонком и веб-клиенте

Тревожный признак

В одном из клиентов ломается вёрстка или скрипты

Типичные ошибки и их устранение

Первая ошибка — забытая отмена стандартной обработки в ПриНажатии: после выполнения команды поле переходит по служебной ссылке и показывает страницу ошибки, затирая сформированный отчёт. Вторая — экранирование кавычек: при сборке HTML конкатенацией строк кавычки внутри атрибутов нужно удваивать по правилам строковых литералов 1С, иначе разметка разваливается. Удобнее использовать шаблоны с подстановкой или текстовые документы с макетами.

Третья группа ошибок — работа с внешними страницами. Если поле отображает сайт, помните: события внутри чужого домена могут быть недоступны из-за политики безопасности, а сайт может блокировать показ во фрейме. Для интеграции с веб-сервисами надёжнее получать данные через HTTP-запросы 1С и формировать собственный HTML, чем встраивать живой сайт.

Типичные ошибки
01
Не установлена отмена стандартной обработки — после клика поле уходит на пустую страницу
02
Внешние CSS и скрипты по ссылкам — на ПК без интернета форма открывается пустой
03
Частая полная перезагрузка HTML по таймеру — мерцание и подвисание формы
04
Обращение к DOM в веб-клиенте как в толстом — код молча не работает или падает с ошибкой

Когда поле HTML не подходит: альтернативы

Не каждую задачу стоит решать через HTML. Для печатных форм и регламентированных отчётов правильнее использовать табличный документ — он корректно выгружается в Excel и печатается. Для графиков и диаграмм есть встроенные диаграммы и диаграмма Ганта. Для карт в типовых конфигурациях часто уже есть готовые механизмы геолокации. Поле HTML оправдано, когда нужна нестандартная вёрстка, интерактивность или готовая JS-библиотека, которую невыгодно переписывать.

Сравнение вариантов

Поле HTML-документа

Гибкая вёрстка, JavaScript, интерактивность. Минусы: различия движков, сложность отладки, риски безопасности

Табличный документ

Печать, Excel, регламентированные формы. Не подходит для интерактива и сложной вёрстки

Форматированный документ

Простой форматированный текст с картинками и ссылками без программирования HTML

Итог

Что важно запомнить

Поле HTML-документа — строковый реквизит с видом «Поле HTML-документа», который принимает URL или готовый HTML. Интерактивность строится на ссылках-командах и событии ПриНажатии с отменой стандартной обработки. Тестируйте результат во всех целевых клиентах и встраивайте стили и картинки внутрь документа.

Частые вопросы

Можно ли открыть в поле HTML произвольный сайт?

Да, достаточно присвоить реквизиту адрес страницы. Но учтите: многие сайты запрещают встраивание через заголовки безопасности, скрипты чужого домена недоступны из 1С, а при отсутствии интернета поле останется пустым. Для стабильных решений лучше формировать собственный HTML.

Почему вместо русского текста отображаются непонятные символы?

Причина почти всегда в отсутствии указания кодировки. Добавьте в начало документа <meta charset="utf-8"> и убедитесь, что строка HTML формируется в Unicode, а не читается из файла в другой кодировке.

Как передать из 1С данные в уже загруженную страницу без перезагрузки?

В толстом клиенте — через объект Документ и вызов JavaScript-функций. В тонком и веб-клиенте прямой доступ ограничен, поэтому надёжный способ — сформировать обновлённый HTML и присвоить его полю заново, сохранив состояние в параметрах страницы.

Работает ли поле HTML-документа в веб-клиенте?

Да, но содержимое рендерится браузером пользователя внутри iframe, поэтому доступ к DOM из кода 1С практически отсутствует. Вся коммуникация должна идти через навигационные ссылки и событие ПриНажатии.

Как отладить JavaScript внутри поля HTML?

В толстом клиенте можно временно выводить сообщения через alert. Универсальный приём — тестировать разметку и скрипты сначала в обычном браузере, сохранив сформированный HTML в файл, и только потом переносить в 1С с поправкой на используемый движок.

Можно ли распечатать содержимое поля HTML?

Штатной команды печати у поля нет. Варианты: сформировать параллельно табличный документ для печати, вызвать печать средствами браузерного движка через JavaScript (window.print, работает не во всех клиентах) или открыть HTML во внешнем браузере и печатать оттуда.