Изначально нужно было вывести совсем простенький отчет по статистике заказов клиентов по разным параметрам. Отчет подключен как дополнительный, имеет вот такой вид:
Для раскрашивания блоков нарисовал соответствующий простенький макет:
Но пользователям, что логично, нужна была расшифровка тех показателей, что представлены в отчете: показать список всех заказов за период, только отмененных, только предоплаченных и т.д. Задача оказалась совсем не тривиальной, как оказалось.
Первый вариант решения, который решил попробовать - использовать функцию ВычислитьВыражениеСГруппировкойМассив, чтобы собрать массивы нужных документов в вычисляемые поля и эти вычисляемые поля запихнуть в параметры расшифровки соответствующих полей макета. Например:
Свернуть(Массив(ВЫБОР КОГДА ОтмененныхЗаказов > 0 ТОГДА ЗаказКлиента ИНАЧЕ ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка) КОНЕЦ))
Такой массив в группировке детальных записей выводилось без проблем, а вот в качестве параметра расшифровки передать не получалось: просто-напросто в программной обработке этого параметра не было.
Идею с параметрами расшифровки решил не оставлять, но совместить её с расшифровкой другим вариантом этого же отчета. У внешнего отчета назначена общая форма из БСП ФормаОтчета в качестве основной, поэтому потребуется вклиниться в обработку расшифровки этой формы:
Видим, здесь идет вызов переопределяемой процедуры ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки - заимствуем ее в расширение с директивой &После
&После("ОбработкаРасшифровки")
Процедура рзн_ОбработкаРасшифровки(ЭтаФорма, Элемент, Расшифровка, СтандартнаяОбработка)
ПолноеИмяОтчета = ЭтаФорма.НастройкиОтчета.ПолноеИмя;
КлючТекущегоВарианта = ЭтаФорма.КлючТекущегоВарианта;
Если ПолноеИмяОтчета = "ВнешнийОтчет.sfxОтчетПоKPI" Тогда
СтруктураРасшифровки = ОтчетыУТВызовСервераПереопределяемый.СформироватьДанныеРасшифровки(Расшифровка, ЭтаФорма.ОтчетДанныеРасшифровки);
рзн_РасшифроватьОтчетПоKPI(ЭтаФорма, СтруктураРасшифровки, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
Здесь сразу оговоримся, что работа ведется в конфигурации "1С:Комплексная автоматизация 2.5", поэтому для получения данных расшифровки используется функция ОтчетыУТВызовСервераПереопределяемый.СформироватьДанныеРасшифровки. Структуру расшифровки вы можете самостоятельно программно сформировать, по этому вопросу есть много статейю
Теперь нужно подумать непосредственно о том, какие параметры расшифровки нужно использовать. Для подсчета количества документов у меня используются в запросе числовые поля для каждого из типа заказов. Например, для подсчета всех заказов используется поле КоличествоЗаказов, которое всегда заполняется цифрой 1. Для подсчета отмененных заказов используется поле ОтмененныхЗаказов: если заказ отменен, то в поле будет 1, иначе - 0. Такие поля будем использовать для отбора в варианте отчета, который добавим для расшифровки.
В общем виде для всех параметров расшифровки используем поле РасшифровкаЗаказов = Истина, чтобы понимать, что для расшифровки будем использовать открытие этого отчета с другим ключом варианта. Второй параметр будет определять признак колонки: отмененные заказы, все заказы, предоплаченные заказы и т.д. В итоге параметр расшифровки будет иметь следующий вид:
Полей ОтмененныеЗаказы и РасшифровкаЗаказов в полей выборки запроса СКД нет, они здесь введены вручную только для использования в качестве параметров расшифровки.
Теперь нам осталось проверить параметры расшифровки и открыть другой вариант отчета с нужными отборами.
Если есть более простой или альтернативные способы - рад увидеть их в комментариях!