Как в вычисляемых полях СКД вызвать метод самого отчета (даже внешнего)?
Костыль, насколько я понимаю, древний, но не все о нём знают.
Как многие помнят, в отчёте на СКД можно в вычисляемых полях вызывать функции серверных модулей. Но иногда очень нужно срочно сделать внешний отчет, который бы вызывал в вычисляемых полях свой собственный метод. Для таких случаев и понадобится наш костыль 👀
1️⃣ В СКД добавить специальный параметр без типа и с ограничением от пользователя. Пусть он будет называться “Объект”
2️⃣ В событии ПриКомпоновкеРезультата() нам нужно: 2.1 Использовать программный вывод СКД
2.2 При инициализации ПроцессораКомпоновкиДанных
использовать параметр ВозможностьИспользованияВнешнихФункций = Истина
2.3 (!) Перед выполнением компоновщика макета в настройки передать параметр “Объект” = ЭтотОбъект (т.е. объект отчета)
2.4 После формирования результата рекомендую очистить параметр в ДанныеРасшифровки.Настройки
, чтобы не было попыток платформы сериализовать несериализуемое.
3️⃣ В самой СКД в вычисляемых полях появится доступность использовать параметр &Объект
, который будет содержать объект текущего отчета. К сожалению, СКД не даёт возможности выполнить метод отчета напрямую, поэтому нам всё равно понадобится метод общего модуля конфигурации. Но в БСП для этого есть подходящие. Например:
1
ОбщегоНазначения.ВызватьФункциюОбъекта(&Объект, "МойМетод", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КакоетоПоле))
😳 Как это всё работает?
- В настройки СКД передаётся параметр “Объект” с объектом текущего отчета
- В вычисляемом поле вызывается метод отчета через “буферный” метод БСП. Если его нет, то тут уж нужно добавить свой расширением. К сожалению =(
- После формирования отчета, чтобы небыло несериализуемых значений, мы удаляем отчет из параметров настроек СКД.
Всегда ли это работает?
🤷♂️ Не знаю. Штука древняя, но на уровне смекалки =)
Есть способ лучше?
❕ Пишите в комментариях. Чую, что можно как-то заставить СКД выполнить метод отчета без метода общего модуля…