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

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

Как загрузить документ HTML в 1С

Способы загрузки HTML-документа в 1С: через объект ДокументHTML, HTTP-запросы и поле HTML-документа. Примеры кода, ошибки и проверка результата.

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

Основные объекты, с которыми придётся работать: ДокументHTML для парсинга разметки, ЧтениеHTML для потокового чтения, HTTPСоединение и HTTPЗапрос для загрузки страниц из интернета, а также элемент формы «Поле HTML документа» для отображения результата пользователю. Ниже разобраны рабочие сценарии с примерами кода на встроенном языке.

Какие инструменты платформы подходят для работы с HTML

Прежде чем писать код, определите задачу: отобразить HTML пользователю или извлечь из него данные. Это принципиально разные сценарии, и инструменты для них не пересекаются. Для отображения используется элемент формы «Поле HTML документа», для разбора — объектная модель документа (DOM) через ДокументHTML.

Объект ДокументHTML создаётся через ПостроительDOM из источника, который отдаёт ЧтениеHTML. Такая связка позволяет обращаться к элементам страницы по тегам, идентификаторам и классам — аналогично работе с DOM в браузере. Для загрузки по сети применяются объекты HTTPСоединение и HTTPЗапрос, возвращающие тело ответа в виде строки или двоичных данных.

Как загрузить HTML из файла на диске

Если HTML-документ сохранён локально (например, выгрузка отчёта или файл от поставщика), его читают через ЧтениеHTML с указанием файла. Метод ОткрытьФайл принимает путь и при необходимости кодировку — чаще всего это UTF-8 или windows-1251 для старых выгрузок.

Чтение = Новый ЧтениеHTML;

Чтение.ОткрытьФайл("C:\Данные\отчет.html", "UTF-8");

Построитель = Новый ПостроительDOM;

Документ = Построитель.Прочитать(Чтение);

Чтение.Закрыть();

// Пример: получить все строки таблицы

СтрокиТаблиц = Документ.ПолучитьЭлементыПоИмени("tr");

Для Каждого Строка Из СтрокиТаблиц Цикл

Сообщить(Строка.ТекстовоеСодержимое);

КонецЦикла;

После построения DOM доступны методы поиска: ПолучитьЭлементыПоИмени (по тегу), ПолучитьЭлементПоИдентификатору, обращение к Тело документа и обход дочерних узлов. Текст элемента читается через свойство ТекстовоеСодержимое, атрибуты — через одноимённые свойства или метод ПолучитьАтрибут.

Как загрузить HTML-страницу из интернета

Для получения страницы с веб-сервера используется HTTP-запрос. Создайте HTTPСоединение с указанием хоста, сформируйте HTTPЗапрос с адресом ресурса и выполните метод Получить (GET). Тело ответа вернётся строкой, которую дальше можно передать в ЧтениеHTML.

Соединение = Новый HTTPСоединение("example.com", 443, , , , ,

Новый ЗащищенноеСоединениеOpenSSL);

Запрос = Новый HTTPЗапрос("/page.html");

Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда

ТекстHTML = Ответ.ПолучитьТелоКакСтроку();

Чтение = Новый ЧтениеHTML;

Чтение.УстановитьСтроку(ТекстHTML);

Документ = Новый ПостроительDOM;

ДокументHTML = Документ.Прочитать(Чтение);

КонецЕсли;

Обязательно проверяйте код состояния ответа: 200 означает успех, 301/302 — перенаправление, 403 и 404 — отказ доступа или отсутствие страницы. Если сайт возвращает сжатый ответ или требует авторизации, добавьте соответствующие заголовки в HTTPЗапрос. Для защищённых соединений используйте ЗащищенноеСоединениеOpenSSL, как в примере выше.

Как отобразить HTML пользователю в форме

Чтобы показать HTML прямо в интерфейсе 1С, добавьте на управляемую форму реквизит типа «Строка» и элемент формы с видом «Поле HTML документа». Затем присвойте реквизиту строку с разметкой — платформа отрисует её встроенным браузерным движком.

&НаКлиенте

Процедура ПоказатьОтчет(Команда)

HTMLТекст = "<html><body><h2>Отчет загружен</h2></body></html>";

ПолеHTML = HTMLТекст; // ПолеHTML — реквизит формы

КонецПроцедуры

Вместо строки можно указать URL — тогда поле отобразит страницу из интернета. Учтите ограничения: встроенный движок зависит от клиентской платформы (в тонком клиенте Windows это Internet Explorer / WebView в новых версиях), поэтому современные скрипты и CSS могут отображаться некорректно. Для сложной вёрстки надёжнее формировать упрощённый HTML.

Как извлечь данные из таблиц и списков HTML

Самая частая практическая задача — вытащить данные из HTML-таблицы, например прайса. После построения DOM найдите таблицу по тегу table, переберите строки tr и внутри каждой — ячейки td. Значения ячеек записывайте в таблицу значений для дальнейшей обработки.

ТаблицаДанных = Новый ТаблицаЗначений;

ТаблицаДанных.Колонки.Добавить("Наименование");

