Как реализовать ввод и сохранение пользовательских подсказок для элементов форм в 1С?

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

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

Ограничения платформы: почему нельзя менять подсказки напрямую в метаданных

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

Платформа 1С строго разделяет режим конфигурирования (дизайн-тайм) и режим исполнения (рантайм):

  1. Структура метаданных конфигурации (CF) и расширений (CFE) недоступна для модификации «на лету» в обычном пользовательском сеансе.
  2. Теоретический вариант с программной выгрузкой конфигурации в файлы XML, их правкой и последующей загрузкой требует прав администратора, монопольного доступа к информационной базе и перезапуска всех сеансов. Для оперативной работы пользователей такой подход категорически не подходит.

Единственно верное архитектурное решение — сохранять пользовательские тексты в базе данных (в регистре сведений) и динамически подставлять их в свойства элементов формы в момент ее открытия на сервере.

Шаг 1. Создание структуры регистра сведений для хранения подсказок

Разберем структуру непериодического независимого регистра сведений, который будет служить хранилищем подсказок. Создадим регистр сведений (например, ПользовательскиеПодсказкиКФормам):

  1. Измерения:
    1. ИмяФормы — тип Строка (длина 150–250, например, "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента").
    2. ИмяЭлемента — тип Строка (длина 100, имя конкретного элемента на форме).
  2. Ресурсы:
    1. ТекстПодсказки — тип Строка (неограниченная длина) или ХранилищеЗначения (если планируется хранить форматированный документ).
    2. ВидОтображения — тип Число или ПеречислениеСсылка (для выбора: всплывающая подсказка, подсказка ввода или расширенная подсказка).

Шаг 2. Разработка обработки для сбора элементов формы и ввода подсказок

Чтобы пользователю было удобно настраивать подсказки, создадим обработку со следующим алгоритмом:

  1. Пользователь выбирает объект метаданных и одну из его форм.
  2. Обработка получает экземпляр формы и считывает доступные элементы управления.
  3. Список элементов выводится в таблицу, где пользователь заполняет требуемый текст.

Посмотрим на пример серверного кода обработки, выполняющего рекурсивный обход элементов выбранной формы:


&НаСервере
Процедура ЗаполнитьЭлементыФормы(ИмяВыбраннойФормы)
    
    ТаблицаЭлементов.Очистить();
    
    // Получаем форму объекта для анализа ее состава
    ТестоваяФорма = ПолучитьФорму(ИмяВыбраннойФормы);
    
    ОбойтиКоллекциюЭлементов(ТестоваяФорма.Элементы, ИмяВыбраннойФормы);
    
КонецПроцедуры

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

Шаг 3. Централизованное применение подсказок при открытии форм

Чтобы не вносить ручные изменения в код каждой формы конфигурации, используем расширение конфигурации или переопределяемые модули Библиотеки Стандартных Подсистем (БСП).

Рассмотрим реализацию через расширение: подключим перехватчик к событию ПриСозданииНаСервере базовых форм или используем вызов общего модуля:


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

Свойства элементов управляемой формы для вывода пояснений

Разберем, какие штатные свойства элементов формы платформы 1С можно использовать в зависимости от желаемого интерфейсного эффекта:

  1. Элемент.Подсказка — классический вариант. Текст отображается в виде всплывающего окна при наведении указателя мыши на элемент или его заголовок.
  2. Элемент.ПодсказкаВвода — серый поясняющий текст внутри пустого поля (например: «Укажите номер договора...»). Пропадает, как только пользователь начинает ввод данных.
  3. Элемент.РасширеннаяПодсказка.Заголовок и Элемент.РасширеннаяПодсказка.Отображение — развернутый постоянный текст, отображаемый под полем ввода или в виде кликабельной гиперссылки.

Альтернативные типовые механизмы

Если задача заключается не в создании собственной подсистемы с нуля, а в решении бизнес-потребности типовыми средствами, проанализируем готовые возможности БСП:

  1. Дополнительные реквизиты и сведения: если поля добавляются пользователями динамически, в БСП уже предусмотрено стандартное поле для ввода всплывающей подсказки к каждому доп. реквизиту.
  2. Подсистема «Заметки»: позволяет пользователям прикреплять произвольные комментарии и памятки к любым объектам базы без изменения структуры форм.
  3. Встроенная база знаний / Инструкции: создание справочника статей и инструкций с размещением на ключевых формах универсальной кнопки открытия контекстной справки.
← На главную