IMsMetaModelVisualController.GetGroupVariablesData

Синтаксис Fore

GetGroupVariablesData(
                      EntryKeys: Array;
                      ScenarioKeys: Array;
                      pCalculation: IMsMethodCalculation;
                      Filter: Boolean;
                      SuppressEmptyArea: LnSuppressEmptyArea;
                      Var ResDates: Array;
                      Var ResLevels: Array;
                      Var ResValues: Array);

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

GetGroupVariablesData(
                      EntryKeys: System.Array;
                      ScenarioKeys: System.Array;
                      pCalculation: Prognoz.Platform.Interop.Ms.IMsMethodCalculation;
                      Filter: boolean;
                      SuppressEmptyArea: Prognoz.Platform.Interop.Laner.LnSuppressEmptyArea;
                      var ResDates: System.Array;
                      var ResLevels: System.Array;
                      var ResValues: System.Array);

Параметры

EntryKeys. Массив ключей переменных;

ScenarioKeys. Массив ключей сценариев;

pCalculation. Параметры расчёта модели;

Filter. Признак того, что данные переменных надо отфильтровать;

SuppressEmptyArea. Метод фильтрации данных переменных;

ResDates. Массив дат для значений переменных;

ResLevels. Массив календарных динамик, используемых переменными;

ResValues. Массив значений переменных.

Описание

Метод GetGroupVariablesData возвращает данные нескольких переменных.

Комментарии

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

Возможные значения параметра Filter:

Пример Fore

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

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

Sub UserProc;
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    Problem: IMsProblem;
    Meta: IMsMetaModel;
    MetaVisual: IMsMetaModelVisualController;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    i, j: Integer;
    Model: IMsModel;
    Transform: IMsFormulaTransform;
    OutVars, InpVars: IMsFormulaTransformVariables;
    VarsKey: Array Of Integer;
    Calc: IMsMethodCalculation;
    ScenKeys: Array Of Integer;
    ResDates: Array Of String;
    ResLevels: Array Of Integer;
    ResValues: Array Of Double;
    Val: Double;
Begin
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById("MS");
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace("MODEL_VAR_LVL", MsObj.Key).Bind As IMsProblem;
    // Получаем метамодель
    Meta := Problem.MetaModel;
    MetaVisual := Meta.VisualController;
    // Получаем 1-ю модель в цепочке расчёта
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item(i);
        If ChainEl.Type = MsCalculationChainEntryType.Model Then
            Model := (ChainEl As IMsCalculationChainModel).Model;
            Break;
        End If;
    End For;
    // Получаем параметры модели
    Transform := Model.Transform;
    // Получаем количество переменных, входящих в модель
    OutVars := Transform.Outputs;
    InpVars := Transform.Inputs;
    i := OutVars.Count + InpVars.Count;
    // Получаем массив ключей переменных, входящих в модель
    VarsKey := New Integer[i];
    For i := 0 To OutVars.Count - 1 Do
        VarsKey[i] := OutVars.Item(i).Key;
    End For;
    For j := 0 To InpVars.Count - 1 Do
        VarsKey[j + i] := InpVars.Item(j).Key;
    End For;
    // Создаем параметры расчета модели
    Calc := Transform.CreateCalculation;
    Calc.Period.IdentificationStartDate := model.Transform.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := model.Transform.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := model.Transform.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := model.Transform.Period.ForecastEndDate;
    // Создаем массив ключей сценариев и указываем там сценарий «Факт»
    ScenKeys := New Integer[1];
    ScenKeys[0] := -1;
    // Получаем значения входной переменной 
    MetaVisual.GetGroupVariablesData(VarsKey, ScenKeys, Calc, True,
        LnSuppressEmptyArea.SerieBounds, ResDates, ResLevels, ResValues);
    // Выводим значения в окно консоли  
    Debug.WriteLine("Количество различных календарных динамик: " + ResLevels.Length.ToString);
    Debug.WriteLine("Значения переменных:");
    For i := 0 To ResDates.Length - 1 Do
        Debug.Write(ResDates[i]);
        Debug.Write(" - ");
        Val := ResValues[00, i];
        For j := 0 To VarsKey.Length - 1 Do
            Val := ResValues[0, j, i];
            If Not Double.IsNan(val) Then
                If j > 0 Then
                    Debug.Write("          ");
                End If;
                Debug.Write(Val);
            End If;
        End For;
        Debug.WriteLine("");
    End For;
End Sub UserProc;

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

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Laner;
Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    Problem: IMsProblem;
    Meta: IMsMetaModel;
    MetaVisual: IMsMetaModelVisualController;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    i, j: Integer;
    Model: IMsModel;
    Transform: IMsFormulaTransform;
    OutVars, InpVars: IMsFormulaTransformVariables;
    VarsKey: System.Array;
    Calc: IMsMethodCalculation;
    ScenKeys: System.Array;
    ResDates: System.Array;
    ResLevels: System.Array;
    ResValues: System.Array;
    Val: Double;
Begin
    mb := Params.Metabase;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById["MS"];
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace["MODEL_VAR_LVL", MsObj.Key].Bind() As IMsProblem;
    // Получаем метамодель
    Meta := Problem.MetaModel;
    MetaVisual := Meta.VisualController;
    // Получаем 1-ю модель в цепочке расчёта
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item[i];
        If ChainEl.Type = MsCalculationChainEntryType.mccetModel Then
            Model := (ChainEl As IMsCalculationChainModel).Model;
            Break;
        End If;
    End For;
    // Получаем параметры модели
    Transform := Model.Transform;
    // Получаем количество переменных, входящих в модель
    OutVars := Transform.Outputs;
    InpVars := Transform.Inputs;
    i := OutVars.Count + InpVars.Count;
    // Получаем массив ключей переменных, входящих в модель
    VarsKey := New Integer[i];
    For i := 0 To OutVars.Count - 1 Do
        VarsKey[i] := OutVars.Item[i].Key As integer;
    End For;
    For j := 0 To InpVars.Count - 1 Do
        VarsKey[j + i] := InpVars.Item[j].Key As integer;
    End For;
    // Создаем параметры расчета модели
    Calc := Transform.CreateCalculation();
    Calc.Period.IdentificationStartDate := model.Transform.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := model.Transform.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := model.Transform.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := model.Transform.Period.ForecastEndDate;
    // Создаем массив ключей сценариев и указываем там сценарий «Факт»
    ScenKeys := New Integer[1];
    ScenKeys[0] := -1;
    // Получаем значения входной переменной 
    MetaVisual.GetGroupVariablesData(VarsKey, ScenKeys, Calc, True,
        LnSuppressEmptyArea.lseaSerieBounds, Var ResDates, Var ResLevels, Var ResValues);
    // Выводим значения в окно консоли  
    System.Diagnostics.Debug.WriteLine("Количество различных календарных динамик: " + ResLevels.Length.ToString());
    System.Diagnostics.Debug.WriteLine("Значения переменных:");
    For i := 0 To ResDates.Length - 1 Do
        System.Diagnostics.Debug.Write(ResDates[i]);
        System.Diagnostics.Debug.Write(" - ");
        Val := ResValues[i, 00As double;
        For j := 0 To VarsKey.Length - 1 Do
            Val := ResValues[i, j, 0As double;
            If Not Double.IsNan(val) Then
                If j > 0 Then
                    System.Diagnostics.Debug.Write("          ");
                End If;
                System.Diagnostics.Debug.Write(Val);
            End If;
        End For;
        System.Diagnostics.Debug.WriteLine("");
    End For;
End Sub;

См. также:

IMsMetaModelVisualController