Как вывести окно с текстом и картинками в формате HTML при начале работы системы 1С?

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

При разработке или доработке конфигураций (например, на базе «Бухгалтерия предприятия 3.0») часто возникает задача показать пользователю приветственное окно при старте программы. Это может быть важная инструкция, новости компании или регламент работы. Обычно разработчики пытаются использовать элемент формы ПолеHTMLДокумента, но сталкиваются с двумя главными проблемами: вместо русского текста отображаются «кракозябры» (нарушена кодировка), а картинки не загружаются. Разберем по шагам, как правильно настроить HTML-документ в 1С и проанализируем различные способы вывода изображений.

Решение проблемы с кодировкой (почему появляются «кракозябры»)

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

Проанализируем ситуацию: чтобы программа четко понимала, как читать символы, нам нужно выполнить два обязательных правила:

  1. Файл или макет должен быть физически сохранен строго в кодировке UTF-8.
  2. Внутри самого HTML-кода, в блоке <head>, необходимо явно прописать метатег кодировки.

Добавьте следующую строку в ваш HTML-код:


<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    Текст вашей инструкции...
</body>
</html>

Это гарантирует, что русский текст всегда будет отображаться корректно на любом компьютере.

Три способа вывести картинку в поле HTML-документа

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

Способ 1: Встраивание картинки прямо в код HTML (Base64)

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

  1. Получаем картинку из макета в виде объекта ДвоичныеДанные.
  2. Переводим ее в формат Base64 с помощью функции Base64Строка().
  3. Обязательно очищаем полученную строку от символов переноса строк, иначе HTML может не распознать код.
  4. Подставляем результат в тег <img>.

ДвоичныеДанные = ПолучитьМакет("МояКартинка");
СтрокаBase64 = Base64Строка(ДвоичныеДанные);
// Удаляем переносы строк
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ПС, "");
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ВК, "");

// Формируем тег
ТегКартинки = "<img src=""data:image/png;base64, " + СтрокаBase64 + """ />";
ТекстHTML = СтрЗаменить(ТекстHTML, "[МестоДляКартинки]", ТегКартинки);

Способ 2: Использование навигационных ссылок (Временное хранилище)

Если картинка большая, переводить ее в Base64 не всегда оптимально. В этом случае мы можем поместить изображение во временное хранилище сеанса и передать в HTML адрес этой картинки.


// Помещаем макет во временное хранилище
АдресКартинки = ПоместитьВоВременноеХранилище(ПолучитьМакет("МояКартинка"), УникальныйИдентификатор);

// В HTML-коде заменяем маркер на полученный адрес
ТекстHTML = СтрЗаменить(ТекстHTML, "[АдресКартинки]", АдресКартинки);

В самом шаблоне HTML при этом должен быть прописан тег: <img src="[АдресКартинки]">.

Способ 3: Сохранение во временную папку на компьютере пользователя

В некоторых случаях проще физически выгрузить файл. При открытии формы мы сохраняем изображение в КаталогВременныхФайлов(), а в HTML передаем абсолютный путь до локального файла (например, file:///C:/temp/image.png).

Как правильно выводить свое окно при запуске (в конфигурациях на базе БСП)

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

Рассмотрим правильный подход:

  1. Используйте общий модуль ОбщегоНазначенияКлиентПереопределяемый.
  2. Найдите процедуру ПриНачалеРаботыСистемы(Параметры).
  3. Пропишите вызов вашей формы именно там.

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

Альтернативный вариант: Форматируемый документ

Если вам не нужны сложные скрипты и веб-интерфейсы внутри окна, а задача заключается только в том, чтобы красиво вывести форматированный текст с несколькими картинками, проанализируем альтернативу — ФорматируемыйДокумент.

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

← На главную