Использование HTML-макетов в 1С открывает широкие возможности для создания визуально богатых отчетов, сложных служебных записок и интерактивных форм, которые трудно реализовать стандартными средствами табличного документа. В этой статье мы подробно разберем, как подготовить такой макет, как программно передать в него данные и какие инструменты платформы 1С сделают этот процесс профессиональным и гибким.
Традиционный табличный документ 1С (MXL) отлично подходит для бухгалтерских отчетов, но когда речь заходит о динамической верстке, использовании современных шрифтов, вставке медиа-контента или создании документов, которые должны выглядеть одинаково на разных устройствах (включая мобильные), HTML становится незаменимым. Чтобы проконтролировать точность данных в таких отчетах после доработок алгоритмов, можно выполнить автоматическую сверку бухгалтерских проводок. Рассмотрим основные преимущества:
Самый быстрый и очевидный способ — это работа с HTML как с обычным текстом. Мы создаем макет типа HTML-документ, вставляем туда код и расставляем "маркеры" или "теги", которые затем заменим на реальные значения из информационной базы.
Проанализируем пример кода для такой замены:
// Получаем текст макета из метаданных
МакетHTML = ПолучитьМакет("МойМакетHTML");
ТекстШаблона = МакетHTML.ПолучитьТекст();
// Заменяем параметры на значения
ТекстШаблона = СтрЗаменить(ТекстШаблона, "[ДатаДокумента]", Формат(ТекущаяДата(), "ДЛФ=D"));
ТекстШаблона = СтрЗаменить(ТекстШаблона, "[ИмяПользователя]", ПараметрыСеанса.ТекущийПользователь);
ТекстШаблона = СтрЗаменить(ТекстШаблона, "[СостояниеЖелеза]", "Память: 16ГБ, CPU: 4 ядра");
// Выводим результат в поле HTML документа на форме
ЭтаФорма.ПолеHTMLПросмотра = ТекстШаблона;
Важный момент: Чтобы избежать случайной замены служебных слов HTML, используйте уникальные обрамления для ваших параметров, например, квадратные скобки [...] или фигурные скобки {{...}}.
Если ваша задача — дать пользователю возможность самостоятельно редактировать текст служебной записки, при этом сохраняя возможность программной вставки данных, используйте объект ОформляемыйДокумент (Formatted Document). Этот объект позволяет работать с текстом в визуальном режиме (WYSIWYG), но хранит его в формате, который легко конвертируется в HTML.
Разберем алгоритм работы с этим объектом:
ОформляемыйДокумент.Поле оформления текста.ЗаписатьHTML().Этот метод избавляет разработчика от необходимости заставлять пользователя учить HTML-теги. Пользователь просто пишет текст в 1С, а система сама генерирует корректную разметку. В качестве готового решения можно использовать расширяемый WYSIWYG-редактор форматированного текста для форм 1С.
Для сложных задач, когда нужно не просто заменить текст, а, например, динамически добавить строки в таблицу или изменить атрибуты элементов, лучше использовать объектную модель документа (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 и корректную обработку спецсимволов.
Когда данных очень много (например, таблица на 300 страниц с мониторингом железа), использование СтрЗаменить становится неэффективным. В таких случаях мы рекомендуем использовать технологию XSLT. Вы подготавливаете данные в формате XML, а правила оформления описываете в XSL-файле.
Выясним причину выбора этого метода: он полностью разделяет данные и оформление. Если завтра руководство потребует изменить шрифт или цвет таблиц, вам не придется переписывать код 1С — достаточно будет подправить XSL-шаблон.
Частая проблема HTML-макетов — потеря картинок (логотипов, подписей) при передаче файла. Чтобы сделать макет автономным, используйте кодирование изображений в Base64. Вы можете хранить картинку в справочнике 1С как двоичные данные, а затем вставлять её прямо в HTML-код.
Посмотрим на пример формирования строки для тега img:
ДвоичныеДанныеКартинки = КартинкаИзСправочника.ПолучитьДанные();
СтрокаBase64 = Base64Строка(ДвоичныеДанныеКартинки);
ТекстHTML = СтрЗаменить(ТекстHTML, "[Логотип]", "data:image/png;base64," + СтрокаBase64);
Теперь картинка "вшита" в сам текст HTML и будет отображаться даже без доступа к интернету или внешним папкам.
Печать HTML напрямую из формы 1С иногда может давать непредсказуемые результаты из-за настроек браузера пользователя. Если требуется строгое соответствие печатным формам (разрывы страниц, колонтитулы), мы рекомендуем следующий подход:
ТабличныйДокумент.Поле HTML документа.Однако помните, что современные версии платформы (начиная с 8.3.14) используют движок Webkit, который поддерживает современные CSS-директивы для печати, такие как break-before: page. Это позволяет управлять разрывами страниц непосредственно из HTML-кода макета.
Мы рассмотрели различные подходы к созданию HTML-макетов в 1С. Для простых объявлений достаточно функции СтрЗаменить, для пользовательского контента идеально подходит ОформляемыйДокумент, а для сложных систем отчетности — DOM и XSLT. Выбор метода зависит от ваших конкретных задач и требований к гибкости шаблона. Комбинируя эти инструменты, вы сможете создавать профессиональные и удобные документы, которые значительно упростят работу конечных пользователей.