SecondQuadrant: IMsFormulaTerm;
Свойство SecondQuadrant определяет терм, соответствующий переменной, в которую будет выгружаться II квадрант при расчете модели.
Sub Main;
Var
MB: IMetabase;
CrInf: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
Model: IMsModel;
Trans: IMsFormulaTransform;
EndVar, ValVar, AVar, XVar, TwoKvadrVar: IMsVariable;
Dim, Dim1: IDimensionModel;
TransVar: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
Industry: IMsInterindustryBalanceTransform;
Term: IMsFormulaTerm;
Begin
MB := MetabaseClass.Active;
CrInf := Mb.CreateCreateInfo;
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;
CrInf.Id := "New_MOB";
CrInf.Name := "New_MOB";
CrInf.Parent := Mb.ItemById("KONT_MODEL");
CrInf.Permanent := False;
MObj := Mb.CreateObject(CrInf).Edit;
Model := MObj As IMsModel;
Trans := Model.Transform;
Model.Kind := MsModelKind.InterindustryBalance;
//Добавляем переменную конечного использования в Outputs модели, и валового выпуска, матрицу А и матрицу Х в Inputs
EndVar := MB.ItemByIdNamespace("EndVar", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Output.Add(EndVar);
ValVar := MB.ItemByIdNamespace("Val_Prod", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(ValVar);
AVar := MB.ItemByIdNamespace("MatrA", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(AVar);
XVar := MB.ItemByIdNamespace("MatrX", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(XVar);
//Для переменной конечного использования и валового выпуска устанавливаются сквозные измерения
Dim := EndVar.Dimensions.Item(0).Model;
Dim1 := ValVar.Dimensions.Item(0).Model;
Trans.DimensionTransparent(Trans.Outputs.Item(0), Dim) := True;
Trans.DimensionTransparent(Trans.Outputs.Item(0), Dim1) := True;
//Заполнение параметров модели
//Добавляем переменную конечного использования
TransVar := Model.Transform.Outputs.FindById("EndVar");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Selector := EndVar.Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Model.Transform.Transform(Selector);
Formula.Kind := MsFormulaKind.InterindustryBalance;
Formula.Level := DimCalendarLevel.Year;
Industry := Formula.Method As IMsInterindustryBalanceTransform;
//Указываем измерение по строкам
Industry.BranchRowDimension := Dim;
//Задаем перменную валового выпуска
TransVar := Model.Transform.Inputs.FindById("Val_Prod");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.Argument := Term;
//Указываем измерение по столбцам
Industry.BranchColumnDimension := Dim1;
//Задаем перменную матрицы A
TransVar := Model.Transform.Inputs.FindById("MatrA");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.NewMatrixA := Term;
//Задаем перменную матрицы X
TransVar := Model.Transform.Inputs.FindById("MatrX");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.MatrixA := Term;
//Второй квадрант
TwoKvadrVar := MB.ItemByIdNamespace("TwoKvadr", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(TwoKvadrVar);
TwoKvadrVar := MB.ItemByIdNamespace("var_11", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(TwoKvadrVar);
TwoKvadrVar := MB.ItemByIdNamespace("var_22", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(TwoKvadrVar);
//Задаем переменную для II квадранта
TransVar := Model.Transform.Inputs.FindById("TwoKvadr");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.SecondQuadrant := Term;
//Задаем переменную на основе которой производится расчет
TransVar := Model.Transform.Inputs.FindById("var_11");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.FiniteUseMatrix := Term;
//Задаем переменную в которую будет выгружаться матрица
TransVar := Model.Transform.Inputs.FindById("var_22");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.NewFiniteUseMatrix := Term;
Industry.GenerateFiniteUse := True;
MObj.Save;
End Sub Main;
После выполнения примера в контейнере моделирования будет создана новая модель межотраслевого баланса. Данная модель решает задачу нахождения конечного использования. В модель будут добавлены переменные конечного использования, валового выпуска, переменные для расчета и выгрузки матрицы А. Так же будет настроен расчет второго квадранта. Структура конечного использования будет рассчитываться на основе переменной с идентификатором "var_11".
См. также:
IMsInterindustryBalanceTransform | IMsInterindustryBalanceTransform.FiniteUseMatrix | IMsInterindustryBalanceTransform.NewFiniteUseMatrix