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