IPrxCalculatedPoint.CalculateValue

Синтаксис Fore

CalculateValue([Recursive: Boolean = True]);

Синтаксис Fore.NET

CalculateValue(Recursive: boolean);

Параметры

Recursive. Параметр, определяющий, будет ли осуществляться рекурсивное вычисление точки.

Описание

Метод CalculateValue выполняет вычисление точки.

Комментарии

Допустимые значения параметра Recursive:

Пример Fore

Для выполнения примера предполагается наличие в репозитории регламентного отчёта с идентификатором «DOCUMENT». Отчёт содержит текстовый лист с размещённой на нём областью данных.

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

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Report: IPrxReport;
    DIs: IPrxDataIslands;
    DI: IPrxDataIsland;
    DT: IPrxDataSource;
    DTs: IPrxDataSources;
    Points: IPrxCalculatedPoints;
    Point, PointI: IPrxCalculatedPoint;
    Style: IPrxCellStyle;
    i, Count, Key, CountChildren: Integer;
Begin
    MB := MetabaseClass.Active;
    MObj := MB.ItemById("DOCUMENT").Edit;
    Report := MObj As IPrxReport;
    DIs := Report.DataIslands;
    DI := DIs.Item(0);
    DT := DI.Slice.Slices.DataSource;
    DTs := DT.DataSources;
    Points := DTs.Item(0).Points;
    Points.Clear;
    // Первая точка:
    Point := Points.Add;
    Point.Name := "Point_1";
    Style := Point.Style;
    Style.IsDefault := True;
    Point.CalculateValue;
    // Вторая точка:
    Point := Points.Add;
    Point.Name := "Point_2";
    Style := Point.Style;
    Style.IsDefault := True;
    Point.CalculateValue;
    // Третья точка:
    Point := Points.Add;
    Point.Name := "Point_3";
    Style := Point.Style;
    Style.IsDefault := True;
    Point.CalculateValue;
    // Вывод информации:
    Points.CalculateValues;
    Count := Points.Count;
    Debug.WriteLine("Количество вычислимых точек: " + Count.ToString);
    Debug.Indent;
    Debug.WriteLine("№ | Ключ | Наименование");
    For i := 0 To Count - 1 Do
        PointI := Points.Item(i);
        Debug.WriteLine((i+1).ToString + "   " + PointI.Key.ToString + "      " + PointI.Name);
    End For;
    Debug.Unindent;
    Debug.WriteLine("Информация по первой вычисляемой точке");
    PointI := Points.Item(0);
    CountChildren := PointI.Children.Count;
    Debug.Indent;
    Debug.WriteLine("Ключ точки: " + PointI.Key.ToString);
    Debug.WriteLine("Уникальный ключ точки: " + PointI.UniqueKey.ToString);
    Debug.WriteLine("Наименование точки: " + PointI.Name);
    Debug.WriteLine("Источник данных: " + PointI.DataSource.Name);
    Debug.WriteLine("Отметка: " + PointI.SelectionSet.Item(0).Dimension.Name);
    Debug.WriteLine("Количество дочерних точек: " + CountChildren.ToString);
    Debug.WriteLine("Сдвиг по измерению: " + PointI.IsShiftedPoint.ToString);
    Debug.WriteLine("Значение в точке: " + PointI.Value);
    Debug.WriteLine("Отформатированное значение в точке: " + PointI.FormattedValue);
    Debug.Unindent;
    // Удаление точки по индексу:
    Points.Remove(0);
    Debug.WriteLine("Была удалена точка " + PointI.Name +  " с индексом: " + Key.ToString);
    // Поиск и удаление точки по ключу: 
    Key := PointI.Key;
    PointI := Points.FindByKey(Key);
    Points.RemoveByKey(Key);
    Debug.WriteLine("Была удалена точка " + PointI.Name +  " с ключом: " + Key.ToString);
    (Report As IMetabaseObject).Save;
End Sub UserProc;

