Настройка среза данных, области данных, аналитической области данных

В регламентном отчете существуют различные типы областей данных:

Настройка среза данных и области данных

Рассмотрим пример добавления в регламентный отчет среза данных для ранее добавленного источника данных, на котором будет построена область данных.

Для выполнения примера предполагается наличие в репозитории регламентного отчета с идентификатором REPORT_INTRO.

Добавьте ссылки на системные сборки: Metabase, Report, Tab.

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Report: IPrxReport;
    DtSources: IPrxDataSources;
    DtSource: IPrxDataSource;
    Slices: IPrxSlices;
    Slice: IPrxSlice;

    DataIsland: IPrxDataIslands;
    DI: IPrxDataIsland;
    Range: ITabRange;
Begin
    MB := MetabaseClass.Active;
    MObj := MB.ItemById("REPORT_INTRO").Edit;
    Report := MObj As IPrxReport;
    // Добавление среза:
    DtSources := Report.DataSources;
    DtSource := DtSources.Item(0);
    Slices := DtSource.Slices;
    Slice := Slices.Add;

    Slice.Execute;
    // Добавление области данных:
    DataIsland := Report.DataIslands;
    DI := DataIsland.Add;
    // Выбор листа отчета:
    DI.Sheet := Report.Sheets.Item(0);
    // Определение среза, являющегося источником для области данных:
    DI.Slice := DtSource.Slices.Item(0);
    // Определение диапазона ячеек, в котором расположена область данных:
    Range := Report.ParseCell(DI.Sheet.Name+"!A0").Range;
    DI.Range := Range;
    MObj.Save;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Tab;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Report: IPrxReport;
    DtSources: IPrxDataSources;
    DtSource: IPrxDataSource;
    Slices: IPrxSlices;
    Slice: IPrxSlice;
    DataIsland: IPrxDataIslands;
    DI: IPrxDataIsland;
    Range: ITabRange;
Begin
    MB := Params.Metabase;

    MObj := MB.ItemById["REPORT_INTRO"].Edit();
    Report := MObj As IPrxReport;
    // Добавление среза:
    DtSources := Report.DataSources;
    DtSource := DtSources.Item[0];
    Slices := DtSource.Slices;
    Slice := Slices.Add();
    Slice.Execute();
    // Добавление области данных:
    DataIsland := Report.DataIslands;
    DI := DataIsland.Add();
    // Выбор листа отчета:
    DI.Sheet := Report.Sheets.Item[0];
    // Определение среза, являющегося источником для области данных:
    DI.Slice := DtSource.Slices.Item[0];
    // Определение диапазона ячеек, в котором расположена область данных:
    Range := Report.ParseCell(DI.Sheet.Name+"!A0").Range;
    DI.Range := Range;
    MObj.Save();
End Sub;

В результате выполнения примера для источника данных регламентного отчета будет добавлен срез, на основании добавленного среза будет построена область данных и размещена на указанном листе.

Настройка аналитической области данных, среза данных и табличного визуализатора

Рассмотрим пример настройки в регламентном отчете аналитической области данных, среза и табличного визуализатора.

Для выполнения примера в репозитории необходимо наличие:

Добавьте ссылки на системные сборки: Cubes, Dimensions, Drawing, Express; Matrix, Metabase, Pivot, Report, Tab.

Sub UserProc;
Var
    MB: IMetabase;
    Report: IPrxReport;
    DA: IEaxDataArea;
    Slice: IEaxDataAreaSlice;
    DtSource: IPrxDataSource;
    Pivot: IPivot;
    CubeInst: ICubeInstance;
    View: IEaxObject;
    Sheet: IPrxSheet;
    Table: ITabSheet;
    Grid: IEaxGrid;
    Style: IEaxTableStyle;
    Rect: IGxRect;
    ViewSets: IEaxGridViewSettings;
    T_Header, L_Header: IDataAreaHeaderSettingsBase;
Begin
    
// Получим репозиторий
    MB := MetabaseClass.Active;
    
// Получим регламентный отчет
    Report := MB.ItemById("REPORT").Edit As IPrxReport;
    
// Получим аналитическую область данных
    DA := Report.DataArea;
    DA.Clear;
    Report.DataSources.Clear;
    
// Добавим срез данных
    Slice := DA.Slices.Add(EaxDataAreaSliceType.Pivot);
    Slice.CreateSource;
    
// Получим основу для таблицы
    Pivot := (Slice As IEaxDataAreaPivotSlice).Pivot;
    
