При разработке отчетов на базе Библиотеки стандартных подсистем (БСП) часто возникает задача сделать одну из колонок отчета интерактивной, чтобы при нажатии на ячейку открывался внешний интернет-ресурс. Стандартные отчеты СКД обладают встроенным механизмом расшифровки, однако для решения нашей задачи потребуется дополнительная настройка логики обработки событий. Рассмотрим, как это реализовать на практике.
Это наиболее корректный путь для типовых конфигураций. Вместо вызова стандартного окна расшифровки мы перехватим событие нажатия и укажем системе, что именно нужно открыть.
Расшифровка. Рекомендуется передавать туда не просто строку URL, а структуру, содержащую признак того, что это внешняя ссылка.ОбработкаРасшифровки.Разберем пример того, как может выглядеть логика в модуле формы:
&НаКлиенте
Процедура ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
// Получаем данные расшифровки
ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровкиАдрес);
ЭлементРасшифровки = ДанныеРасшифровки.Элементы.Получить(Расшифровка);
// Проверяем, является ли это нашей ссылкой
Если ТипЗнч(ЭлементРасшифровки.ПолучитьПараметры()) = Тип("Структура") Тогда
Данные = ЭлементРасшифровки.ПолучитьПараметры();
Если Данные.Свойство("ЭтоВнешняяСсылка") Тогда
СтандартнаяОбработка = Ложь; // Отменяем стандартное окно
ЗапуститьПриложение(Данные.URL);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если конфигурация отчета не позволяет гибко настроить СКД или требуется массовое преобразование ячеек, воспользуйтесь методом постобработки результата формирования отчета в методе ПриКомпоновкеРезультата.
В этом случае вы после вывода отчета в ТабличныйДокумент проходите по его областям и программно устанавливаете свойство Расшифровка для нужных ячеек.
Выполним это по шагам:
КомпоновщикРезультата.Посмотрим на пример логики постобработки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Формируем отчет стандартно
СтандартнаяОбработка = Истина;
// После формирования обходим ячейки
Для Каждого Область Из ДокументРезультат.Области Цикл
// Здесь проверяем текст или иные признаки ячейки
Если Область.Текст = "Перейти на сайт" Тогда
Область.Расшифровка = "http://my-site.com";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Чтобы отчет выглядел профессионально и был удобен пользователю, учтите следующие нюансы:
Условное оформление в схеме компоновки данных. Установите синий цвет текста и подчеркнутый стиль шрифта для поля с URL. Это не сделает ячейку «активной» сама по себе, но даст визуальную подсказку.ЗапуститьПриложение. Если URL формируется динамически на основе данных из базы, убедитесь, что это не приведет к выполнению нежелательных сценариев.Расширения конфигурации, чтобы добавить обработчик ОбработкаРасшифровки в форму отчета. Это позволит вам беспрепятственно обновлять конфигурацию в будущем.Использование метода расшифровки является предпочтительным, так как он глубоко интегрирован в платформенную логику управляемых форм и позволяет сохранять контекст данных, что невозможно при простом выводе текста в табличный документ. Для анализа контекста и извлечения значений группировок в обработчике можно использовать пример получения значений группировок в расшифровке СКД.