В результате выполнения примера в окно консоли будет выведено:

После чего будет удалена точка с индексом «0», найдена и удалена точка с ключом «0».

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Report;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Report: IPrxReport;
    DIs: IPrxDataIslands;
    DI: IPrxDataIsland;
    DT: IPrxDataSource;
    DTs: IPrxDataSources;
    Points: IPrxCalculatedPoints;
    Point, PointI: IPrxCalculatedPoint;
    Style: IPrxCellStyle;
    i, Count, CountChildren: Integer;
    Key: uinteger;
Begin
    MB := Params.Metabase;
    MObj := MB.ItemById["DOCUMENT"].Edit();
    Report := MObj As IPrxReport;
    DIs := Report.DataIslands;
    DI := DIs.Item[0];
    DT := DI.Slice.Slices.DataSource;
    DTs := DT.DataSources;
    Points := DTs.Item[0].Points;
    Points.Clear();
    // Первая точка:
    Point := Points.Add();
    Point.Name := "Point_1";
    Style := Point.Style;
    Style.IsDefault := True;
    Point.CalculateValue(True);
    // Вторая точка:
    Point := Points.Add();
    Point.Name := "Point_2";
    Style := Point.Style;
    Style.IsDefault := True;
    Point.CalculateValue(True);
    // Третья точка:
    Point := Points.Add();
    Point.Name := "Point_3";
    Style := Point.Style;
    Style.IsDefault := True;
    Point.CalculateValue(True);
    // Вывод информации:
    Points.CalculateValues();
    Count := Points.Count;
    System.Diagnostics.Debug.WriteLine("Количество вычислимых точек: " + Count.ToString());
    System.Diagnostics.Debug.Indent();
    System.Diagnostics.Debug.WriteLine("№ | Ключ | Наименование");
    For i := 0 To Count - 1 Do
        PointI := Points.Item[i];
        System.Diagnostics.Debug.WriteLine((i+1).ToString() + "   " + PointI.Key.ToString() + "      " + PointI.Name);
    End For;
    System.Diagnostics.Debug.Unindent();
    System.Diagnostics.Debug.WriteLine("Информация по первой вычисляемой точке");
    PointI := Points.Item[0];
    CountChildren := PointI.Children.Count;
    System.Diagnostics.Debug.Indent();
    System.Diagnostics.Debug.WriteLine("Ключ точки: " + PointI.Key.ToString());
    System.Diagnostics.Debug.WriteLine("Уникальный ключ точки: " + PointI.UniqueKey.ToString());
    System.Diagnostics.Debug.WriteLine("Наименование точки: " + PointI.Name);
    System.Diagnostics.Debug.WriteLine("Источник данных: " + PointI.DataSource.Name);
    System.Diagnostics.Debug.WriteLine("Отметка: " + PointI.SelectionSet.Item[0].Dimension.Name);
    System.Diagnostics.Debug.WriteLine("Количество дочерних точек: " + CountChildren.ToString());
    System.Diagnostics.Debug.WriteLine("Сдвиг по измерению: " + PointI.IsShiftedPoint.ToString());
    System.Diagnostics.Debug.WriteLine("Значение в точке: " + PointI.Value[True]);
    System.Diagnostics.Debug.WriteLine("Отформатированное значение в точке: " + PointI.FormattedValue[True]);
    System.Diagnostics.Debug.Unindent();
    // Удаление точки по индексу:
    Points.Remove(0);
    System.Diagnostics.Debug.WriteLine("Была удалена точка " + PointI.Name +  " с индексом: " + Key.ToString());
    // Поиск и удаление точки по ключу: 
    Key := PointI.Key;
    PointI := Points.FindByKey(Key);
    Points.RemoveByKey(Key);
    System.Diagnostics.Debug.WriteLine("Была удалена точка " + PointI.Name +  " с ключом: " + Key.ToString());
    (Report As IMetabaseObject).Save();
End Sub;

См. также:

IPrxCalculatedPoint