Как реализовать переход по гиперссылке в отчете СКД на базе БСП?

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

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

Метод первый: использование механизма расшифровки

Это наиболее корректный путь для типовых конфигураций. Вместо вызова стандартного окна расшифровки мы перехватим событие нажатия и укажем системе, что именно нужно открыть.

  1. Настройка в СКД: В схеме компоновки данных (СКД) для нужного поля установите параметр Расшифровка. Рекомендуется передавать туда не просто строку URL, а структуру, содержащую признак того, что это внешняя ссылка.
  2. Перехват события: Поскольку БСП использует общие формы для отчетов, обработку расшифровки необходимо реализовать в модуле отчета или через расширение формы. Вам потребуется обработчик события ОбработкаРасшифровки.

Разберем пример того, как может выглядеть логика в модуле формы:


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

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

Метод второй: постобработка табличного документа

Если конфигурация отчета не позволяет гибко настроить СКД или требуется массовое преобразование ячеек, воспользуйтесь методом постобработки результата формирования отчета в методе ПриКомпоновкеРезультата.

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

Выполним это по шагам:

  1. Сформируем табличный документ стандартными средствами КомпоновщикРезультата.
  2. Проанализируем области табличного документа с помощью цикла.
  3. Установим значение расшифровки для ячеек, содержащих адрес.

Посмотрим на пример логики постобработки:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    // Формируем отчет стандартно
    СтандартнаяОбработка = Истина;
    // После формирования обходим ячейки
    Для Каждого Область Из ДокументРезультат.Области Цикл
        // Здесь проверяем текст или иные признаки ячейки
        Если Область.Текст = "Перейти на сайт" Тогда
            Область.Расшифровка = "http://my-site.com";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важные рекомендации при реализации

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

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

← На главную