При разработке или доработке конфигураций (например, на базе «Бухгалтерия предприятия 3.0») часто возникает задача показать пользователю приветственное окно при старте программы. Это может быть важная инструкция, новости компании или регламент работы. Обычно разработчики пытаются использовать элемент формы ПолеHTMLДокумента, но сталкиваются с двумя главными проблемами: вместо русского текста отображаются «кракозябры» (нарушена кодировка), а картинки не загружаются. Разберем по шагам, как правильно настроить HTML-документ в 1С и проанализируем различные способы вывода изображений.
Поле HTML-документа в платформе 1С:Предприятие использует встроенный движок (чаще всего WebKit), который строго относится к кодировкам. Если вы просто создали файл .htm или сохранили макет и попытались вывести его на форму, текст может исказиться.
Проанализируем ситуацию: чтобы программа четко понимала, как читать символы, нам нужно выполнить два обязательных правила:
<head>, необходимо явно прописать метатег кодировки.Добавьте следующую строку в ваш HTML-код:
<html>
<head>
<meta charset="utf-8">
</head>
<body>
Текст вашей инструкции...
</body>
</html>
Это гарантирует, что русский текст всегда будет отображаться корректно на любом компьютере.
Встроенное поле HTML-документа в 1С не может автоматически подтягивать картинки напрямую из конфигуратора (например, из общих картинок) по простым относительным путям. Рассмотрим подробнее три рабочих механизма обхода этого ограничения.
Способ 1: Встраивание картинки прямо в код HTML (Base64)
Это самый надежный способ. Картинка преобразуется в текстовую строку и становится частью самого HTML-кода. Вам не придется возиться с внешними файлами или хранилищами. Посмотрим на пример:
ДвоичныеДанные.Base64Строка().<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С сама берет на себя всю работу по хранению картинок и их правильному отображению без необходимости генерировать HTML-теги и использовать Base64-кодирование. Это значительно ускоряет разработку простых информационных окон.