ExpressionList: IMsDeterministicExpressionList;
ExpressionList: Prognoz.Platform.Interop.Ms.IMsDeterministicExpressionList;
Свойство ExpressionList возвращает коллекцию формул, которые имеют период действия.
Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «CONT_MODEL». В контейнере создана задача моделирования с идентификатором, метамодель и модель с идентификатором «PROBLEM». Модель использует для расчёта метод детерминированного уравнения.
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserProc;
Var
Mb: IMetabase;
Problem: IMsProblem;
MetaModel: IMsMetaModel;
Model: IMsModel;
Determ: IMsDeterministicTransform;
Slice: IMsFormulaTransformSlice;
DetermExprList: IMsDeterministicExpressionList;
Begin
Mb := MetabaseClass.Active;
Problem := Mb.ItemByIdNamespace("PROBLEM", Mb.GetObjectKeyById("CONT_MODEL")).Edit As IMsProblem;
MetaModel := Problem.MetaModel;
Model := (MetaModel.CalculationChain.Item(0) As IMsCalculationChainModel).EditModel;
Determ := (Model.Transform.FormulaItem(0).Method As IMsDeterministicTransform);
// Срез, на базе которого будет создан фактор для формулы
Slice := Model.Transform.Outputs.Item(0).Slices.Item(0);
// Настройка формул, которые имеют период действия
DetermExprList := Determ.ExpressionList;
DetermExprList.Clear;
// Добавление формул на различные даты
AddDetermExpr("01.01.2020", "2", Slice, DetermExprList);
AddDetermExpr("01.01.2015", "3", Slice, DetermExprList);
AddDetermExpr("01.01.2010", "4", Slice, DetermExprList);
// Сортировка списка
DetermExprList.SortByDate;
// Сохранение модели
Model.MetabaseObject.Save;
End Sub UserProc;
Sub AddDetermExpr(DateStr: String; ExpressionStr: String; Slice: IMsFormulaTransformSlice; Var DetermExprList: IMsDeterministicExpressionList);
Var
DetermExpr: IMsDeterministicExpression;
Term: IMsFormulaTerm;
Begin
DetermExpr := DetermExprList.Add;
Term := DetermExpr.Operands.Add(Slice);
DetermExpr.EndDate := DateTime.Parse(DateStr);
DetermExpr.Expression.AsString := Term.TermToInnerText + '*' + expressionStr + "/3.14";
End Sub AddDetermExpr;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Ms;
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
Problem: IMsProblem;
MetaModel: IMsMetaModel;
Model: IMsModel;
Determ: IMsDeterministicTransform;
Slice: IMsFormulaTransformSlice;
DetermExprList: IMsDeterministicExpressionList;
Begin
Mb := Params.Metabase;
Problem := Mb.ItemByIdNamespace["PROBLEM", Mb.GetObjectKeyById("CONT_MODEL")].Edit() As IMsProblem;
MetaModel := Problem.MetaModel;
// Параметры модели
Model := (MetaModel.CalculationChain.Item[0] As IMsCalculationChainModel).EditModel;
Determ := (Model.Transform.FormulaItem[0].Method As IMsDeterministicTransform);
// Срез, на базе которого будет создан фактор для формулы
Slice := Model.Transform.Outputs.Item[0].Slices.Item[0];
// Настройка формул, которые имеют период действия
DetermExprList := Determ.ExpressionList;
DetermExprList.Clear();
// Добавление формул на различные даты
AddDetermExpr("01.01.2020", "2", Slice, Var DetermExprList);
AddDetermExpr("01.01.2015", "3", Slice, Var DetermExprList);
AddDetermExpr("01.01.2010", "4", Slice, Var DetermExprList);
// Сортировка списка
DetermExprList.SortByDate();
// Сохранение модели
Model.MetabaseObject.Save();
End Sub;
Shared Sub AddDetermExpr(DateStr: String; ExpressionStr: String; Slice: IMsFormulaTransformSlice; Var DetermExprList: IMsDeterministicExpressionList);
Var
DetermExpr: IMsDeterministicExpression;
Term: IMsFormulaTerm;
Begin
DetermExpr := DetermExprList.Add();
Term := DetermExpr.Operands.Add(Slice);
DetermExpr.EndDate := DateTime.Parse(DateStr);
DetermExpr.Expression.AsString := Term.TermToInnerText() + '*' + expressionStr + "/3.14";
End Sub;
При выполнении примера будет произведена настройка модели: будут созданы три различные формулы, имеющие разный период действия.
См. также: