В процессе разработки отчетов на базе Системы компоновки данных (СКД) часто возникает специфическая задача: необходимо, чтобы при нажатии на определенную колонку (например, с числовым показателем) открывался не сам этот показатель, а связанный с ним документ. Стандартное поведение системы предполагает, что расшифровка открывает значение, которое непосредственно находится в ячейке. Однако гибкость СКД позволяет нам переопределить это поведение несколькими способами. Разберем подробно каждый из них, от простого использования настроек до программного кода.
Это самый элегантный и "чистый" метод, который не требует написания кода и использования сложных макетов. Он позволяет оставить в ячейке числовое значение, но "подложить" под него другую ссылку для действия пользователя. Рассмотрим этот метод пошагово.
Проанализируем ситуацию: у нас есть поле СуммаПродаж (число) и поле ДокументОснование (ссылка). Мы хотим, чтобы в отчете отображалась сумма, но при двойном клике открывался документ. Выполним следующие действия:
Поле2 из обсуждения).ПервоначальныйДокументСсылка.Важный нюанс: Если мы хотим, чтобы при клике пользователю предлагалось несколько вариантов действий, в выражении расшифровки можно указать структуру. Например:
Новый Структура("Ссылка", ПервоначальныйДокументСсылка)
В этом случае платформа поймет, что расшифровка должна вести к объекту, указанному в структуре.
Этот метод часто упоминался в обсуждении на форуме. Суть его заключается в том, что мы выводим в колонку саму ссылку на документ, но с помощью настроек оформления заставляем систему отображать вместо заголовка документа числовое значение.
Разберем алгоритм настройки:
ПервоначальныйДокументСсылка (именно ссылку, так как она обеспечит стандартное открытие документа).Сумма).ПервоначальныйДокументСсылка.Таким образом, в колонке отчета система будет видеть ссылку (и отрабатывать клик по ней), но визуально пользователь будет видеть число. Это простой и эффективный обходной путь.
Если стандартных настроек недостаточно, мы можем прибегнуть к созданию макета. Этот способ позволяет жестко связать область данных с параметрами расшифровки.
Выясним, как это работает:
[ЧисловойПоказатель].П1.П1 прописываем выражение: ПервоначальныйДокументСсылка.Теперь система будет брать оформление из макета, а данные для перехода (расшифровки) — из указанного нами поля ссылки.
Иногда требуется не просто открыть документ, а выполнить сложную логику: проверить права доступа, открыть специфическую форму или даже выполнить расчет перед открытием. В этом случае нам поможет программный перехват в модуле формы отчета.
Рассмотрим пример кода для обработки события РезультатОбработкаРасшифровки:
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Отключаем стандартное меню
// Получаем данные расшифровки из коллекции
Данные = ПолучитьДанныеРасшифровки(Расшифровка);
// Пытаемся найти нужное нам поле в данных строки
Если Данные.Свойства().Найти("ПервоначальныйДокументСсылка") <> Неопределено Тогда
ПараметрыФормы = Новый Структура("Ключ", Данные.ПервоначальныйДокументСсылка);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьДанныеРасшифровки(ИдентификаторРасшифровки)
// Извлекаем объект данных расшифровки, сохраненный при компоновке
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
Поля = Данные.Элементы[ИдентификаторРасшифровки].ПолучитьПоля();
Результат = Новый Структура;
Для Каждого Поле Из Поля Цикл
Результат.Вставить(Поле.Поле, Поле.Значение);
КонецЦикла;
Возвращает Результат;
КонецФункции
В этом примере мы полностью берем управление на себя. Мы анализируем, какие данные связаны с текущей ячейкой, и программно открываем нужную форму. Обратите внимание на использование СтандартнаяОбработка = Ложь — это критически важно, чтобы не появлялось стандартное окно выбора действий СКД.
Чтобы пользователь понимал, что на число можно нажать, рекомендуем использовать свойство Гиперссылка в условном оформлении. Если установить Оформление.Гиперссылка = Истина, текст в ячейке станет синим и подчеркнутым при наведении (или постоянно, в зависимости от настроек платформы). Это значительно повышает удобство интерфейса (UX).
Проанализировав все способы, можно сделать вывод: для простых задач подмены ссылки идеально подходит Выражение расшифровки в наборе данных, а для визуальных манипуляций — Условное оформление. Программный метод стоит оставить для тех случаев, когда логика перехода зависит от множества внешних факторов.