Молочников Олег Spb. 2013.
Хитрости компоновки данных: произвольная иерархия для внешней таблицы данных в отчетах на СКД.
Столкнулся с тем, что мне надо было преобразовать заранее подготовленную таблицу данных в управленческий отчет по доходам и расходам следующего вида:
Причем в силу особенностей разработки //infostart.ru/public/85502/ структура статей может не храниться в БД и данные могут попасть в СКД только во внешней таблице.
В отличном курсе http://xn----1-bedvffifm4g.xn--p1ai/free/ нашел решение, которое позволяет построить произвольную иерархию только на основе запросов. Попытавшись использовать аналогично внешнюю таблицу, я убил несколько дней на поиски решения. Перерыв весь интернет я понял, что большинство желающих в итоге просто отступились от СКД. В итоге я решил создать гайд для вслед идущих.
Итак, упрощенно:
Нам потребуется заранее подготовленные две таблицы:
- Таблица значений статей доходов и расходов вида:
Период, СтатьяБаланса, Сумма.
- Таблица Иерархии:
СтатьяБаланса, СтатьяБалансаРодитель.
Код, передающий внешние таблицы в СКД и формирующий отчет:
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
СтруктураПараметров=Новый Структура;
СтруктураПараметров.Вставить("Данные", ТаблЗнач);
СтруктураПараметров.Вставить("Иерархия", ТаблИерархии);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, СтруктураПараметров, ДанныеРасшифровки);
ЭлементыФормы.Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> Неопределено Цикл
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
В
Создаем в СКД два набора данных вида объект и описываем их структуру:
Прописываем связи наборов данных:
Описываем ресурсы:
И последнее: создаем настройки для СКД:
Что позволит нам получить отчет как на самой верхней картинке. В этом отчете не будет работать отбор по вхождению в иерархию. Но если это нам очень нужно, это можно легко поправить, воспользовавшись, полем контроль иерархии. Удачи.
PS: Надеюсь вам понравится эта и другие мои разработки на //infostart.ru/profile/48714/.
Очень жду ваших комментариев и пожеланий.
Молочников Олег Spb. 2013.