CalculateValue([Recursive: Boolean = True]);
CalculateValue(Recursive: boolean);
Recursive. Параметр, определяющий, будет ли осуществляться рекурсивное вычисление точки.
Метод CalculateValue выполняет вычисление точки.
Допустимые значения параметра Recursive:
True. Значение по умолчанию. Используется рекурсивное вычисление точки;
False. Не используется рекурсивное вычисление точки.
Для выполнения примера предполагается наличие в репозитории регламентного отчёта с идентификатором «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.
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;
См. также: