IMsCalculationStats.Root

Синтаксис

Root: IMsCalculationStatNode;

Root: Prognoz.Platform.Interop.Ms.IMsCalculationStatNode;

Описание

Свойство Root определяет корневую вершину дерева статистик.

Пример

Для выполнения примера убедитесь, что в репозитории содержится контейнер моделирования с идентификатором CONT_MODEL и задача моделирования с идентификатором PROBLEM.

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

Sub UserProc;
Var
    Mb: IMetabase;
    Problem: IMsProblem;
    Settings: IMsProblemCalculationSettings;
    Calc: IMsProblemCalculation;
Begin
    Mb := MetabaseClass.Active;
    
// Получим задачу моделирования
    Problem := Mb.ItemByIdNamespace("PROBLEM", Mb.GetObjectKeyById("CONT_MODEL")).EditTemporary As IMsProblem;
    Settings := Problem.CreateCalculationSettings;
    
// Зададим детализацию статистик расчета
    Settings.StatsLevel := MsCalculationStatsLevel.Basic;
    Calc := Problem.Calculate(Settings);
    
// Рассчитаем задачу моделирования и статистики расчета
    Calc.Run;
    
// Выведем результат в консоль
    ShowStats(Calc.Stats);
End Sub UserProc;

Sub ShowStats(Stats: IMsCalculationStats);
Var
    Node: IMsCalculationStatNode;
    Nodes: IMsCalculationStatNodes;
Begin
    
// Построим дерево статистик расчета
    Node := Stats.Root;
    Node.Name := 
"Статистики расчета:";
    Debug.WriteLine(Node.Name);
    Nodes := Stats.Root.Children;
    
For Each Node In Nodes Do
        ShowNode(Node);
    
End For;
End Sub ShowStats;

Sub ShowNode(StatNode: IMsCalculationStatNode);
Var
    j: Integer;
    Node: IMsCalculationStatNode;
    Value: Variant;
    Values: Array 
Of Variant;
    Combined: String;
Begin
    
// Построим вершины дерева статистик расчета
    Debug.Indent;
    Debug.Write(StatNode.Name + 
":   " + StatNode.Id + ";   " + StatNode.Type.ToString);
    Value := StatNode.Value;
    
If Value Is Array Then
        Values := Value 
As Array;
        
For j := 0 To Values.Length - 1 Do
            
If Not Combined.IsEmpty Then
                Combined := Combined + 
", ";
            
End If;
            Combined := Combined + Values[j];
        
End For;
        Debug.Write(
"[" + Combined + "]");
        Combined := 
"";
        
Elseif Value Is IMsDatePeriod Then
            Debug.Write((Value 
As IMsDatePeriod).Start.ToString + " - " + (Value As IMsDatePeriod).End_.ToString);
        
Else
        Debug.Write(
";   " + StatNode.Value);
    
End If;
    Debug.WriteLine(
"");
    
If StatNode.Children.Count > 0 Then
        
For Each Node In StatNode.Children Do
            ShowNode(Node);
        
End For;
    
End If;
    Debug.Unindent;
End Sub ShowNode;

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    Problem: IMsProblem;
    Settings: IMsProblemCalculationSettings;
    Calc: IMsProblemCalculation;
Begin
    Mb := Params.Metabase;
    
// Получим задачу моделирования
    Problem := Mb.ItemByIdNamespace["PROBLEM", Mb.GetObjectKeyById("CONT_MODEL")].EditTemporary() As IMsProblem;
    Settings := Problem.CreateCalculationSettings();
    
// Зададим детализацию статистик расчета
    Settings.StatsLevel := MsCalculationStatsLevel.mcslBasic;
    Calc := Problem.Calculate(Settings);
    
// Рассчитаем задачу моделирования и статистики расчета
    Calc.Run();
    
// Вывод результатов
    ShowStats(Calc.Stats);
End Sub;

Public Shared Sub ShowStats(Stats: IMsCalculationStats);
Var
    Node: IMsCalculationStatNode;
    Nodes: IMsCalculationStatNodes;
Begin
    
// Построим дерево статистик расчета
    Node := Stats.Root;
    Node.Name := 
"Статистики расчета:";
    System.Diagnostics.Debug.WriteLine(Node.Name);
    Nodes := Stats.Root.Children;
    
For Each Node In Nodes Do
        ShowNode(Node);
    
End For;
End Sub ShowStats;
    
Public Shared Sub ShowNode(StatNode: IMsCalculationStatNode);
Var
    j: Integer;
    Node: IMsCalculationStatNode;
    Value: Object;
    Values: Array;
    Combined: String;
Begin
    
// Построим вершины дерева статистик расчета
    System.Diagnostics.Debug.Indent();
    System.Diagnostics.Debug.Write(StatNode.Name + 
":   " + StatNode.Id + ";   " + StatNode.Type.ToString());
    Value := StatNode.Value;
    
If Value Is Array Then
        Values := Value 
As Array;
        
For j := 0 To Values.Length - 1 Do
            
If Not String.IsNullOrEmpty(Combined) Then
                Combined := Combined + 
", ";
            
End If;
            Combined := Combined + Values[j];
        
End For;
        System.Diagnostics.Debug.Write(
"[" + Combined + "]");
        Combined := 
"";
        
Elseif Value Is IMsDatePeriod Then
            System.Diagnostics.Debug.Write((Value 
As IMsDatePeriod).Start.ToString() + " - " + (Value As IMsDatePeriod).@End.ToString());
        
Else
        System.Diagnostics.Debug.Write(
";   " + StatNode.Value);
    
End If;
    System.Diagnostics.Debug.WriteLine(
"");
    
If StatNode.Children.Count > 0 Then
        
For Each Node In StatNode.Children Do
            ShowNode(Node);
        
End For;
    
End If;
    System.Diagnostics.Debug.Unindent();
End Sub ShowNode;

После выполнения примера будет запущен расчет заданной задачи моделирования с идентификатором PROBLEM.

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

Статистики расчета:

    Загрузка данных:   LOADSTEP;   0;   

        Время расчета (с):   ELAPSEDTIME;   1;   0.094

        Статистические данные:   TSDB_STAT;   0;   

            Внешняя матрица:   EXTERNALMATRIX;   0;   0

            Количество точек:   POINTCOUNT;   0;   31

    Расчет:   CALCSTEP;   0;   

        Время расчета (с):   ELAPSEDTIME;   1;   0

        Многомерный итератор:   ;   0;   

    Сохранение данных:   SAVESTEP;   0;   

        Время расчета (с):   ELAPSEDTIME;   1;   0

        Статистические данные:   TSDB_STAT;   0;   

            Внешняя матрица:   EXTERNALMATRIX;   0;   0

            Количество точек:   POINTCOUNT;   0;   31

            Количество изменённых точек:   CHANGEDPOINTCOUNT;   0;   0

См. также:

IMsCalculationStats