К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как создать ActiveDocument в 1С: пошаговая инструкция

Что такое ActiveDocument в 1С, как добавить элемент на форму, загрузить HTML и связать с данными. Пошаговая инструкция, код, ошибки и FAQ.

ActiveDocument — это элемент управления в 1С:Предприятии, который позволяет встраивать в формы документы, отображаемые через механизм браузера: HTML-страницы, отчёты, интерактивные панели. По сути это обёртка над технологией ActiveX/COM, наследником которой стал более современный элемент «Поле HTML-документа». Разработчики сталкиваются с ActiveDocument при доработке старых конфигураций на обычных формах (1С 8.1, 8.2) и при переносе решений на управляемые формы.

Типичные сценарии использования: показ HTML-отчёта с навигацией, встроенная справка, отображение данных из внешних источников, интерактивные дашборды, предпросмотр документов. В обычных формах ActiveDocument добавлялся напрямую как элемент управления; в управляемых формах его роль выполняет поле с видом «Поле HTML-документа», а программный доступ осуществляется через объект HTMLDocument.

Ниже разобраны оба подхода: классический ActiveDocument для обычных форм и современный аналог для управляемых форм, с примерами кода, типичными ошибками и способами проверки результата.

Что такое ActiveDocument и когда он нужен

ActiveDocument — элемент управления обычной формы, отображающий содержимое через движок Internet Explorer (технология OLE/ActiveX). Он умеет показывать HTML-страницы, загружать документы по URL и предоставляет доступ к объектной модели документа (DOM) из встроенного языка 1С.

Элемент оправдан, когда нужно: отобразить форматированный HTML прямо в форме, организовать гиперссылочную навигацию внутри справки или отчёта, встроить интерактивную панель с кнопками и скриптами. Для простого вывода текста или таблиц он избыточен — дешевле использовать поле надписи или табличный документ.

Важно понимать ограничение: ActiveDocument относится к обычным формам и толстому клиенту. В тонком и веб-клиенте он недоступен, поэтому новые разработки должны опираться на «Поле HTML-документа».

Создание ActiveDocument в обычной форме

Откройте конфигуратор, найдите нужный объект (обработку, отчёт или документ) и откройте его форму. В палитре элементов управления выберите «ActiveDocument» и разместите его на форме. Задайте имя элемента, например АктивныйДокумент, и при необходимости настройте привязки, чтобы элемент растягивался вместе с формой.

Далее в модуле формы создайте обработчик события ПриОткрытии и заполните документ содержимым. Есть два пути: загрузить готовый файл или URL, либо сформировать HTML программно и записать его в документ.

После записи содержимого можно обращаться к элементам документа через DOM: Документ.getElementById("Итог") вернёт элемент с нужным идентификатором, и его свойство innerText можно менять из кода 1С. Так реализуется обновление данных без полной перезагрузки страницы.

Программная загрузка HTML и связь с данными

Для загрузки внешнего файла или страницы используется метод Перейти(Адрес), где адрес — путь к локальному HTML-файлу или URL. Учтите, что загрузка асинхронна: обращаться к Документ сразу после вызова нельзя, нужно дождаться события завершения загрузки (обработчик события элемента «ДокументСформирован» или проверка свойства readyState).

Связь с данными удобно строить через генерацию HTML на сервере или в модуле формы: запрос выбирает данные, цикл формирует строки таблицы, итоговая строка записывается в документ. Гиперссылки вида <a href="doc:123"> можно перехватывать в обработчике события перехода и открывать соответствующие объекты 1С.

Порядок действий
  1. 1
    Добавьте элемент ActiveDocument на обычную форму и задайте имя
  2. 2
    В ПриОткрытии выполните Перейти("about:blank") для инициализации
  3. 3
    Получите объект Документ и запишите HTML через open/write/close
  4. 4
    Добавьте обработчики событий для навигации и обновления данных
  5. 5
    Проверьте отображение в толстом клиенте и обновление при смене данных

Аналог в управляемых формах: Поле HTML-документа

В управляемых формах ActiveDocument отсутствует. Вместо него создайте реквизит формы с типом «Строка» (неограниченной длины), перетащите его на форму и в свойствах поля установите вид «Поле HTML-документа». Всё содержимое — это просто строка с HTML-кодом, которую вы присваиваете реквизиту.

