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

Система не имеет встроенного метода, который автоматически преобразует веб-страницу в макет отчета. Вам придется самостоятельно разобрать структуру DOM-дерева и сопоставить её с ячейками макета. Этот процесс требует понимания того, как платформы интерпретируют теги и атрибуты стилей. Ошибки на этапе парсинга могут привести к потере форматирования или смещению данных.

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

Подготовка среды и получение HTML-кода

Первым шагом является получение содержимого веб-страницы или HTML-файла. Для этого в платформе используется объект HTTPСоединение или чтение из локального файла. Важно получить «сырой» текст разметки перед началом его анализа. Полученные данные необходимо сохранить в переменной типа Строка для последующей передачи в анализатор.

Часто веб-страницы содержат специфические мета-теги или скрипты, которые не нужны для отчета. Перед началом основной обработки рекомендуется выполнить первичную очистку. Удалите блоки <script> и <style>, если вы не планируете анализировать CSS-правила программно. Это упростит структуру дерева и ускорит работу алгоритма.

💡

Используйте метод Замена() для быстрого удаления блоков скриптов перед парсингом, это снизит нагрузку на процессор при обработке больших страниц.

Если источник данных находится в интернете, убедитесь, что кодировка ответа сервера корректно определена. Неправильная кодировка приведет к появлению «кракозябр» вместо текста в ячейках отчета. Стандартным решением является приведение строки к кодировке UTF-8 или Windows-1251 в зависимости от настроек вашей базы данных.

Парсинг HTML структуры с помощью XML-чтения

Поскольку HTML является частным случаем разметки, для его чтения в 1С эффективно используется объект ЧтениеXML. Этот инструмент позволяет последовательно проходить по всем узлам документа. Вам необходимо открыть поток данных из строки и инициировать чтение. Система будет возвращать события о начале элемента, его тексте и конце.

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

⚠️ Внимание: Стандартное чтение XML в 1С может прерваться на некорректном HTML. Всегда оборачивайте цикл чтения в конструкцию Попытка...Исключение, чтобы обработать сбойные узлы и продолжить работу.

В процессе чтения вам потребуется отслеживать текущий контекст. Когда парсер встречает тег <table>, вы должны создать новую область в макете. Встреча тега <tr> сигнализирует о начале новой строки, а <td> — о новой ячейке.TEXT-содержимое между тегами записывается в соответствующее поле.

📊 Какой способ получения HTML вы используете чаще?
HTTP-запрос
Чтение из файла
Вставка из буфера
Генерация внутри 1С

Алгоритм построения Табличного Документа

Логика формирования отчета строится на сопоставлении уровней вложенности HTML-тегов и координат ячеек в макете. Вам необходимо поддерживать счетчики строк и колонок. При переходе к новому тегу строки счетчик строк инкрементируется, а счетчик колонок сбрасывается. Это позволяет последовательно заполнять область вывода.

Для реализации этого подхода создайте программный макет или используйте существующий шаблон. В коде объявления переменных инициализируйте объект ТабличныйДокумент. В цикле обхода XML-узлов вызывайте метод Область() для получения ссылки на конкретную ячейку. Присваивайте значение свойства Текст этой области содержимое узла.

Особое внимание уделите объединению ячеек. Атрибуты colspan и rowspan в HTML определяют размер ячеек. В 1С это реализуется через свойство ОбъединениеЯчеек. Вам нужно считать значение атрибута из узла XML и применить соответствующее объединение в диапазоне ячеек табличного документа.

☑️ Алгоритм обработки таблицы

Выполнено: 0 / 4

Ниже приведена таблица соответствия атрибутов HTML и свойств 1С, которая поможет вам при написании кода конвертации:

HTML Атрибут Назначение Свойство 1С
colspan Объединение по горизонтали ОбъединениеЯчеек (по ширине)
rowspan Объединение по вертикали ОбъединениеЯчеек (по высоте)
align Выравнивание текста ГоризонтальноеПоложениеТекста
bgcolor Цвет фона ячейки ЦветФона

Обработка стилей и форматирование ячеек

Простого переноса текста недостаточно для качественного отчета. Пользователи ожидают сохранения визуального стиля исходного документа. Атрибуты стиля могут находиться как в самом теге (style="..."), так и в отдельных классах. Для начала сосредоточьтесь на инлайн-стилях, так как их проще всего извлечь из атрибута узла.