// Получим источник
    CubeInst := MetabaseClass.Active.ItemById["CUBE_SEP"].Open(NullAs ICubeInstance;
    
// Разместим источник в основе для таблицы
    Pivot.DataSource := CubeInst.Destinations.DefaultDestination As IMatrixDataSource;
    DtSource := Report.DataSources.Add(Pivot.DataSource);
    
// Установим в отметку измерений элементы
    Pivot.Selection.Item(0).SelectElement(0False);
    Pivot.Selection.Item(
1).SelectLevel(0);
    Pivot.Selection.Item(
2).SelectElement(0False);
    Pivot.Selection.Item(
3).SelectChildren(1False);
    Pivot.Selection.Item(
4).SelectElement(0False);
    
// Установим измерения в заголовки таблицы
    Pivot.TopHeader.AddDim(Pivot.DimItem(1)); // Календарь
    Pivot.LeftHeader.AddDim(Pivot.DimItem(3)); // Территориальные образования
    Pivot.FixedHeader.AddDim(Pivot.DimItem(2)); // СЭП
    Pivot.FixedHeader.AddDim(Pivot.DimItem(0)); // Факты
    Pivot.FixedHeader.AddDim(Pivot.DimItem(4)); // Типы данных
    // Создадим представление таблицы
    Report.Sheets.Remove(1);
    View := Slice.Views.AddByType(EaxObjectType.Grid);
    Grid := View 
As IEaxGrid;
    Grid.Pivot := Pivot;
    
// Добавим лист и поместим на него таблицу
    Sheet := Report.Sheets.Add("Лист2");
    Table := (Sheet 
As IPrxTable).TabSheet;
    Grid.TabSheet := Table;
    
// Установим оформление таблицы
    Style := Grid.Style;
    Style.TableStyle.AssignPredefined(TabTablePredefinedStyle.ExtBlue);
    
// Установим диапазон таблицы
    Rect := New GxRect.Create(0303);
    (View 
As IEaxGrid).OutputRect := Rect;
    
// Установим методы вставки
    ViewSets := Grid.ViewSettings;
    T_Header := Grid.Pivot.TopHeader 
As IDataAreaHeaderSettingsBase;
    (ViewSets.GetViewSettings(T_Header) 
As IEaxGridHeaderSettings).Behaviour := EaxGridHeaderBehaviour.Insert;
    L_Header := Grid.Pivot.LeftHeader 
As IDataAreaHeaderSettingsBase;
    (ViewSets.GetViewSettings(L_Header) 
As IEaxGridHeaderSettings).Behaviour := EaxGridHeaderBehaviour.Insert;
    
// Обновим отчет и сохраним изменения
    Report.Recalc;
    (Report 
As IMetabaseObject).Save;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Pivot;
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Tab;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Report: IPrxReport;
    DA: IEaxDataArea;
    Slice: IEaxDataAreaSlice;
    DtSource: IPrxDataSource;
    Pivot: IPivot;
    CubeInst: ICubeInstance;
    View: IEaxObject;
    Sheet: IPrxSheet;
    Table: ITabSheet;
    Grid: IEaxGrid;
    Style: IEaxTableStyle;
    Rect: GxRect = 
New GxRectClass();
    ViewSets: IEaxGridViewSettings;
    T_Header, L_Header: IDataAreaHeaderSettingsBase;
Begin
    
// Получим репозиторий
    MB := Params.Metabase;
    
// Получим регламентный отчет
    Report := MB.ItemById["REPORT"].Edit() As IPrxReport;
    
// Получим аналитическую область данных
    DA := Report.DataArea;
    DA.Clear();
    Report.DataSources.Clear();
    
// Добавим срез данных
    Slice := DA.Slices.Add(EaxDataAreaSliceType.edastPivot);
    Slice.CreateSource();
    
// Получим основу для таблицы
    Pivot := (Slice As IEaxDataAreaPivotSlice).Pivot;
    
// Получим источник
    CubeInst := Params.Metabase.ItemById["CUBE_SEP"].Open(NullAs ICubeInstance;
    
// Разместим источник в основе для таблицы
    Pivot.DataSource := CubeInst.Destinations.DefaultDestination As IMatrixDataSource;
    DtSource := Report.DataSources.Add(Pivot.DataSource);
    
// Установим в отметку измерений элементы
    Pivot.Selection.Item[0].SelectElement(0False);
    Pivot.Selection.Item[
1].SelectLevel(0);
    Pivot.Selection.Item[
2].SelectElement(0False);
    Pivot.Selection.Item[
3].SelectChildren(1False);
    Pivot.Selection.Item[
4].SelectElement(0False);
    
// Установим измерения в заголовки таблицы
    Pivot.TopHeader.AddDim(Pivot.DimItem[1]); // Календарь
    Pivot.LeftHeader.AddDim(Pivot.DimItem[3]); // Территориальные образования
    Pivot.FixedHeader.AddDim(Pivot.DimItem[2]); // СЭП
    Pivot.FixedHeader.AddDim(Pivot.DimItem[0]); // Факты
    Pivot.FixedHeader.AddDim(Pivot.DimItem[4]); // Типы данных
    // Создадим представление таблицы
    Report.Sheets.Remove(1);
    View := Slice.Views.AddByType(EaxObjectType.eotGrid);
    Grid := View 
As IEaxGrid;
    Grid.Pivot := Pivot 
As PivotFactory;
    
// Добавим лист и поместим на него таблицу
    Sheet := Report.Sheets.Add("Лист2", PrxSheetType.pstTable);
    Table := (Sheet 
As IPrxTable).TabSheet;
    Grid.TabSheet := Table 
As TabSheet;
    
// Установим оформление таблицы
    Style := Grid.Style;
    Style.TableStyle.AssignPredefined(TabTablePredefinedStyle.ttpsExtBlue);
    
// Установим диапазон таблицы
    Rect.Create(0303);
    (View 
As IEaxGrid).OutputRect := Rect;
    
// Установим методы вставки
    ViewSets := Grid.ViewSettings;
    T_Header := Grid.Pivot.TopHeader 
As IDataAreaHeaderSettingsBase;
    (ViewSets.GetViewSettings[T_Header] 
As IEaxGridHeaderSettings).Behaviour := EaxGridHeaderBehaviour.eghbInsert;
    L_Header := Grid.Pivot.LeftHeader 
As IDataAreaHeaderSettingsBase;
    (ViewSets.GetViewSettings[L_Header] 
As IEaxGridHeaderSettings).Behaviour := EaxGridHeaderBehaviour.eghbInsert;
    
// Обновим отчет и сохраним изменения
    Report.Recalc();
    (Report 
As IMetabaseObject).Save();
End Sub;

В результате выполнения примера в регламентном отчете будет добавлен источник данных, в аналитической области будет создан новый срез данных и по нему построена таблица на втором листе отчета.

См. также:

Общие принципы программирования с использованием сборки Report