Как в 1С вывести текст с кликабельной гиперссылкой на документ в управляемой форме

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

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

Почему не работает стандартное поле ввода и реквизит объекта

Выясним причину частой ошибки начинающих разработчиков: попытки присвоить объект типа ФорматированнаяСтрока стандартному строковому реквизиту объекта информационной базы (например, Объект.Описание), который выведен на форму в виде элемента Поле ввода.

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

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

Пошаговое решение с использованием ФорматированнаяСтрока

Для корректного отображения гиперссылки внутри текста необходимо разделить хранение данных и их представление на форме. Разберем правильный алгоритм настройки по шагам.

  1. Создаем реквизит формы: переходим на закладку «Реквизиты» формы и добавляем новый реквизит (например, с именем ОписаниеСФорматированием). В качестве типа данных выбираем ФорматированнаяСтрока. Обратите внимание: реквизит создается именно у формы, а не в метаданных документа или задачи.
  2. Размещаем элемент на форме: перетаскиваем созданный реквизит в дерево элементов формы. Платформа автоматически назначит ему вид Поле надписи.
  3. Проверяем свойства элемента: убедимся, что свойство Гиперссылка у созданного элемента формы выключено (значение Ложь). Если включить это свойство, платформа будет воспринимать всю надпись целиком как одну ссылку. При выключенном свойстве активными будут только те фрагменты текста, которым мы программно зададим навигационную ссылку.
  4. Программно формируем текст: заполняем реквизит при открытии формы или при обработке событий.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Получаем ссылку на целевой документ (например, из реквизита задачи)
    СсылкаНаДокумент = Объект.ДокументОснование;
    
    Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
        // Получаем навигационную ссылку информационной базы
        НавСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокумент);
        
        // Формируем отдельные части текста
        ТекстДо = "Пожалуйста, ознакомьтесь с документом ";
        ТекстСсылки = Строка(СсылкаНаДокумент);
        ТекстПосле = " и завершите текущую задачу.";
        
        // Создаем кликабельный фрагмент
        ФрагментСсылки = Новый ФорматированнаяСтрока(ТекстСсылки, , , , НавСсылка);
        
        // Собираем итоговый массив компонентов
        ЧастиСтроки = Новый Массив;
        ЧастиСтроки.Добавить(ТекстДо);
        ЧастиСтроки.Добавить(ФрагментСсылки);
        ЧастиСтроки.Добавить(ТекстПосле);
        
        // Присваиваем результат реквизиту формы
        ОписаниеСФорматированием = Новый ФорматированнаяСтрока(ЧастиСтроки);
    КонецЕсли;

КонецПроцедуры

Конструктор ФорматированнаяСтрока принимает следующие параметры: исходная строка, шрифт, цвет текста, цвет фона и навигационная ссылка. Если пятым параметром передана навигационная ссылка информационной базы вида e1cib/data/..., платформа 1С автоматически обрабатывает щелчок мыши и открывает форму соответствующего объекта без написания дополнительного кода.

Перехват клика по ссылке

Если вам требуется выполнить собственную логику при нажатии на гиперссылку (например, проверить права, запросить подтверждение или открыть нестандартную форму), у элемента формы с видом Поле надписи предусмотрено клиентское событие ОбработкаНавигационнойСсылки.

Разберем пример его использования:


&НаКлиенте
Процедура ОписаниеСФорматированиемОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
    
    // Если нужно полностью переопределить стандартное поведение:
    Если НавигационнаяСсылкаФорматированнойСтроки = "МоеДействие" Тогда
        СтандартнаяОбработка = Ложь;
        ПоказатьОповещениеПользователя("Действие", , "Выполнен переход по специальной ссылке.");
    КонецЕсли;
    
    // Для стандартных ссылок e1cib оставляем СтандартнаяОбработка = Истина
КонецПроцедуры

Особенности и ограничения данного подхода

Проанализируем важные эксплуатационные ограничения связки ФорматированнаяСтрока и Поле надписи:

  1. Режим «Только для чтения»: поле надписи не позволяет пользователю вручную редактировать текст с клавиатуры. Оно подходит исключительно для вывода готовой информации.
  2. Хранение в базе данных: если исходный текст должен сохраняться между сеансами, сохраняйте в реквизите объекта Объект.Описание шаблон или идентификатор документа, а при чтении или создании формы динамически генерируйте ФорматированнаяСтрока.

Альтернативные способы реализации

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

  1. Форматированный документ (ПолеФорматированногоДокумента): если пользователю обязательно нужно предоставить возможность вручную набирать текст, выделять слова и самостоятельно вставлять гиперссылки. В этом случае на форму помещается реквизит типа ФорматированныйДокумент, а для хранения в базе данных используется строковый реквизит неограниченной длины (с выгрузкой через HTML методами ПолучитьHTML и УстановитьHTML) или ХранилищеЗначения.
  2. Поле HTML-документа: если требуется сложное визуальное оформление с таблицами и кнопками. В реквизит типа Строка помещается обычная HTML-разметка со ссылками <a href="...">, а клик перехватывается в событии ПриНажатии элемента формы.
  3. Горизонтальная группа элементов: когда структура текста строго фиксирована (текст слева, ссылка, текст справа). В форме создается Обычная группа с группировкой Горизонтальная если возможно, внутри которой располагаются декорация-надпись для первой части текста, поле надписи с признаком Гиперссылка = Истина для ссылки на объект и вторая декорация-надпись для завершающей части текста.
  4. Использование функций БСП: если в конфигурации присутствует Библиотека Стандартных Подсистем, можно использовать метод СтроковыеФункцииКлиент.ФорматированнаяСтрока(), позволяющий собрать сложный текст с тегами ссылок одной строкой без ручного наполнения массива.
← На главную