Разберите строку стилей на пары «ключ-значение». Например, свойство color отвечает за цвет текста, а font-weight за жирность. В 1С цвет задается объектом Цвет. Вам потребуется функция-конвертер, которая преобразует названия цветов (red, blue) или HEX-коды (#FF0000) в объект платформы.

Жирное начертание текста включается свойством Шрифт.Жирный. Курсив — свойством Шрифт.Курсив. Если в HTML задан конкретный размер шрифта в пикселях или пунктах, преобразуйте его в единицы измерения 1С. Помните, что прямое копирование значений может привести к несоответствию масштаба.

Проблема с CSS классами

Если стили вынесены в отдельный файл или блок head, вам придется предварительно загрузить этот CSS и создать словарь соответствий классов и свойств перед основным циклом парсинга.

Не пытайтесь реализовать поддержку всех возможных CSS-свойств. Сфокусируйтесь на базовых: шрифты, цвета, выравнивание и границы. Это покроет 90% потребностей бизнес-отчетности. Сложные эффекты вроде теней или градиентов в табличном документе 1С часто не поддерживаются или выглядят некорректно.

Работа с изображениями и вложенными объектами

Тег <img> требует отдельного подхода. Табличный документ 1С поддерживает вставку картинок в ячейки. Вам нужно извлечь атрибут src из узла. Если ссылка относительная, дополните её до абсолютного адреса базового URL страницы. Если изображение закодировано в Base64, декодируйте строку в двоичные данные.

Полученные данные изображения загрузите в объект Картинка. Затем присвойте этот объект свойству Картинка области табличного документа. Настройте режим масштабирования, чтобы изображение не искажало высоту строки отчета. Обычно используется режим Пропорционально.

Вложенные таблицы представляют наибольшую сложность. При встрече тега <table> внутри другой таблицы рекурсивный алгоритм может сбиться. Лучшим решением является создание вложенного табличного документа или макета, который затем вставляется как объект в основную ячейку. Это изолирует структуру внутренней таблицы.

⚠️ Внимание: Загрузка тяжелых изображений напрямую в отчет может значительно увеличить размер файла результата. Рассмотрите возможность сжатия картинок перед вставкой или замены их на текстовые ссылки.

Очистка данных и финальная выгрузка

После заполнения макета часто остаются пустые строки или ячейки с лишними пробелами, возникшие из-за форматирования исходного HTML-кода (переносы строк между тегами). Используйте метод СокрЛ() и СокрП() для очистки текста ячеек. Также проверьте высоту строк: если она фиксирована в макете, текст может обрезаться.

Финальным этапом является вывод результата пользователю или сохранение в файл. Метод Показать() откроет окно просмотра. Для сохранения используйте метод Записать() с указанием формата, например, MXL или XLSX. Формат XLSX предпочтительнее для дальнейшей работы в Excel.

Критически важно проверить итоговый отчет на наличие битых ссылок на изображения и корректность кодировки кириллицы перед передачей документа пользователю. Автоматизируйте этот процесс, добавив валидацию заполненности ключевых полей перед записью файла.

💡

Идеальный результат достигается не полным копированием HTML, а селективным переносом только тех данных и стилей, которые важны для бизнес-логики отчета.

Частые ошибки и способы их устранения

Разработчики часто забывают закрывать объекты чтения XML, что приводит к утечкам памяти при пакетной обработке файлов. Всегда вызывайте метод Закрыть() в блоке Попытка...Исключение или используйте конструкцию ...КонецПопытки с гарантированным освобождением ресурсов.

Еще одна распространенная проблема — неверная интерпретация специальных символов HTML (_entity_), таких как &nbsp; или <. Парсер XML обычно расшифровывает их автоматически, но если вы работаете со строкой напрямую, замените их на соответствующие символы перед выводом в ячейку.

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

Можно ли использовать готовую внешнюю компоненту для парсинга HTML?

Да, существуют сторонние COM-объекты или DLL, например, на базе библиотеки HtmlAgilityPack, которые можно подключить к 1С. Они обеспечивают более надежный парсинг «грязного» HTML, чем встроенное чтение XML, но требуют установки дополнительных компонентов на клиентские места.

Как обработать таблицу, если в ней есть объединенные заголовки?

Вам нужно предварительно проанализировать всю таблицу, чтобы понять структуру объединений. Создайте матрицу занятости ячеек. При встрече rowspan пометьте соответствующие ячейки в нижних строках как «занятые», чтобы не записывать в них новые данные при итерации.

Поддерживает ли Табличный Документ 1С CSS Grid или Flexbox?

Нет, движок табличного документа 1С работает исключительно с классической сеткой строк и колонок. Сложные макеты на базе CSS Grid или Flexbox придется вручную пересчитывать в координаты ячеек или упрощать до линейной структуры.

Почему текст в ячейке отображается не тем шрифтом?

Проверьте, установлен ли указанный в стилях шрифт в операционной системе клиента. Если шрифт отсутствует, 1С заменит его на стандартный. Для кроссплатформенной совместимости используйте стандартные шрифты: Arial, Times New Roman, Verdana.