В процессе разработки интерфейсов в среде «1С:Предприятие 8.3» мы часто сталкиваемся с необходимостью вывода подробных текстовых пояснений для пользователей. Например, когда у номенклатуры есть сложная система статусов, бизнес-пользователю важно видеть расшифровку: какой статус за что отвечает. Стандартное свойство Подсказка имеет ряд жестких ограничений, из-за чего длинные тексты просто не помещаются на форме или загромождают интерфейс. В этой статье мы подробно разберем, как и где правильно хранить подробные текстовые подсказки, чтобы это было удобно и разработчикам, и пользователям.
Самый простой путь, который первым приходит в голову — прописать текст в свойство Подсказка элемента формы в конфигураторе. Однако здесь разработчики сразу сталкиваются с ограничениями:
Рассмотрим по шагам профессиональные архитектурные и технические альтернативы, которые предлагает нам платформа «1С:Предприятие 8.3».
В управляемых формах у каждого элемента ввода есть связанный элемент — расширенная подсказка. Чтобы активировать её, в конфигураторе достаточно нажать правой кнопкой мыши (ПКМ) на элементе формы и выбрать пункт «Расширенная подсказка». Под основным элементом появится подчиненный элемент, для которого можно настроить форматированный текст.
Под капотом расширенной подсказки лежит программный объект ФорматированнаяСтрока. Это дает нам огромные возможности:
Если текст подсказки должен меняться динамически в зависимости от условий, мы можем формировать расширенную подсказку программно при создании формы. Давайте проанализируем пример кода:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Создаем элементы форматированной строки
МассивКонструктора = Новый Массив;
МассивКонструктора.Добавить("Статус определяет жизненный цикл товара. ");
// Выделяем важное предупреждение жирным шрифтом
ШрифтВыделения = Новый Шрифт(,, Истина); // Жирный
ЦветВыделения = ЦветаСтиля.ПоясняющийОшибкуТекст;
МассивКонструктора.Добавить(Новый ФорматированнаяСтрока("Внимание! ", ШрифтВыделения, ЦветВыделения));
МассивКонструктора.Добавить("Статус 'Архив' запрещает продажи.");
// Собираем итоговую строку
ИтоговаяСтрока = Новый ФорматированнаяСтрока(МассивКонструктора);
// Устанавливаем в расширенную подсказку элемента формы "Статус"
Элементы.СтатусРасширеннаяПодсказка.Заголовок = ИтоговаяСтрока;
КонецПроцедуры
Чтобы длинный текст расширенной подсказки не занимал полезное пространство формы по умолчанию, нам нужно правильно настроить свойство ОтображениеПодсказки у элемента формы. Платформа предлагает два основных режима:
Если пояснение действительно объемное (содержит таблицы, подробные инструкции, скриншоты или ссылки на нормативные акты), идеальным местом для его хранения является штатная **Справка объекта**. Для автоматизации размещения статей с описанием функционала и кнопок вызова на управляемых формах можно использовать расширение для создания контекстной справки.
Справка в 1С создается на языке разметки HTML. Мы можем связать краткую подсказку на форме с подробным разделом справки. Разберем, как это реализовать:
Номенклатура) и пишем туда подробную методическую статью с использованием HTML-тегов.Подсказка у поля на форме пишем короткий текст: «Статус влияет на возможность отгрузки. Подробнее см. в справке.»ОткрытьСправку().Посмотрим на пример программного вызова конкретного раздела справки:
&НаКлиенте
Процедура ОткрытьИнструкциюПоСтатусам(Кнопка)
// Открываем встроенную справку на конкретном разделе
ОткрытьСправку("Справочник.Номенклатура.Форма.ФормаЭлемента/ИнструкцияПоСтатусам");
КонецПроцедуры
В крупных или быстро развивающихся корпоративных системах хранить тексты подсказок в конфигураторе неудобно: любое изменение формулировки требует обновления конфигурации (динамического или монопольного). Если подсказки должны оперативно редактировать бизнес-аналитики или методологи без привлечения программистов, оптимальным архитектурным решением будет создание **Регистра сведений**.
Давайте спроектируем структуру такого регистра:
ПодсказкиПолямФорм (непериодический, независимый).ИмяФормы (Строка, длина 150) — например, "Справочник.Номенклатура.Форма.ФормаЭлемента".ИмяЭлемента (Строка, длина 100) — например, "Статус".ТекстПодсказки (Строка, неограниченная длина) — здесь будет храниться подробный текст. При необходимости можно использовать тип ХранилищеЗначения для сохранения сложного HTML-форматирования.Теперь напишем универсальный алгоритм, который при открытии формы будет автоматически считывать подсказки из регистра и применять их к элементам интерфейса:
&НаСервере
Процедура ЗагрузитьПодсказкиИзБазыДанных()
ПолноеИмяФормы = ЭтотОбъект.ИмяФормы;
// Запрашиваем все подсказки, зарегистрированные для текущей формы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПодсказкиПолямФорм.ИмяЭлемента КАК ИмяЭлемента,
| ПодсказкиПолямФорм.ТекстПодсказки КАК ТекстПодсказки
|ИЗ
| РегистрСведений.ПодсказкиПолямФорм КАК ПодсказкиПолямФорм
|ГДЕ
| ПодсказкиПолямФорм.ИмяФормы = &ИмяФормы";
Запрос.УстановитьПараметр("ИмяФормы", ПолноеИмяФормы);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Проверяем, существует ли такой элемент на текущей форме
ЭлементФормы = Элементы.Найти(Выборка.ИмяЭлемента);
Если ЭлементФормы <> Неопределено Тогда
// Если у элемента включена расширенная подсказка, пишем в нее
ИмяЭлементаРасширеннойПодсказки = Выборка.ИмяЭлемента + "РасширеннаяПодсказка";
ЭлементРасширеннойПодсказки = Элементы.Найти(ИмяЭлементаРасширеннойПодсказки);
Если ЭлементРасширеннойПодсказки <> Неопределено Тогда
ЭлементРасширеннойПодсказки.Заголовок = Выборка.ТекстПодсказки;
Иначе
// Иначе заполняем стандартную всплывающую подсказку
ЭлементФормы.Подсказка = Выборка.ТекстПодсказки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот метод позволяет полностью отделить логику интерфейса от контента. Методолог может в любой момент зайти в режим «1С:Предприятие», открыть список регистра подсказок, изменить описание статуса, и пользователи сразу увидят обновленную информацию без перезапуска системы.
Если ваша конфигурация построена на базе БСП (например, 1С:ERP, 1С:КА, 1С:УТ, 1С:БП), мы можем использовать готовые функции библиотеки для работы с подсказками. В частности, БСП предоставляет инструменты для быстрого преобразования HTML-разметки в форматированную строку.
Используя функцию FormattedStringFromHTML (или ФорматированнаяСтрокаИзHTML в зависимости от версии БСП) из общего модуля СтроковыеФункцииКлиентСервер, мы можем хранить подсказки прямо в формате HTML (со списками, таблицами и стилями), а при выводе на форму мгновенно превращать их в красивый элемент интерфейса 1С. Для визуальной подготовки такого HTML-текста в режиме предприятия можно использовать встраиваемый WYSIWYG-редактор форматированного текста.
Рассмотрим пример использования функций БСП:
&НаСервере
Процедура ПрименитьHTMLПодсказкуБСП()
HTMLТекст = "<p><b>Важная информация:</b></p>"
+ "<ul>"
+ "<li><span style=""color: green;"">Новый</span> — можно редактировать;</li>"
+ "<li><span style=""color: red;"">Блокирован</span> — только для чтения.</li>"
+ "</ul>";
// Преобразуем HTML-разметку средствами БСП
ФорматированнаяПодсказка = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрокаИзHTML(HTMLТекст);
// Присваиваем расширенной подсказке элемента формы
Элементы.СтатусРасширеннаяПодсказка.Заголовок = ФорматированнаяПодсказка;
КонецПроцедуры
Для выбора оптимального места хранения и отображения длинных подсказок мы рекомендуем руководствоваться следующими правилами: