Продукт «Форсайт. Аналитическая платформа» позволяет группировать по атрибутам элементы измерений боковика или шапки. Значения группировочных элементов могут быть агрегированы.
В данном примере рассмотрено создание группировки по атрибутам в боковике и шапке таблицы и вывод агрегированных значений в группировочный элемент.
Для выполнения примера в репозитории предполагается наличие регламентного отчёта с идентификатором REPORT. Отчет содержит таблицу.
Источником данных для таблицы является куб, который содержит четыре измерения:
0. Измерение фактов;
1. Измерение боковика «Показатели бухгалтерского баланса»;
2. Измерение шапки «Реестр организаций»;
3. Фиксированное измерение «Календарь».
Измерения боковика и шапки имеют по три атрибута:
атрибуты измерения боковика: «Ключ», «Наименование статьи», «Код статьи»;
атрибуты измерения шапки: «Ключ», «Наименование», «Тип собстенности».
Добавьте ссылки на системные сборки: Dimensions, Drawing, Express, ForeSystem, Matrix, Metabase, Pivot, Report, Tab.
Sub UserProc;
Var
MB: IMetabase;
Report: IPrxReport;
Slice: IEaxDataAreaSlice;
Pivotslice: IEaxDataAreaPivotSlice;
Pivot: IPivot;
DimInst: IDimInstance;
PivotGroupItems: IPivotGroupItems;
PivotGroupItem: IPivotGroupItem;
PivotGroupAggregations: IPivotGroupAggregations;
DimselectionSet, Selection: IDimselectionSet;
Stylesettings: IDataAreaHeaderStyleSettingsBase;
HeaderStyle, DataStyle: ITabCellStyle;
Settings: IDataAreaHeaderSettingsBase;
Key: Integer;
Viewsettings: IEaxGridViewSettings;
Pivotdim: IPivotDimension;
Method: BasicAggregatorOperation;
Begin
// Получим репозиторий
MB := MetabaseClass.Active;
// Получим отчёт
Report := MB.ItemById("REPORT").Edit As IPrxReport;
// Получим срез отчёта
Slice := Report.DataArea.Slices.Item(0);
// Получим объект для работы с таблицей
Pivotslice := Slice As IEaxDataAreaPivotSlice;
Pivot := Pivotslice.Pivot;
// Зададим объект для группировки по атрибутам элемента изерения
PivotGroupItems := Pivot.AttributesGroups;
// Определим параметры отображения таблицы с данными
Viewsettings := (Report.DataArea.Views.Item(0) As IEaxGrid).ViewSettings;
// Создадим копию отметок справочника
DimselectionSet := Pivot.Selection.CreateCopy;
// Удалим отметки
DimselectionSet.Clear;
// Добавим отметку
DimselectionSet.Add(Pivot.DimItem(0));
DimselectionSet.Item(0).SelectElement(1, False);
// Добавим измерение расположенное в шапке
DimInst := pivot.DimItem(2);
// Определим атрибут для группировки
Key := DimInst.Attributes.Item(2).Attribute.Key;
// Добавим элементы в группировку
PivotGroupItems.Clear;
PivotGroupItem := PivotGroupItems.Add;
PivotGroupItem.AttributeKey := Key;
PivotGroupItem.Dimension := DimInst;
// Установим оформление столбцов
Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
DataStyle := Viewsettings.GetStyleSettings(Stylesettings).Data;
HeaderStyle.BackgroundBrush := New GxSolidBrush.Create(GxColor.FromName("Yellow"));
DataStyle.Font.Color := GxColor.FromName("Black");
DataStyle.BackgroundBrush := New GxSolidBrush.Create(GxColor.FromName("LightYellow"));
// Добавим измерение расположенное в боковике
DimInst := Pivot.DimItem(1);
Pivotdim := Pivot.Dimensions.FindByKey(DimInst.Key);
// Определим стиль оформления заголовков
Settings := Pivotdim As IDataAreaHeaderSettingsBase;
Stylesettings := Pivotdim As IDataAreaHeaderStyleSettingsBase;
HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
HeaderStyle.Font.Bold := TriState.OnOption;
Viewsettings.GetViewSettings(Settings).Hierarchical := TriState.OffOption;
// Определим атрибут для группировки
Key := DimInst.Attributes.Item(2).Attribute.Key;
// Добавим элементы в группировку
PivotGroupItem := PivotGroupItems.Add;
PivotGroupItem.AttributeKey := Key;
PivotGroupItem.Dimension := DimInst;
// Установим оформление строк
Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
DataStyle := Viewsettings.GetStyleSettings(Stylesettings).Data;
HeaderStyle.BackgroundBrush := New GxSolidBrush.Create(GxColor.FromName("Green"));
DataStyle.Font.Color := GxColor.FromName("White");
DataStyle.BackgroundBrush := New GxSolidBrush.Create(GxColor.FromName("SkyBlue"));
// Определим второй атрибут для группировки
Key := DimInst.Attributes.Item(1).Attribute.Key;
// Добавим элементы в группировку
PivotGroupItem := PivotGroupItems.Add;
PivotGroupItem.AttributeKey := Key;
PivotGroupItem.Dimension := DimInst;
// Установим оформление строк
Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
DataStyle := Viewsettings.GetStyleSettings(Stylesettings).Data;
HeaderStyle.BackgroundBrush := New GxSolidBrush.Create(GxColor.FromName("LightGreen"));
DataStyle.Font.Color := GxColor.FromName("White");
DataStyle.BackgroundBrush := New GxSolidBrush.Create(GxColor.FromName("Turquoise"));
// Зададим метод агрегации для строк
PivotGroupAggregations := PivotGroupItem.AggregationMethods;
Method := BasicAggregatorOperation.Sum;
Selection := DimselectionSet;
PivotGroupAggregations.Add(Selection, Method);
// Обновим объект для работы с таблицей
Pivot.Refresh;
// Сохраним отчёт
(Report As IMetabaseObject).Save;
End Sub UserProc;
До выполнения примера отчёт содержал таблицу данных:

В результате выполнения примера в боковик и шапку будут выведены группировочные элементы. Для группировочных элементов боковика задан метод агрегации «Сумма».
Таблица примет вид:

См. также: