Разработка и Конфигурация · 9 мин
Как создать макет ActiveDocument в 1С
Пошаговая инструкция по созданию макета типа ActiveDocument в 1С: добавление HTML-шаблона, загрузка в поле документа, подстановка данных и типичные ошибки.
Макет типа ActiveDocument в 1С — это способ хранить и выводить форматированное содержимое (обычно HTML-документ) через объект «ПолеHTMLДокумента» или поле текстового документа. Такой макет применяют, когда нужно показать пользователю красиво оформленную справку, веб-страницу, интерактивный отчёт или шаблон с подставляемыми данными, не прибегая к табличному документу.
Технически макет ActiveDocument хранит двоичные данные файла — чаще всего HTML-страницы, которую затем можно загрузить программно и отобразить в форме. Это удобно для встроенных подсказок, визуальных панелей, интеграции с веб-сервисами через JavaScript и вывода динамического контента.
Ниже разобран полный цикл: от создания HTML-файла до вывода его в форме и подстановки данных из информационной базы, а также ограничения и типичные ошибки, с которыми сталкиваются разработчики.
Что такое макет ActiveDocument и когда он нужен
ActiveDocument — один из типов макетов в конфигураторе 1С, предназначенный для хранения произвольного файла (как правило, HTML-страницы) внутри конфигурации. В отличие от табличного макета, он не привязан к ячейкам и областям: это цельный документ, который обрабатывается внешним средством просмотра — встроенным браузерным движком платформы.
Типичные сценарии применения: встроенная справка по разделу программы, красиво оформленное приветственное окно, дашборд с диаграммами на JavaScript, страница с интерактивной картой, шаблон письма со сложной вёрсткой. Если задача сводится к печатной форме с точным позиционированием — правильнее использовать табличный макет или макет офисного документа.
Подготовка HTML-файла для макета
Перед добавлением макета подготовьте сам HTML-документ. Его можно написать в любом текстовом редакторе или среде разработки. Важно учесть несколько практических моментов: все стили лучше размещать внутри файла (в теге <style>), а не подключать внешними ссылками, потому что при выводе в поле HTML-документа внешние ресурсы могут не загрузиться или потребуют доступа в интернет.
Кодировку файла сохраняйте в UTF-8 — это исключает проблемы с отображением кириллицы. Если в документе планируются картинки, их либо встраивают в формате base64 прямо в разметку, либо хранят отдельными макетами типа «Двоичные данные» и подставляют программно.
Пример минимального содержимого файла:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body { font-family: sans-serif; padding: 16px; }
.header { color: #2a5c8a; }
</style>
</head>
<body>
<h2>Справка по разделу</h2>
<p>Текст подсказки для пользователя.</p>
</body>
</html>
Создание макета в конфигураторе
Откройте конфигуратор и найдите объект, которому будет принадлежать макет: это может быть общий макет (ветка «Общие → Общие макеты») или макет конкретного объекта — справочника, документа, обработки. Общий макет удобнее, если HTML-страница используется из разных мест конфигурации.
- 1Откройте конфигуратор и разверните ветку «Общие → Общие макеты» (или макеты нужного объекта).
- 2Нажмите «Добавить» и введите имя макета, например СправкаHTML.
- 3В поле «Тип макета» выберите «ActiveDocument».
- 4В открывшемся окне загрузите подготовленный HTML-файл через кнопку загрузки или пункт меню.
- 5Сохраните макет и обновите конфигурацию базы данных (F7).
После сохранения макет становится доступен из встроенного языка. Проверить, что файл загрузился корректно, можно, открыв макет повторно: содержимое должно отображаться в окне просмотра.
Программное получение и вывод в форме
Чтобы показать содержимое макета пользователю, на форму добавляют элемент «Поле HTML-документа» (реквизит формы типа «Строка» либо непосредственно элемент с установленным свойством). Затем в коде получают макет и присваивают его текст этому полю.
Типовой фрагмент кода для управляемой формы:
// В модуле формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Макет = ПолучитьОбщийМакет("СправкаHTML");
// Макет ActiveDocument возвращается как текст/двоичные данные
ТекстHTML = Макет.ПолучитьТекст();
ПолеHTML = ТекстHTML;
КонецПроцедуры
Для макета, принадлежащего конкретному объекту, вызов отличается: используется менеджер объекта, например Обработки.МояОбработка.ПолучитьМакет("СправкаHTML"). Если макет возвращается в виде двоичных данных, потребуется преобразование в строку с указанием кодировки UTF-8.
Подстановка данных в HTML-шаблон
Частая задача — показать в HTML-странице актуальные данные из базы: имя пользователя, остатки, список документов. Простейший рабочий подход — оставить в шаблоне текстовые маркеры и заменять их функцией СтрЗаменить() перед выводом.
ТекстHTML = Макет.ПолучитьТекст();
ТекстHTML = СтрЗаменить(ТекстHTML, "[ИмяПользователя]", ИмяПользователя());
ТекстHTML = СтрЗаменить(ТекстHTML, "[Дата]", Формат(ТекущаяДатаСеанса(), "ДЛФ=D"));
ПолеHTML = ТекстHTML;
Для табличных данных удобнее генерировать фрагменты разметки в цикле и вставлять готовый блок в шаблон. При этом важно экранировать специальные символы, если значения могут содержать угловые скобки или кавычки, — иначе вёрстка развалится или возникнет уязвимость при подстановке пользовательского ввода.
Ограничения и особенности работы
Поле HTML-документа в 1С использует встроенный браузерный движок, возможности которого зависят от версии платформы и режима совместимости. Современные возможности CSS и JavaScript могут поддерживаться частично, поэтому сложную вёрстку и новые API стоит проверять на целевой версии платформы заранее.
Дополнительные ограничения: внешние ресурсы (шрифты, картинки по URL, CDN-скрипты) требуют сетевого доступа и могут блокироваться политиками безопасности; в веб-клиенте поведение поля отличается от тонкого клиента; большие HTML-файлы увеличивают размер конфигурации и время её обновления.
Чем заменить ActiveDocument
Подходит для печатных форм и отчётов. Точное позиционирование, но нет интерактивности и сложной вёрстки.
Универсальное хранение любого файла, включая HTML. Получение содержимого требует ручной работы с данными.
Гибко для частых правок без обновления конфигурации, но файл нужно доставлять на каждое рабочее место или сервер.
Проверка результата и типичные ошибки
После внедрения проверьте отображение в том клиенте, в котором будут работать пользователи: тонком, толстом или веб-клиенте. Убедитесь, что кириллица отображается корректно, стили применяются, а подставляемые данные появляются в нужных местах.
Как проверить результат
Страница отображается со стилями и корректным текстом
Пустое поле, ошибка получения макета или «кракозябры» вместо текста
Маркеры заменены реальными значениями из базы
В тексте видны необработанные маркеры вида [ИмяПользователя]
Оформление сохраняется при отключённой сети
Стили и картинки пропадают — значит, они подключены внешними ссылками
Что важно запомнить
Макет ActiveDocument создаётся в конфигураторе загрузкой готового HTML-файла в кодировке UTF-8, выводится через «Поле HTML-документа» вызовом ПолучитьОбщийМакет() и ПолучитьТекст(), а данные подставляются заменой маркеров с обязательным экранированием. После изменений макета всегда обновляйте конфигурацию базы данных.
Частые вопросы
Можно ли редактировать HTML прямо в конфигураторе?
Да, макет ActiveDocument открывается на просмотр и редактирование в конфигураторе, но встроенный редактор минимален. Для серьёзной вёрстки удобнее править файл во внешнем редакторе и перезагружать его в макет.
Почему ПолучитьМакет() выдаёт ошибку «Макет не найден»?
Чаще всего причины три: конфигурация базы данных не обновлена после добавления макета, неверно указано имя макета в строке вызова, либо общий макет запрашивается через менеджер объекта вместо ПолучитьОбщийМакет().
Работает ли JavaScript в поле HTML-документа?
Да, скрипты выполняются, но набор поддерживаемых возможностей зависит от версии платформы и типа клиента. Сложные библиотеки и современные API нужно проверять на целевом окружении, а обмен данными между скриптом и кодом 1С требует отдельной обработки событий поля.
Как вставить картинку в макет ActiveDocument?
Два рабочих способа: встроить изображение прямо в HTML в формате base64 или хранить картинку отдельным макетом типа «Двоичные данные» и программно формировать ссылку на неё при выводе. Внешние ссылки на изображения ненадёжны в закрытых сетях.
Чем ActiveDocument отличается от макета «Текстовый документ»?
Макет «Текстовый документ» хранит простой текст и удобен для шаблонов сообщений и запросов. ActiveDocument хранит файл целиком и предназначен для вывода форматированного содержимого — HTML-страниц с разметкой, стилями и скриптами.
Можно ли использовать макет ActiveDocument в веб-клиенте?
Да, поле HTML-документа поддерживается в веб-клиенте, но поведение может отличаться от тонкого клиента: часть событий и особенности рендеринга обрабатываются иначе. Финальную проверку всегда делайте в том клиенте, который используют конечные пользователи.