Argument: IMsFormulaTerm;
The Argument property determines the term, that corresponds to the variable of gross output (of final use), depending on the current task of interindustrial balance.
Sub UserProc;
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;
Trans.Kind := MsModelKind.InterindustryBalance;
//Add a variable of final use to Outputs of model, and gross output, matrix A and matrix X to Inputs
EndVar := MB.ItemByIdNamespace("EndVar", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Trans.Outputs.Add(EndVar As IMsVariableStub);
ValVar := MB.ItemByIdNamespace("Val_Prod", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Trans.Inputs.Add(ValVar As IMsVariableStub);
AVar := MB.ItemByIdNamespace("MatrA", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Trans.Inputs.Add(AVar As IMsVariableStub);
XVar := MB.ItemByIdNamespace("MatrX", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Trans.Inputs.Add(XVar As IMsVariableStub);
//Pass-through dimensions are set for variable of final use and gross output
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;
//Fill in model parameters
//Add a variable of final use
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;
//Specify dimension by rows
Industry.BranchRowDimension := Dim;
//Set gross output variable
TransVar := Model.Transform.Inputs.FindById("VAL_PROD");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.Argument := Term;
//Specify dimension by columns
Industry.BranchColumnDimension := Dim1;
//Set variable of the A matrix
TransVar := Model.Transform.Inputs.FindById("MATRA");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.NewMatrixA := Term;
//Set variable of the X matrix
TransVar := Model.Transform.Inputs.FindById("MATRX");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.MatrixA := Term;
//Second quadrant
TwoKvadrVar := MB.ItemByIdNamespace("TWOKVADR", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Trans.Inputs.Add(TwoKvadrVar As IMsVariableStub);
TwoKvadrVar := MB.ItemByIdNamespace("VAR_11", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Trans.Inputs.Add(TwoKvadrVar As IMsVariableStub);
TwoKvadrVar := MB.ItemByIdNamespace("VAR_22", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Trans.Inputs.Add(TwoKvadrVar As IMsVariableStub);
//Set variable for the II quadrant
TransVar := Model.Transform.Inputs.FindById("TWOKVADR");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.SecondQuadrant := Term;
//Set variable , based on which calculation is executed
TransVar := Model.Transform.Inputs.FindById("VAR_11");
Tree := TransVar.SlicesTree(Null);
Slice := Tree.CreateSlice(1);
Term := Industry.Operands.Add(Slice);
Industry.FiniteUseMatrix := Term;
//Set variable, to which matrix will be loaded
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 UserProc
After executing the example a new model of interindustrial balance is created in the modeling container. This model solves the problem of finding the final use. The variables of final use, gross output, variables for calculation and uploading of the A matrix are added. The calculation of the second quadrant is also set. The structure of final use is calculated on the basis of a variable with the VAR_11 identifier.
See also: