Как хранить и отображать длинные подсказки к реквизитам в 1С:Предприятии 8.3?

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

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

Проблема стандартного свойства «Подсказка» и стандарты 1С

Самый простой путь, который первым приходит в голову — прописать текст в свойство Подсказка элемента формы в конфигураторе. Однако здесь разработчики сразу сталкиваются с ограничениями:

  1. Ограничение длины и удобства чтения. Большой объем текста неудобно редактировать в маленьком поле конфигуратора, а на форме он превращается в огромную нечитаемую простыню.
  2. Стандарты разработки 1С. Согласно официальным рекомендациям фирмы «1С» (раздел 1.3 требований к интерфейсу), крайне не рекомендуется выводить в подсказке более 255 символов (включая пробелы). Длинные тексты перегружают восприятие и усложняют работу с формой. В таких случаях стандарты предписывают давать краткое пояснение со ссылкой на более подробный методический материал.

Рассмотрим по шагам профессиональные архитектурные и технические альтернативы, которые предлагает нам платформа «1С:Предприятие 8.3».

Решение 1. Использование «Расширенной подсказки» и программное форматирование

В управляемых формах у каждого элемента ввода есть связанный элемент — расширенная подсказка. Чтобы активировать её, в конфигураторе достаточно нажать правой кнопкой мыши (ПКМ) на элементе формы и выбрать пункт «Расширенная подсказка». Под основным элементом появится подчиненный элемент, для которого можно настроить форматированный текст.

Под капотом расширенной подсказки лежит программный объект ФорматированнаяСтрока. Это дает нам огромные возможности:

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Создаем элементы форматированной строки
    МассивКонструктора = Новый Массив;
    МассивКонструктора.Добавить("Статус определяет жизненный цикл товара. ");
    
    // Выделяем важное предупреждение жирным шрифтом
    ШрифтВыделения = Новый Шрифт(,, Истина); // Жирный
    ЦветВыделения = ЦветаСтиля.ПоясняющийОшибкуТекст;
    МассивКонструктора.Добавить(Новый ФорматированнаяСтрока("Внимание! ", ШрифтВыделения, ЦветВыделения));
    
    МассивКонструктора.Добавить("Статус 'Архив' запрещает продажи.");
    
    // Собираем итоговую строку
    ИтоговаяСтрока = Новый ФорматированнаяСтрока(МассивКонструктора);
    
    // Устанавливаем в расширенную подсказку элемента формы "Статус"
    Элементы.СтатусРасширеннаяПодсказка.Заголовок = ИтоговаяСтрока;
    
КонецПроцедуры

Решение 2. Управление отображением подсказки на форме (Кнопка «?»)

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

  1. Режим «Кнопка». Это наиболее дружелюбный для пользователя вариант. Рядом с полем ввода (например, «Статус») появляется аккуратная иконка в виде знака вопроса «?». При клике на нее открывается всплывающее облако с красиво отформатированным текстом любой длины. Данный подход экономит место на форме и полностью соответствует стандартам юзабилити 1С.
  2. Режим «Отображать снизу». Текст подсказки выводится мелким серым шрифтом непосредственно под полем ввода. Этот вариант подходит только для коротких фраз (до 100-150 символов), чтобы не растягивать форму по вертикали.

Решение 3. Интеграция со справочной системой («Справка объекта»)

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

Справка в 1С создается на языке разметки HTML. Мы можем связать краткую подсказку на форме с подробным разделом справки. Разберем, как это реализовать:

  1. В конфигураторе открываем справочную систему нужного объекта (например, справочника Номенклатура) и пишем туда подробную методическую статью с использованием HTML-тегов.
  2. В свойстве Подсказка у поля на форме пишем короткий текст: «Статус влияет на возможность отгрузки. Подробнее см. в справке.»
  3. Добавляем возможность открыть нужный раздел справки по клику на гиперссылку в подсказке или по отдельной кнопке с помощью метода ОткрытьСправку().

Посмотрим на пример программного вызова конкретного раздела справки:


&НаКлиенте
Процедура ОткрытьИнструкциюПоСтатусам(Кнопка)
    
    // Открываем встроенную справку на конкретном разделе
    ОткрытьСправку("Справочник.Номенклатура.Форма.ФормаЭлемента/ИнструкцияПоСтатусам");
    
КонецПроцедуры

Решение 4. Динамическое хранение подсказок в базе данных (Регистр сведений)

В крупных или быстро развивающихся корпоративных системах хранить тексты подсказок в конфигураторе неудобно: любое изменение формулировки требует обновления конфигурации (динамического или монопольного). Если подсказки должны оперативно редактировать бизнес-аналитики или методологи без привлечения программистов, оптимальным архитектурным решением будет создание **Регистра сведений**.

Давайте спроектируем структуру такого регистра:

Теперь напишем универсальный алгоритм, который при открытии формы будет автоматически считывать подсказки из регистра и применять их к элементам интерфейса:


&НаСервере
Процедура ЗагрузитьПодсказкиИзБазыДанных()
    
    ПолноеИмяФормы = ЭтотОбъект.ИмяФормы;
    
    // Запрашиваем все подсказки, зарегистрированные для текущей формы
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ПодсказкиПолямФорм.ИмяЭлемента КАК ИмяЭлемента,
        |   ПодсказкиПолямФорм.ТекстПодсказки КАК ТекстПодсказки
        |ИЗ
        |   РегистрСведений.ПодсказкиПолямФорм КАК ПодсказкиПолямФорм
        |ГДЕ
        |   ПодсказкиПолямФорм.ИмяФормы = &ИмяФормы";
        
    Запрос.УстановитьПараметр("ИмяФормы", ПолноеИмяФормы);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        // Проверяем, существует ли такой элемент на текущей форме
        ЭлементФормы = Элементы.Найти(Выборка.ИмяЭлемента);
        Если ЭлементФормы <> Неопределено Тогда
            
            // Если у элемента включена расширенная подсказка, пишем в нее
            ИмяЭлементаРасширеннойПодсказки = Выборка.ИмяЭлемента + "РасширеннаяПодсказка";
            ЭлементРасширеннойПодсказки = Элементы.Найти(ИмяЭлементаРасширеннойПодсказки);
            
            Если ЭлементРасширеннойПодсказки <> Неопределено Тогда
                ЭлементРасширеннойПодсказки.Заголовок = Выборка.ТекстПодсказки;
            Иначе
                // Иначе заполняем стандартную всплывающую подсказку
                ЭлементФормы.Подсказка = Выборка.ТекстПодсказки;
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

Этот метод позволяет полностью отделить логику интерфейса от контента. Методолог может в любой момент зайти в режим «1С:Предприятие», открыть список регистра подсказок, изменить описание статуса, и пользователи сразу увидят обновленную информацию без перезапуска системы.

Решение 5. Использование инструментов БСП (Библиотеки стандартных подсистем)

Если ваша конфигурация построена на базе БСП (например, 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Текст);
    
    // Присваиваем расширенной подсказке элемента формы
    Элементы.СтатусРасширеннаяПодсказка.Заголовок = ФорматированнаяПодсказка;
    
КонецПроцедуры

Подведем итоги: какую стратегию выбрать?

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

← На главную