IModelBox.ResultsViewScenario

Синтаксис Fore

ResultsViewScenario: Integer;

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

ResultsViewScenario: integer;

Описание

Свойство ResultsViewScenario определяет ключ сценария, по которому рассчитывается модель.

Комментарии

Для расчёта по сценарию «Факт» установите в ResultsViewScenario значение «-1».

Пример Fore

Для выполнения примера предполагается наличие формы, содержащей компонент UiModel с идентификатором «UiModel1» и компонент ModelBox с идентификатором «ModelBox1». «UiModel1» является источником данных для «ModelBox1». В репозитории предполагается наличие контейнера моделирования с идентификатором «MODEL_SPACE», содержащего задачу моделирования с идентификатором «PROBLEM». Задача моделирования должна содержать несколько сценариев и рассчитывать несколько моделей.

Добавьте ссылку на системную сборку «Metabase».

Sub UserProc;
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    ms: IMsModelSpace;
    Problem: IMsProblem;
    MetaModel: IMsMetaModel;
    CalcChain: IMsCalculationChainEntries;
    i: Integer;
    CalcChainEntry: IMsCalculationChainEntry;
    Scenarios: IMsProblemScenarios;
    ScenKey: integer;
    ScenTree: IMsScenarioTreeEntries;
    ScenEntry: IMsScenarioTreeEntry;
Begin
    UiModel1.Active := False;
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById("MODEL_SPACE");
    ms := MsObj.Bind As IMsModelSpace;
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace("PROBLEM", MsObj.Key).Bind As IMsProblem;
    // Получаем метамодель, рассчитываемую задачей
    MetaModel := Problem.MetaModel;
    // Получаем цепочку расчёта метамодели
    CalcChain := MetaModel.CalculationChain;
    // Получаем первую модель в цепочке расчёта
    For i := 0 To CalcChain.Count - 1 Do
        CalcChainEntry := CalcChain.Item(i);
        If CalcChainEntry.Type = MsCalculationChainEntryType.Model Then
            // Используем модель в качестве источника данных для UiModel1
            UiModel1.Model := (CalcChainEntry As IMsCalculationChainModel).Model;
            UiModel1.Active := True;
            Break;
        End If;
    End For;
    // Получаем сценарии, по которым рассчитывается задача моделирования
    Scenarios := Problem.Scenarios;
    // Получаем 2-й сценарий задачи моделирования
    ScenKey := Scenarios.Item(1).InternalKey;
    // Получаем ключ 2-го сценария
    ScenTree := ms.ScenarioTree;
    ScenEntry := ScenTree.FindByInternalKey(ScenKey);
    // Указываем, что модель рассчитывается по 2-му сценарию
    ModelBox1.ResultsViewScenario := ScenEntry.Key;
    // Рассчитываем модель
    ModelBox1.Execute;
    // Сохраняем изменения
    ModelBox1.SaveObject;
End Sub UserProc;

Результат выполнения примера: в компоненте «ModelBox1» будет отображена первая модель, рассчитываемая задачей моделирования; для расчёта данной модели будет использоваться второй сценарий задачи моделирования.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Ms;

Public Sub UserProc();
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    ms: IMsModelSpace;
    Problem: IMsProblem;
    MetaModel: IMsMetaModel;
    CalcChain: IMsCalculationChainEntries;
    i: Integer;
    CalcChainEntry: IMsCalculationChainEntry;
    Scenarios: IMsProblemScenarios;
    ScenKey: uinteger;
    ScenTree: IMsScenarioTreeEntries;
    ScenEntry: IMsScenarioTreeEntry;
Begin
//  uiModelNet1.Active := False;
    mb := Self.Metabase;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById["MODEL_SPACE"];
    ms := MsObj.Bind() As IMsModelSpace;
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace["PROBLEM", MsObj.Key].Bind() As IMsProblem;
    // Получаем метамодель, рассчитываемую задачей
    MetaModel := Problem.MetaModel;
    // Получаем цепочку расчёта метамодели
    CalcChain := MetaModel.CalculationChain;
    // Получаем первую модель в цепочке расчёта
    For i := 0 To CalcChain.Count - 1 Do
        CalcChainEntry := CalcChain.Item[i];
        If CalcChainEntry.Type = MsCalculationChainEntryType.mccetModel Then
            // Используем модель в качестве источника данных для uiModelNet1
            uiModelNet1.Model := (CalcChainEntry As IMsCalculationChainModel).Model;
            uiModelNet1.Active := True;
            Break;
        End If;
    End For;
    // Получаем сценарии, по которым рассчитывается задача моделирования
    Scenarios := Problem.Scenarios;
    // Получаем 2-й сценарий задачи моделирования
    ScenKey := Scenarios.Item[1].InternalKey;
    // Получаем ключ 2-го сценария
    ScenTree := ms.ScenarioTree;
    ScenEntry := ScenTree.FindByInternalKey(ScenKey);
    // Указываем, что модель рассчитывается по 2-му сценарию
    modelBoxNet1.CtrlBox.ResultsViewScenario := ScenEntry.Key;
    // Рассчитываем модель
    modelBoxNet1.CtrlBox.Execute();
    // Сохраняем изменения
    modelBoxNet1.CtrlBox.SaveObject();
End Sub;

См. также:

IModelBox