Как вывести большой текст с HTML-разметкой и гиперссылками на начальную страницу 1С

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

В процессе разработки часто возникает задача информирования пользователей о важных изменениях в системе, вывода инструкций или новостей компании непосредственно при запуске программы. Обычные текстовые надписи на форме не позволяют использовать форматирование, гиперссылки или сложные структуры. Разберем подробно, как реализовать вывод "простыни" текста с полноценным оформлением на начальную страницу в среде 1С:Предприятие 8.3 на управляемых формах.

Метод 1. Использование Поля HTML документа

Этот способ является наиболее гибким, так как позволяет использовать всю мощь 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,...">.

Метод 2. Использование реквизита типа ФорматированныйДокумент

Если нам не требуется сложная верстка с использованием JS или специфических CSS-сеток, мы можем воспользоваться встроенным объектом ФорматированныйДокумент. Он проще в настройке и лучше интегрирован в объектную модель 1С.

Алгоритм настройки следующий:

  1. Создаем реквизит формы с типом ФорматированныйДокумент.
  2. Выносим его на форму. По умолчанию 1С предложит вид Поле форматированного документа.
  3. Для программного заполнения используем метод УстановитьHTML().

Разберем пример кода для заполнения такого реквизита:


& backward;НаСервере
Процедура ЗаполнитьТекстНаСервере()
    
    ПеременнаяТекст = "<html><body><h2>Внимание!</h2><p>Текст с <strong>выделением</strong>.</p></body></html>";
    РеквизитФорматированныйДокумент.УстановитьHTML(ПеременнаяТекст, Новый Структура);
    
КонецПроцедуры

Важный нюанс: ФорматированныйДокумент поддерживает ограниченный набор тегов. Если ваш HTML-код содержит сложные стили, он может отобразиться некорректно. Однако для стандартных "простыней" текста со ссылками это решение работает стабильнее в разных типах клиентов.

Как сделать уведомление неизбежным для прочтения

Часто заказчики просят реализовать механизм, при котором пользователь "фиг мог спрятаться" от информации. Разберем методы обеспечения гарантированного ознакомления.

Первый вариант — Размещение на начальной странице. В свойствах конфигурации в разделе "Рабочая область начальной страницы" мы можем добавить нашу форму. Она будет открываться каждый раз при запуске системы. Однако пользователь может просто переключиться на другую вкладку.

Второй вариант — Модальное окно или блокировка интерфейса. Мы можем использовать событие ПриНачалеРаботыСистемы в модуле управляемого приложения. Выясним причину, по которой нужно показать текст (например, вышла новая версия), и вызовем нашу форму:


ОткрытьФорму("ОбщаяФорма.УведомлениеПользователей", , , , , , Новый ОписаниеОповещения("ПослеОзнакомления", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);

Чтобы пользователь не закрыл окно мгновенно, не читая, можно применить небольшую хитрость: сделать кнопку "Ознакомлен" неактивной на протяжении первых 5-10 секунд после открытия формы, используя ПодключитьОбработчикОжидания.

Контроль прочтения через Регистр Сведений

Чтобы не надоедать пользователю одним и тем же текстом при каждом входе, проанализируем ситуацию с помощью регистра сведений. Создадим регистр ПрочитанныеУведомления с измерениями Пользователь и ВерсияТекста.

Логика работы будет следующей:

  1. При запуске система проверяет, есть ли запись в регистре для текущего пользователя и актуальной версии макета.
  2. Если записи нет — открываем форму принудительно.
  3. При нажатии кнопки "Я прочитал" на форме уведомления, записываем данные в регистр.

Посмотрим на пример функции проверки:


& backward;НаСервереБезКонтекста
Функция НужноПоказыватьУведомление(ТекущийПользователь, АктуальнаяВерсия)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.ПрочитанныеУведомления 
                   ГДЕ Пользователь = &Пользователь И Версия = &Версия";
    Запрос.УстановитьПараметр("Пользователь", ТекущийПользователь);
    Запрос.УстановитьПараметр("Версия", АктуальнаяВерсия);
    Возврат Запрос.Выполнить().Пустой();
КонецФункции

Использование инструментов БСП

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

Также стоит обратить внимание на подсистему «Текущие дела». Она позволяет создавать виджеты для рабочего стола, где в кратком виде будет отображаться заголовок важной новости, а при клике — открываться полный текст в HTML-формате.

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

← На главную