Разработка и Конфигурация · 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, который поставщик может изменить в любой момент.
Как проверить результат загрузки
После построения DOM убедитесь, что документ действительно разобран: проверьте наличие элемента Тело (body) и количество найденных целевых элементов. Если ПолучитьЭлементыПоИмени("table") вернул пустую коллекцию — либо изменилась структура страницы, либо загружен не тот контент.
Полезный приём отладки — сохранить полученную строку HTML в файл и открыть её в браузере. Так вы увидите, что реально вернул сервер: целевую страницу, форму авторизации, капчу или сообщение об ошибке. Многие сайты отдают ботам содержимое, отличное от того, что видит пользователь.
Как проверить результат
200 (или корректно обработанное перенаправление)
4xx/5xx — страница не получена, разбор бессмыслен
Найдены ожидаемые теги (table, tr, нужные id)
Пустое тело или страница с ошибкой/капчей
Текст читается корректно
Кракозябры — неверно указана кодировка
Совпадает с ожидаемым объёмом выгрузки
Ноль или значительно меньше — структура страницы изменилась
Какой способ выбрать под вашу задачу
Выбор инструмента определяется источником данных и целью. Для разбора локальных файлов достаточно ЧтениеHTML и ПостроительDOM. Для страниц из интернета добавляется HTTP-уровень. Для визуализации — поле 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), и обращайтесь напрямую к нему.