При разработке на платформе 1С:Предприятие часто возникает задача программного получения HTML-разметки из объекта типа ФорматированныйДокумент. Это необходимо для отправки красивых писем по электронной почте, выгрузки описаний товаров на сайты или интеграции с внешними веб-сервисами. На первый взгляд задача кажется простой, но новички часто сталкиваются с ошибкой «Обращение к процедуре объекта как к функции».
В этой статье мы подробно разберем, как правильно работать с методами этого объекта, рассмотрим нюансы обработки изображений и научимся управлять содержимым документа программно. Для более подробного изучения возможностей объекта подойдёт статья с примерами использования форматированного документа.
Рассмотрим типичную ситуацию. Программист пытается получить текст в формате HTML, используя привычный для функций синтаксис:
// Ошибочный вариант
ТекстHTML = МойФорматированныйДокумент.ПолучитьHTML();
При выполнении этого кода система выдаст ошибку. Проанализируем причину: согласно синтакс-помощнику, метод ПолучитьHTML() является процедурой, а не функцией. Это означает, что он не возвращает значение напрямую, а записывает результат в переменную, которую вы передаете в качестве первого параметра.
Чтобы успешно получить код HTML, нам необходимо заранее подготовить переменную. Разберем правильный алгоритм действий:
ТекстHTML), в которую будет помещен результат.СтруктураВложений), если в документе могут быть картинки.Пример корректного кода:
ПеременнаяТекстHTML = "";
ПеременнаяВложения = Новый Структура;
// Вызываем процедуру
МойФорматированныйДокумент.ПолучитьHTML(ПеременнаяТекстHTML, ПеременнаяВложения);
// Теперь в переменной ПеременнаяТекстHTML содержится строка с кодом HTML
Сообщить(ПеременнаяТекстHTML);
Выясним важную особенность: когда мы вызываем ПолучитьHTML, 1С не вставляет данные картинок напрямую в текст HTML (например, через Base64). Вместо этого в тексте появляются ссылки вида src="image001".
Проанализируем, как обрабатываются данные во втором параметре (Вложения):
Структура.src тега img внутри HTML-кода.Картинка.Если вы планируете отображать этот HTML на внешнем сайте или в стороннем приложении, вам придется программно извлечь эти картинки из структуры и либо сохранить их на диск, либо самостоятельно преобразовать в формат Base64 и подставить в строку HTML.
Часто возникает путаница между получением разметки и получением чистого текста. Разберем их различия:
Метод ПолучитьТекст() — это функция. Она возвращает только текстовое содержимое документа без каких-либо тегов (<b>, <p>, <div> и т.д.). Ее удобно использовать, если вам нужно, например, посчитать количество символов в сообщении или выполнить поиск по тексту без учета оформления.
// Пример получения чистого текста без оформления
ЧистыйТекст = МойФорматированныйДокумент.ПолучитьТекст();
Рассмотрим ситуацию, когда нам нужно выполнить обратное действие — загрузить HTML-код в объект ФорматированныйДокумент. Для этого используется метод УстановитьHTML(ТекстHTML, Вложения).
Важно помнить следующие моменты:
Иногда требуется получить не весь документ целиком, а лишь его часть. Посмотрим на инструменты, которые предоставляет платформа для более тонкой работы:
ПолучитьЗакладки() можно определить границы документа (начало и конец).ПолучитьТекст(Начало, Конец) позволяет вырезать конкретный кусок текста по заданным закладкам.Это бывает полезно при автоматической генерации сложных отчетов, где нужно комбинировать части из разных шаблонов.
Проанализируем качество кода, который генерирует 1С. Получаемый HTML часто содержит специфические стили. Например, вместо современных CSS-классов 1С может использовать устаревшие теги <font> или инлайновые стили style="...". Если ваша цель — получить идеально чистый код для верстки сайта, рекомендуем использовать регулярные выражения для удаления лишних атрибутов после получения строки.
Критически важно для веб-клиента: Работа с ФорматированнымДокументом в браузере может отличаться от работы в тонком клиенте. Некоторые операции могут требовать асинхронного вызова (особенно при работе с файлами картинок) или зависеть от настроек безопасности браузера пользователя.
Таким образом, мы выяснили, что для получения HTML-кода необходимо использовать процедуру ПолучитьHTML, передавая в нее переменную-приемник. Это открывает широкие возможности для интеграции данных 1С с внешними системами и создания гибких интерфейсов взаимодействия с пользователем.