ТаблицаДанных.Колонки.Добавить("Цена");

Ячейки = ДокументHTML.ПолучитьЭлементыПоИмени("tr");

Для Каждого Строка Из Ячейки Цикл

Колонки = Строка.ПолучитьЭлементыПоИмени("td");

Если Колонки.Количество() >= 2 Тогда

НоваяСтрока = ТаблицаДанных.Добавить();

НоваяСтрока.Наименование = Колонки[0].ТекстовоеСодержимое;

НоваяСтрока.Цена = Колонки[1].ТекстовоеСодержимое;

КонецЕсли;

КонецЦикла;

Реальные страницы редко бывают идеальными: встречаются объединённые ячейки, вложенные таблицы, служебные строки с заголовками th. Добавляйте проверки количества ячеек и пропускайте строки-заголовки. Если поставщик может дать данные в XML, JSON или CSV — выбирайте их: разбор структурированных форматов надёжнее парсинга HTML, который поставщик может изменить в любой момент.

Типичные ошибки
01
Неверная кодировка при чтении файла — вместо текста появляются нечитаемые символы; указывайте кодировку явно в ОткрытьФайл
02
Отсутствие проверки кода состояния HTTP-ответа — в DOM попадает страница ошибки, и разбор завершается пустым результатом
03
Разбор HTML регулярными выражениями вместо DOM — любое изменение вёрстки ломает загрузку
04
Обращение к элементам без проверки их существования — исключение при первой же странице с другой структурой

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

После построения DOM убедитесь, что документ действительно разобран: проверьте наличие элемента Тело (body) и количество найденных целевых элементов. Если ПолучитьЭлементыПоИмени("table") вернул пустую коллекцию — либо изменилась структура страницы, либо загружен не тот контент.

Полезный приём отладки — сохранить полученную строку HTML в файл и открыть её в браузере. Так вы увидите, что реально вернул сервер: целевую страницу, форму авторизации, капчу или сообщение об ошибке. Многие сайты отдают ботам содержимое, отличное от того, что видит пользователь.

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

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

Код состояния HTTP-ответа
Норма

200 (или корректно обработанное перенаправление)

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

4xx/5xx — страница не получена, разбор бессмыслен

Содержимое DOM
Норма

Найдены ожидаемые теги (table, tr, нужные id)

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

Пустое тело или страница с ошибкой/капчей

Кириллица в данных
Норма

Текст читается корректно

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

Кракозябры — неверно указана кодировка

Количество строк данных
Норма

Совпадает с ожидаемым объёмом выгрузки

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

Ноль или значительно меньше — структура страницы изменилась

Какой способ выбрать под вашу задачу

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

Маршрут решения

Как выбрать действие

HTML лежит в файле на диске или пришёл строкойИспользуйте ЧтениеHTML + ПостроительDOM для разбора
Страницу нужно скачать с сайтаСначала HTTPСоединение с проверкой кода ответа, затем разбор DOM
Нужно показать HTML пользователюДобавьте на форму элемент «Поле HTML документа» и присвойте строку или URL
Поставщик регулярно меняет вёрстку страницыДоговоритесь об обмене в XML/JSON — парсинг HTML ненадёжен для постоянной интеграции

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

Итог

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

HTML в 1С разбирается через связку ЧтениеHTML + ПостроительDOM, скачивается через HTTPСоединение и отображается полем HTML-документа. Всегда проверяйте код ответа, кодировку и наличие ожидаемых элементов, а для постоянных интеграций предпочитайте структурированные форматы вместо парсинга разметки.

Часто задаваемые вопросы

Можно ли загрузить HTML в 1С без программирования?

Штатных инструментов «из коробки» для произвольного HTML нет: типовые механизмы загрузки работают с табличными данными (MXL, Excel, CSV). Для HTML потребуется либо доработка, либо готовое расширение/внешняя обработка под конкретный формат страницы.

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

Причина — несовпадение кодировки. Укажите её явно при открытии файла (UTF-8 или windows-1251), а для HTTP-ответа используйте ПолучитьТелоКакСтроку() с параметром кодировки либо определите её из заголовка Content-Type.

Как загрузить страницу, требующую авторизации?

Передайте логин и пароль в конструктор HTTPСоединение для базовой аутентификации либо сформируйте заголовки/куки в HTTPЗапрос. Для форм-авторизации сначала выполните POST-запрос с учётными данными и сохраните cookies сессии.

Работает ли разбор HTML на сервере 1С?

Да, объекты ЧтениеHTML, ПостроительDOM и HTTPСоединение доступны на сервере, что позволяет выполнять загрузку в фоновых заданиях по расписанию. Поле HTML-документа, напротив, существует только на клиенте как элемент формы.

Что делать, если сайт отдаёт данные через JavaScript?

DOM в 1С строится из исходной разметки и не выполняет скрипты, поэтому контент, подгружаемый динамически, в нём отсутствует. Ищите у сайта API или адрес, по которому скрипт запрашивает данные (часто это JSON), и обращайтесь напрямую к нему.