Разработка и Конфигурация · 11 мин
HTML в 1С: что это и как применяется на практике
Что такое HTML в 1С: поле HTML-документа, формирование отчётов и интерфейсов на HTML, плюсы, ограничения и типичные ошибки разработчиков.
Под «HTML в 1С» обычно понимают два разных сценария: отображение HTML-страниц внутри формы конфигурации через специальный элемент управления и генерацию HTML-кода программно — для отчётов, писем, печатных форм и обмена данными с веб-сервисами. Оба сценария опираются на стандартный язык разметки гипертекста, но решают разные задачи и имеют разные ограничения.
Платформа 1С:Предприятие не является веб-средой: её интерфейс строится на собственных элементах управления. Однако встроенный механизм отображения HTML позволяет встраивать в формы карты, виджеты, красиво оформленные отчёты, справку и даже интерактивные страницы с JavaScript. В веб-клиенте и тонком клиенте поведение этого механизма заметно различается, что важно учитывать при разработке.
Вторая сторона темы — формирование HTML программно. Встроенный язык 1С позволяет собирать HTML-строку вручную или через объектную модель документа и отдавать её браузеру, почтовому клиенту или сохранять в файл. Так делают красивые email-рассылки, экспорт отчётов и интеграцию с корпоративными порталами.
Что такое поле HTML-документа в форме 1С
Основной инструмент отображения HTML внутри конфигурации — элемент формы «Поле HTML-документа». Он добавляется в управляемую форму через редактор: в палитре элементов выбирается соответствующий тип, а в качестве данных указывается реквизит формы строкового типа, содержащий либо URL страницы, либо сам HTML-текст.
В тонком клиенте под Windows поле использует движок браузера, установленного в системе (исторически — Internet Explorer, в новых релизах платформы — WebView2 на базе Chromium). В веб-клиенте содержимое отображается через iframe текущего браузера. Из-за этого одна и та же страница может выглядеть и вести себя по-разному у разных пользователей.
Типичный сценарий — показать внутри 1С карту с адресом контрагента, виджет курсов валют, корпоративную справку или красиво свёрстанный дашборд, который штатными средствами формы сверстать сложно. Поле поддерживает событие «ПриНажатии», через которое можно перехватить клик пользователя по ссылке и выполнить код на встроенном языке.
Как вывести HTML в форму: пошаговый порядок
Минимальная реализация занимает несколько минут и не требует внешних компонентов. Нужен реквизит формы, элемент поля и небольшой серверный или клиентский код, который заполнит реквизит содержимым.
- 1Создайте в форме реквизит строкового типа неограниченной длины, например «ТекстHTML».
- 2Перетащите реквизит на форму и в свойствах элемента установите вид «Поле HTML-документа».
- 3В обработчике ПриСозданииНаСервере сформируйте HTML-строку: обёртку html/body, стили и содержимое.
- 4Присвойте строку реквизиту — после открытия формы содержимое отобразится автоматически.
- 5Если нужна интерактивность, добавьте ссылки с собственными адресами и обработайте их в событии ПриНажатии, отменяя стандартный переход.
- 6Проверьте отображение в тонком клиенте и в веб-клиенте отдельно: результат может отличаться.
Пример простейшего заполнения:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекстHTML = "<html><body style='font-family:Arial'>"
+ "<h2>Остатки по складу</h2>"
+ "<p>Товар: <b>Кабель ВВГ 3х2.5</b> — 145 м</p>"
+ "</body></html>";
КонецПроцедуры
Обратите внимание: если реквизит содержит строку, начинающуюся с «http», платформа попытается загрузить страницу по адресу. Для показа локального HTML строка должна содержать полноценный документ с тегами html и body.
Интерактивность: события, JavaScript и обмен данными с формой
Клик по ссылке внутри поля HTML-документа вызывает событие «ПриНажатии». В обработчике доступны данные об элементе, по которому кликнули, и параметр «СтандартнаяОбработка» — установив его в Ложь, вы отменяете переход по ссылке и выполняете собственную логику: открываете карточку товара, запускаете отчёт, меняете содержимое поля.
Приём с ссылками вида <a href="action:openitem?id=123"> — стандартный способ связать HTML-интерфейс с логикой 1С. В обработчике строка адреса разбирается, извлекается команда и параметры, после чего вызывается нужная процедура.
Прямой вызов JavaScript из кода 1С и наоборот ограничен и зависит от клиента. В тонком клиенте Windows доступ к объектной модели документа возможен через свойство «Документ» поля, но этот механизм не работает в веб-клиенте и на Linux/macOS. Если решение должно быть кроссплатформенным, весь интерактив следует строить только на событии «ПриНажатии».
Программная генерация HTML: отчёты, письма, печать
Второй сценарий не связан с формами: HTML собирается как обычная строка и используется вне интерфейса. Самые частые применения — HTML-письма через объект ИнтернетПочтовоеСообщение (тип текста HTML), экспорт отчётов в файлы, которые красиво открываются в браузере, и ответы HTTP-сервисов, опубликованных на веб-сервере.
Для писем HTML предпочтительнее простого текста: можно выделить итоги таблицей, вставить ссылки на документы и логотип. Почтовый объект 1С принимает тело письма строкой; важно указать корректный тип содержимого, иначе получатель увидит «голую» разметку.
При генерации HTML вручную критично экранировать данные из базы: наименования контрагентов, комментарии и другие пользовательские строки могут содержать символы <, >, & и кавычки. Без экранирования разметка «поедет», а в худшем случае в письмо или страницу попадёт непредусмотренный код.
Функция ЭкранироватьHTML(Строка)
Результат = СтрЗаменить(Строка, "&", "&");
Результат = СтрЗаменить(Результат, "<", "<");
Результат = СтрЗаменить(Результат, ">", ">");
Результат = СтрЗаменить(Результат, """", """);
Возврат Результат;
КонецФункцииГде HTML в 1С уместен, а где лучше штатные средства
HTML-поле — инструмент отображения, а не построения интерфейса. Попытка сверстать на HTML рабочее место с вводом данных почти всегда заканчивается проблемами: нет нормальной связи с данными формы, сложная отладка, разное поведение клиентов. Для ввода данных в 1С есть табличные поля, поля ввода и динамические списки.
Сравнение вариантов
Подходит для красивого отображения: дашборды, карты, справка, витрины. Не подходит для ввода данных и как основа рабочего места.
Штатный формат отчётов и печатных форм. Поддерживает группировки, расшифровку, сохранение в Excel и PDF. HTML нужен только если требуется отправка в браузер или письмо.
Встроенные элементы для графиков и схем. Работают одинаково во всех клиентах, в отличие от JS-библиотек внутри HTML-поля.
Когда HTML нужен снаружи — для личного кабинета или виджета на сайте. 1С отдаёт готовую разметку по запросу, без поля документа вовсе.
Если задача — показать данные в браузере внешнему пользователю, правильнее поднять HTTP-сервис в конфигурации и сформировать HTML на сервере. Если нужно красивое письмо — генерируйте HTML строкой с экранированием. Поле HTML-документа оставьте для визуализации внутри форм.
Ограничения и типичные ошибки
Главное ограничение — зависимость от клиентского окружения. В веб-клиенте поле работает в изолированном iframe: нет доступа к объектной модели, ограничены скрипты. В тонком клиенте на разных операционных системах используются разные движки. Решение, отлаженное в одном клиенте, обязательно проверяйте во всех используемых.
Отдельная ошибка — игнорирование кодировки при сохранении HTML в файл. Если писать файл без указания UTF-8 и соответствующего meta-тега, кириллица в браузере превратится в нечитаемые символы. Используйте объект ЗаписьТекста с явным указанием кодировки.
Как проверить результат
Разметка и стили выглядят как задумано, кириллица читается
Кракозябры, съехавшая вёрстка, пустое поле
Контент виден, клики по ссылкам вызывают обработчик 1С
Скрипты не выполняются, события не приходят
Наименования с кавычками и амперсандом отображаются корректно
Разметка ломается на определённых записях
Браузер открывает файл с правильной кодировкой
Вместо русского текста — знаки вопроса или иероглифы
FAQ
Можно ли в поле HTML-документа использовать JavaScript-библиотеки, например для графиков?
Да, в тонком клиенте Windows с современным движком WebView2 многие библиотеки работают, если их код подключён локально в тексте страницы. В веб-клиенте поддержка ограничена изоляцией iframe и политиками браузера, поэтому универсальность не гарантируется. Для кроссплатформенных решений надёжнее штатные диаграммы 1С.
Как открыть внешний сайт из 1С, не встраивая его в форму?
Используйте метод ПерейтиПоНавигационнойСсылке или ЗапуститьПриложение с URL — страница откроется в штатном браузере пользователя. Это безопаснее и избавляет от проблем с устаревшим встроенным движком.
Чем отличается макет «HTML-документ» от текстового макета?
Макет типа «HTML-документ» хранит разметку с возможностью просмотра в редакторе и удобен для шаблонов страниц и писем. Текстовый макет универсальнее и тоже подходит для хранения HTML как строки. Функциональной разницы при программном чтении почти нет — выбор вопрос удобства редактирования.
Почему в веб-клиенте не срабатывает обращение к Документу поля HTML?
В веб-клиенте содержимое поля изолировано внутри браузерного iframe, и объектная модель документа недоступна из кода 1С. Это архитектурное ограничение платформы. Переносите логику на событие ПриНажатии и ссылки с командами.
Можно ли сформировать HTML-отчёт и отправить его по почте автоматически?
Да: соберите HTML-строку с экранированными данными, создайте объект ИнтернетПочтовоеСообщение, установите тип текста HTML и отправьте через профиль почты. Предварительно протестируйте письмо в нескольких почтовых клиентах — они по-разному поддерживают стили, поэтому используйте простую табличную вёрстку с инлайн-стилями.
Заменяет ли HTML-поле веб-публикацию информационной базы?
Нет, это разные механизмы. Поле HTML-документа показывает страницы внутри клиентского приложения 1С. Публикация на веб-сервере даёт доступ ко всей базе через браузер или HTTP-сервисы для внешних пользователей. Они могут дополнять друг друга, но не взаимозаменяемы.
Что важно запомнить
HTML в 1С — это поле HTML-документа для отображения контента в формах и программная генерация разметки для писем, файлов и HTTP-сервисов. Используйте его для визуализации, а не для ввода данных, экранируйте пользовательские строки и обязательно проверяйте поведение во всех типах клиентов.