IMsBranchConditionNotEmpty.SetStub

Синтаксис Fore

SetStub(pStub: IVariableStub);

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

SetStub(pStub: Prognoz.Platform.Interop.Cubes.IVariableStub);

Параметры

pStub. Источник данных, содержащий ряд, проверяемый на пустоту.

Описание

Метод SetStub устанавливает источник данных, который содержит ряд, проверяемый на пустоту.

Комментарии

Для получения среза, соответствующего проверяемому ряду используйте свойство IMsBranchConditionNotEmpty.Slice.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS». Данный контейнер должен содержать метамодель с идентификатором «METAMODEL_BRANCH» и модели с идентификаторами «MODEL_LINEAR» и «MODEL_TSLS».

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

Sub UserProc;
Var
    mb: IMetabase;
    MsKey: Integer;
    MetaModel: IMsMetaModel;
    Chain, DefaultContents: IMsCalculationChainEntries;
    Branch: IMsCalculationChainBranch;
    Case_1, Case_default: IMsModel;
    CaseList: IMsBranchCaseList;
    CaseItem: IMsBranchCase;
    BranchConditions: IMsBranchConditions;
    ConditionNotEmpty: IMsBranchConditionNotEmpty;
    Transform: IMsFormulaTransform;
    Output: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
Begin
    // Получаем текущий репозиторий
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsKey := mb.GetObjectKeyById("MS");
    // Получаем метамодель
    MetaModel := mb.ItemByIdNamespace("METAMODEL_BRANCH", MsKey).Edit As IMsMetaModel;
    // Получаем цепочку расчета метамодели
    Chain := MetaModel.CalculationChain;
    // Очищаем цепочку расчета метамодели
    Chain.Clear;
    // Создаем вершину условия
    Branch := Chain.AddBranch("Условие");
    // Получаем цепочку расчета по умолчанию, которая рассчитывается,
    // если не выполнилась ни одна ветка условия
    DefaultContents := Branch.DefaultContents;
    // Получаем модель «MODEL_LINEAR»
    Case_default := mb.ItemByIdNamespace("MODEL_LINEAR", MsKey).Bind As IMsModel;
    // Добавляем модель «MODEL_LINEAR» в цепочку расчета по умолчанию
    DefaultContents.AddModel(Case_default);
    // Получаем коллекцию веток условия
    CaseList := Branch.CaseList;
    // Добавляем ветку условия
    CaseItem := CaseList.Add;
    // Получаем модель «MODEL_TSLS»
    Case_1 := mb.ItemByIdNamespace("MODEL_TSLS", MsKey).Bind As IMsModel;
    // Указываем, что данная модель должна быть рассчитана, если выполняется данная ветка условия
    CaseItem.Contents.AddModel(Case_1);
    // Получаем коллекцию условий расчета ветки
    BranchConditions := CaseItem.Conditions;
    // Добавляем условие расчета ветки: указанный ряд должен содержать данные
    ConditionNotEmpty := BranchConditions.Add(MsBranchConditionType.NotEmpty) As IMsBranchConditionNotEmpty;
    // Получаем моделируемую переменную в модели «MODEL_TSLS»
    Transform := Case_1.Transform;
    Output := Transform.Outputs.Item(0);
    // Указываем, что источник данных моделируемой переменной
    // содержит ряд, проверяемый на наличие данных
    ConditionNotEmpty.SetStub(Output.VariableStub);
    // Получаем срез данных, соответствующий ряду, который будет проверяться на наличие данных
    Slice := ConditionNotEmpty.Slice;
    // Устанавливаем отметку, аналогичную отметке моделируемой переменной
    Slice.Selection := Output.Slices.Item(0).Selection;
    // Сохраняем изменения
    (MetaModel As IMetabaseObject).Save;
End Sub UserProc;

В результате выполнения примера в цепочке расчета метамодели будет создано условие: если моделируемая переменная модели «MODEL_TSLS» не является пустой, то будет рассчитана данная модель, иначе - модель «MODEL_LINEAR».

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MsKey: uinteger;
    MetaModel: IMsMetaModel;
    Chain, DefaultContents: IMsCalculationChainEntries;
    Branch: IMsCalculationChainBranch;
    Case_1, Case_default: IMsModel;
    CaseList: IMsBranchCaseList;
    CaseItem: IMsBranchCase;
    BranchConditions: IMsBranchConditions;
    ConditionNotEmpty: IMsBranchConditionNotEmpty;
    Transform: IMsFormulaTransform;
    Output: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
Begin
    // Получаем текущий репозиторий
    mb := Params.Metabase;
    // Получаем контейнер моделирования
    MsKey := mb.GetObjectKeyById("MS");
    // Получаем метамодель
    MetaModel := mb.ItemByIdNamespace["METAMODEL_BRANCH", MsKey].Edit() As IMsMetaModel;
    // Получаем цепочку расчета метамодели
    Chain := MetaModel.CalculationChain;
    // Очищаем цепочку расчета метамодели
    Chain.Clear();
    // Создаем вершину условия
    Branch := Chain.AddBranch("Условие");
    // Получаем цепочку расчета по умолчанию, которая рассчитывается,
    // если не выполнилась ни одна ветка условия
    DefaultContents := Branch.DefaultContents;
    // Получаем модель «MODEL_LINEAR»
    Case_default := mb.ItemByIdNamespace["MODEL_LINEAR", MsKey].Bind() As IMsModel;
    // Добавляем модель «MODEL_LINEAR» в цепочку расчета по умолчанию
    DefaultContents.AddModel(Case_default);
    // Получаем коллекцию веток условия
    CaseList := Branch.CaseList;
    // Добавляем ветку условия
    CaseItem := CaseList.Add();
    // Получаем модель «MODEL_TSLS»
    Case_1 := mb.ItemByIdNamespace["MODEL_TSLS", MsKey].Bind() As IMsModel;
    // Указываем, что данная модель должна быть рассчитана, если выполняется данная ветка условия
    CaseItem.Contents.AddModel(Case_1);
    // Получаем коллекцию условий расчета ветки
    BranchConditions := CaseItem.Conditions;
    // Добавляем условие расчета ветки: указанный ряд должен содержать данные
    ConditionNotEmpty := BranchConditions.Add(MsBranchConditionType.mbctNotEmpty) As IMsBranchConditionNotEmpty;
    // Получаем моделируемую переменную в модели «MODEL_TSLS»
    Transform := Case_1.Transform;
    Output := Transform.Outputs.Item[0];
    // Указываем, что источник данных моделируемой переменной
    // содержит ряд, проверяемый на наличие данных
    ConditionNotEmpty.SetStub(Output.VariableStub);
    // Получаем срез данных, соответствующий ряду, который будет проверяться на наличие данных
    Slice := ConditionNotEmpty.Slice;
    // Устанавливаем отметку, аналогичную отметке моделируемой переменной
    Slice.Selection := Output.Slices.Item[0].Selection;
    // Сохраняем изменения
    (MetaModel As IMetabaseObject).Save();
End Sub;

См. также:

IMsBranchConditionNotEmpty