Доступа к DOM из кода в управляемых формах нет — взаимодействие идёт только через замену всего содержимого реквизита. Событие «ПриНажатии» поля HTML-документа позволяет перехватывать клики по ссылкам: в параметрах события передаются данные навигационной ссылки, которые можно разобрать и обработать, отменив стандартный переход.

Сравнение вариантов

ActiveDocument (обычные формы)

Полный доступ к DOM, события загрузки, но только толстый клиент и устаревшая технология

Поле HTML-документа (управляемые формы)

Работает в тонком и веб-клиенте, проще в реализации, но нет доступа к DOM — только замена строки

Табличный документ

Подходит для печатных форм и отчётов без интерактивности; не выполняет скрипты

Проверка результата и типичные ошибки

Признак корректной работы — документ отображается сразу после открытия формы, данные обновляются без мерцания, клики по ссылкам обрабатываются вашим кодом. Если вместо содержимого видна пустая область, чаще всего причина в обращении к Документ до завершения загрузки либо в ошибке синтаксиса HTML.

Типичные ошибки
01
Обращение к Документ сразу после Перейти() — DOM ещё не загружен, получаете ошибку или пустой объект; делайте Перейти("about:blank") заранее или ждите события загрузки
02
Незакрытые кавычки и теги в сформированной строке HTML — документ отображается частично или не отображается вовсе
03
Попытка использовать ActiveDocument в тонком клиенте — элемент недоступен, нужен переход на Поле HTML-документа
04
Хранение большого HTML в реквизите ограниченной длины — строка обрезается, разметка ломается
Контрольные точки

Как проверить результат

Отображение при открытии формы
Норма

HTML виден сразу, без пустой области

Тревожный признак

Пустое поле или сообщение об ошибке скрипта

Обновление данных
Норма

После смены данных содержимое перезаписывается корректно

Тревожный признак

Старые данные остаются или документ очищается

Клики по ссылкам
Норма

Событие перехватывается, открывается нужный объект 1С

Тревожный признак

Браузер пытается перейти по ссылке и показывает ошибку навигации

Ограничения и меры предосторожности

ActiveDocument работает на движке Internet Explorer, поэтому современные стандарты HTML5 и CSS3 могут отображаться некорректно. Не загружайте в элемент страницы из недоверенных источников: встроенные скрипты выполняются в контексте клиентского приложения и теоретически могут получить доступ к локальным ресурсам.

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

Итог

Что важно запомнить

ActiveDocument — элемент обычных форм с доступом к DOM через Документ и методом Перейти(). В управляемых формах его заменяет Поле HTML-документа со строковым реквизитом. Инициализируйте документ через about:blank, формируйте HTML целиком и проверяйте работу в целевом клиенте.

Частые вопросы

Чем ActiveDocument отличается от Поля HTML-документа?

ActiveDocument — элемент обычных форм с программным доступом к объектной модели документа (DOM) и событиями загрузки. Поле HTML-документа в управляемых формах — это просто строковый реквизит с HTML: DOM недоступен, содержимое меняется только целиком, зато работает в тонком и веб-клиенте.

Почему ActiveDocument показывает пустую область?

Чаще всего код обращается к свойству Документ до завершения загрузки. Выполните сначала Перейти("about:blank"), дождитесь инициализации и только потом вызывайте open/write/close. Также проверьте синтаксис сформированного HTML — незакрытый тег может оборвать отображение.

Можно ли использовать ActiveDocument в тонком клиенте?

Нет, элемент доступен только в толстом клиенте с обычными формами. Для тонкого и веб-клиента используйте Поле HTML-документа — реквизит формы типа Строка с соответствующим видом поля.

Как обработать нажатие на ссылку внутри документа?

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

Как вывести в документ данные из запроса?

Выполните запрос, пройдите по выборке в цикле и соберите строки HTML-таблицы в одну переменную. Затем запишите готовую строку в документ одним вызовом (write в обычных формах или присваивание реквизиту в управляемых). Поэлементное обновление в цикле заметно медленнее.