При разработке управляемых форм часто возникает задача сформировать пояснительный текст, в середину которого встроена интерактивная ссылка. Например, в задаче пользователю требуется вывести строку вида: «Проверьте документ Поступление товаров №123 от 10.05 и подтвердите выполнение», где номер документа должен быть кликабельным и открывать форму соответствующего объекта. Разберем, как правильно реализовать такое поведение в платформе 1С:Предприятие 8.3 и каких типичных ошибок следует избегать.
Выясним причину частой ошибки начинающих разработчиков: попытки присвоить объект типа ФорматированнаяСтрока стандартному строковому реквизиту объекта информационной базы (например, Объект.Описание), который выведен на форму в виде элемента Поле ввода.
В этой ситуации возникают сразу два принципиальных ограничения платформы:
Строка. При попытке записать в него ФорматированнаяСтрока платформа автоматически выполняет неявное приведение типа. В результате все гиперссылки, цвета и шрифтовое оформление отсекаются, а в реквизите остается плоский текст без навигационной информации.Для корректного отображения гиперссылки внутри текста необходимо разделить хранение данных и их представление на форме. Разберем правильный алгоритм настройки по шагам.
ОписаниеСФорматированием). В качестве типа данных выбираем ФорматированнаяСтрока. Обратите внимание: реквизит создается именно у формы, а не в метаданных документа или задачи.Ложь). Если включить это свойство, платформа будет воспринимать всю надпись целиком как одну ссылку. При выключенном свойстве активными будут только те фрагменты текста, которым мы программно зададим навигационную ссылку.Посмотрим на пример кода в модуле формы, формирующего строку со встроенной ссылкой на документ:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем ссылку на целевой документ (например, из реквизита задачи)
СсылкаНаДокумент = Объект.ДокументОснование;
Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
// Получаем навигационную ссылку информационной базы
НавСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокумент);
// Формируем отдельные части текста
ТекстДо = "Пожалуйста, ознакомьтесь с документом ";
ТекстСсылки = Строка(СсылкаНаДокумент);
ТекстПосле = " и завершите текущую задачу.";
// Создаем кликабельный фрагмент
ФрагментСсылки = Новый ФорматированнаяСтрока(ТекстСсылки, , , , НавСсылка);
// Собираем итоговый массив компонентов
ЧастиСтроки = Новый Массив;
ЧастиСтроки.Добавить(ТекстДо);
ЧастиСтроки.Добавить(ФрагментСсылки);
ЧастиСтроки.Добавить(ТекстПосле);
// Присваиваем результат реквизиту формы
ОписаниеСФорматированием = Новый ФорматированнаяСтрока(ЧастиСтроки);
КонецЕсли;
КонецПроцедуры
Конструктор ФорматированнаяСтрока принимает следующие параметры: исходная строка, шрифт, цвет текста, цвет фона и навигационная ссылка. Если пятым параметром передана навигационная ссылка информационной базы вида e1cib/data/..., платформа 1С автоматически обрабатывает щелчок мыши и открывает форму соответствующего объекта без написания дополнительного кода.
Если вам требуется выполнить собственную логику при нажатии на гиперссылку (например, проверить права, запросить подтверждение или открыть нестандартную форму), у элемента формы с видом Поле надписи предусмотрено клиентское событие ОбработкаНавигационнойСсылки.
Разберем пример его использования:
&НаКлиенте
Процедура ОписаниеСФорматированиемОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
// Если нужно полностью переопределить стандартное поведение:
Если НавигационнаяСсылкаФорматированнойСтроки = "МоеДействие" Тогда
СтандартнаяОбработка = Ложь;
ПоказатьОповещениеПользователя("Действие", , "Выполнен переход по специальной ссылке.");
КонецЕсли;
// Для стандартных ссылок e1cib оставляем СтандартнаяОбработка = Истина
КонецПроцедуры
Проанализируем важные эксплуатационные ограничения связки ФорматированнаяСтрока и Поле надписи:
Объект.Описание шаблон или идентификатор документа, а при чтении или создании формы динамически генерируйте ФорматированнаяСтрока.Рассмотрим альтернативные решения, которые могут подойти в зависимости от архитектурных требований задачи:
ФорматированныйДокумент, а для хранения в базе данных используется строковый реквизит неограниченной длины (с выгрузкой через HTML методами ПолучитьHTML и УстановитьHTML) или ХранилищеЗначения.Строка помещается обычная HTML-разметка со ссылками <a href="...">, а клик перехватывается в событии ПриНажатии элемента формы.Гиперссылка = Истина для ссылки на объект и вторая декорация-надпись для завершающей части текста.СтроковыеФункцииКлиент.ФорматированнаяСтрока(), позволяющий собрать сложный текст с тегами ссылок одной строкой без ручного наполнения массива.