В процессе разработки часто возникает задача информирования пользователей о важных изменениях в системе, вывода инструкций или новостей компании непосредственно при запуске программы. Обычные текстовые надписи на форме не позволяют использовать форматирование, гиперссылки или сложные структуры. Разберем подробно, как реализовать вывод "простыни" текста с полноценным оформлением на начальную страницу в среде 1С:Предприятие 8.3 на управляемых формах.
Этот способ является наиболее гибким, так как позволяет использовать всю мощь HTML и CSS для оформления текста. Рассмотрим пошагово, как это реализовать.
Во-первых, создадим в нашей форме новый реквизит. Назовем его, например, ТекстИнструкции. В качестве типа данных выберем Строка (длина неограниченна). После этого вынесем реквизит на форму. В свойствах появившегося элемента формы крайне важно изменить Вид на Поле HTML документа.
Чтобы текст был статичным и его было удобно редактировать разработчику, лучше всего хранить сам HTML-код в общем макете. Создадим общий макет с типом Текстовый документ и назовем его МакетИнструкции. В него запишем наш HTML-код:
<html>
<head>
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; }
h1 { color: #2e6c80; }
.important { color: red; font-weight: bold; }
</style>
</head>
<body>
<h1>Важное уведомление!</h1>
<p>С сегодняшнего дня правила заполнения документов изменились.</p>
<p>Ознакомьтесь с <a href="e1cib/app/Справочник.Инструкции">новой инструкцией</a>.</p>
</body>
</html>
Теперь проанализируем, как программно заполнить наше поле на форме. В модуле формы в обработчике ПриСозданииНаСервере пропишем следующий код:
& backward;НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МакетHTML = ПолучитьОбщийМакет("МакетИнструкции");
ТекстИнструкции = МакетHTML.ПолучитьТекст();
КонецПроцедуры
При использовании HTML-поля мы можем столкнуться с необходимостью вставки изображений. Поскольку прямой путь к файлу на диске пользователя может быть недоступен (особенно в веб-клиенте), рассмотрим вариант вставки через Base64. Мы можем перекодировать картинку в строку и вставить ее прямо в тег <img src="data:image/png;base64,...">.
Если нам не требуется сложная верстка с использованием JS или специфических CSS-сеток, мы можем воспользоваться встроенным объектом ФорматированныйДокумент. Он проще в настройке и лучше интегрирован в объектную модель 1С.
Алгоритм настройки следующий:
ФорматированныйДокумент.УстановитьHTML().Разберем пример кода для заполнения такого реквизита:
& backward;НаСервере
Процедура ЗаполнитьТекстНаСервере()
ПеременнаяТекст = "<html><body><h2>Внимание!</h2><p>Текст с <strong>выделением</strong>.</p></body></html>";
РеквизитФорматированныйДокумент.УстановитьHTML(ПеременнаяТекст, Новый Структура);
КонецПроцедуры
Важный нюанс: ФорматированныйДокумент поддерживает ограниченный набор тегов. Если ваш HTML-код содержит сложные стили, он может отобразиться некорректно. Однако для стандартных "простыней" текста со ссылками это решение работает стабильнее в разных типах клиентов.
Часто заказчики просят реализовать механизм, при котором пользователь "фиг мог спрятаться" от информации. Разберем методы обеспечения гарантированного ознакомления.
Первый вариант — Размещение на начальной странице. В свойствах конфигурации в разделе "Рабочая область начальной страницы" мы можем добавить нашу форму. Она будет открываться каждый раз при запуске системы. Однако пользователь может просто переключиться на другую вкладку.
Второй вариант — Модальное окно или блокировка интерфейса. Мы можем использовать событие ПриНачалеРаботыСистемы в модуле управляемого приложения. Выясним причину, по которой нужно показать текст (например, вышла новая версия), и вызовем нашу форму:
ОткрытьФорму("ОбщаяФорма.УведомлениеПользователей", , , , , , Новый ОписаниеОповещения("ПослеОзнакомления", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
Чтобы пользователь не закрыл окно мгновенно, не читая, можно применить небольшую хитрость: сделать кнопку "Ознакомлен" неактивной на протяжении первых 5-10 секунд после открытия формы, используя ПодключитьОбработчикОжидания.
Чтобы не надоедать пользователю одним и тем же текстом при каждом входе, проанализируем ситуацию с помощью регистра сведений. Создадим регистр ПрочитанныеУведомления с измерениями Пользователь и ВерсияТекста.
Логика работы будет следующей:
Посмотрим на пример функции проверки:
& backward;НаСервереБезКонтекста
Функция НужноПоказыватьУведомление(ТекущийПользователь, АктуальнаяВерсия)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.ПрочитанныеУведомления
ГДЕ Пользователь = &Пользователь И Версия = &Версия";
Запрос.УстановитьПараметр("Пользователь", ТекущийПользователь);
Запрос.УстановитьПараметр("Версия", АктуальнаяВерсия);
Возврат Запрос.Выполнить().Пустой();
КонецФункции
Если ваша конфигурация построена на базе БСП (Библиотеки стандартных подсистем), рекомендуем не изобретать велосипед. Подсистема «Информационный центр» уже содержит готовые механизмы для вывода блоков новостей и полезных ссылок. Вы можете настроить вывод контента через стандартные обработки, входящие в состав библиотеки, что сэкономит время на разработку и обеспечит корректную работу в веб-клиенте.
Также стоит обратить внимание на подсистему «Текущие дела». Она позволяет создавать виджеты для рабочего стола, где в кратком виде будет отображаться заголовок важной новости, а при клике — открываться полный текст в HTML-формате.
Подводя итог, выбор метода зависит от сложности оформления. Для простых текстов с выделением используйте ФорматированныйДокумент. Для сложных интерактивных страниц с уникальным дизайном — Поле HTML документа в связке с общими макетами.