Как создавать HTML-макеты в 1С и передавать в них данные

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Зачем использовать HTML вместо табличного документа

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

  1. Гибкость дизайна: Возможность использования CSS для точного позиционирования и оформления.
  2. Интерактивность: Использование JavaScript для реакции на действия пользователя внутри документа. Для более масштабной роботизации действий пользователя в интерфейсе и автоматизации повторяющихся операций без использования API применяются RPA-платформы.
  3. Легкость интеграции: HTML-код легко отправить по электронной почте без потери форматирования. При регулярном получении ответных заказов в таком формате можно автоматизировать создание счетов и договоров в 1С:Бухгалтерии на основе данных из почты.
  4. Пользовательские шаблоны: Пользователи могут сами редактировать текст в привычных редакторах, вставляя специальные метки для замены.

Способ 1: Простая замена текстовых маркеров

Самый быстрый и очевидный способ — это работа с HTML как с обычным текстом. Мы создаем макет типа HTML-документ, вставляем туда код и расставляем "маркеры" или "теги", которые затем заменим на реальные значения из информационной базы.

Проанализируем пример кода для такой замены:


// Получаем текст макета из метаданных
МакетHTML = ПолучитьМакет("МойМакетHTML");
ТекстШаблона = МакетHTML.ПолучитьТекст();

// Заменяем параметры на значения
ТекстШаблона = СтрЗаменить(ТекстШаблона, "[ДатаДокумента]", Формат(ТекущаяДата(), "ДЛФ=D"));
ТекстШаблона = СтрЗаменить(ТекстШаблона, "[ИмяПользователя]", ПараметрыСеанса.ТекущийПользователь);
ТекстШаблона = СтрЗаменить(ТекстШаблона, "[СостояниеЖелеза]", "Память: 16ГБ, CPU: 4 ядра");

// Выводим результат в поле HTML документа на форме
ЭтаФорма.ПолеHTMLПросмотра = ТекстШаблона;

Важный момент: Чтобы избежать случайной замены служебных слов HTML, используйте уникальные обрамления для ваших параметров, например, квадратные скобки [...] или фигурные скобки {{...}}.

Способ 2: Использование объекта Оформляемый документ

Если ваша задача — дать пользователю возможность самостоятельно редактировать текст служебной записки, при этом сохраняя возможность программной вставки данных, используйте объект ОформляемыйДокумент (Formatted Document). Этот объект позволяет работать с текстом в визуальном режиме (WYSIWYG), но хранит его в формате, который легко конвертируется в HTML.

Разберем алгоритм работы с этим объектом:

  1. Разместите на форме реквизит с типом ОформляемыйДокумент.
  2. Свяжите его с элементом управления Поле оформления текста.
  3. Для получения HTML-кода используйте метод ЗаписатьHTML().

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

Способ 3: Профессиональная работа через DOM-модель

Для сложных задач, когда нужно не просто заменить текст, а, например, динамически добавить строки в таблицу или изменить атрибуты элементов, лучше использовать объектную модель документа (DOM). В 1С для этого предусмотрены классы ПостроительDOM и ЧтениеHTML.

Рассмотрим, как это работает на практике. Мы можем найти конкретный элемент по его идентификатору (ID) и изменить его содержимое:


Чтение = Новый ЧтениеHTML;
Чтение.УстановитьСтроку(ТекстHTMLМакэта);

Построитель = Новый ПостроительDOM;
ДокументHTML = Построитель.Прочитать(Чтение);

// Находим элемент с id="processor_info"
ЭлементИнфо = ДокументHTML.ПолучитьЭлементПоИдентификатору("processor_info");
Если ЭлементИнфо <> Неопределено Тогда
    ЭлементИнфо.ТекстовоеСодержимое = "Intel Core i7 - Актуально на " + ТекущаяДата();
КонецЕсли;

// Преобразуем обратно в строку
Запись = Новый ЗаписьHTML;
Запись.УстановитьСтроку();
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументHTML, Запись);
ИтоговыйHTML = Запись.Закрыть();

Этот способ гораздо надежнее простой замены строк, так как он гарантирует сохранение структуры HTML и корректную обработку спецсимволов.

Метод 4: XSLT-трансформация для сложных структур

Когда данных очень много (например, таблица на 300 страниц с мониторингом железа), использование СтрЗаменить становится неэффективным. В таких случаях мы рекомендуем использовать технологию XSLT. Вы подготавливаете данные в формате XML, а правила оформления описываете в XSL-файле.

Выясним причину выбора этого метода: он полностью разделяет данные и оформление. Если завтра руководство потребует изменить шрифт или цвет таблиц, вам не придется переписывать код 1С — достаточно будет подправить XSL-шаблон.

Внедрение изображений и автономность макета

Частая проблема HTML-макетов — потеря картинок (логотипов, подписей) при передаче файла. Чтобы сделать макет автономным, используйте кодирование изображений в Base64. Вы можете хранить картинку в справочнике 1С как двоичные данные, а затем вставлять её прямо в HTML-код.

Посмотрим на пример формирования строки для тега img:


ДвоичныеДанныеКартинки = КартинкаИзСправочника.ПолучитьДанные();
СтрокаBase64 = Base64Строка(ДвоичныеДанныеКартинки);
ТекстHTML = СтрЗаменить(ТекстHTML, "[Логотип]", "data:image/png;base64," + СтрокаBase64);

Теперь картинка "вшита" в сам текст HTML и будет отображаться даже без доступа к интернету или внешним папкам.

Особенности печати HTML-макетов

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

  1. Сформировать итоговый HTML-текст.
  2. Создать временный ТабличныйДокумент.
  3. Добавить в него рисунок типа Поле HTML документа.
  4. Установить область печати и вывести на печать.

Однако помните, что современные версии платформы (начиная с 8.3.14) используют движок Webkit, который поддерживает современные CSS-директивы для печати, такие как break-before: page. Это позволяет управлять разрывами страниц непосредственно из HTML-кода макета.

Заключение

Мы рассмотрели различные подходы к созданию HTML-макетов в 1С. Для простых объявлений достаточно функции СтрЗаменить, для пользовательского контента идеально подходит ОформляемыйДокумент, а для сложных систем отчетности — DOM и XSLT. Выбор метода зависит от ваших конкретных задач и требований к гибкости шаблона. Комбинируя эти инструменты, вы сможете создавать профессиональные и удобные документы, которые значительно упростят работу конечных пользователей.

← На главную