StepDate;
Метод StepDate выполняет пошаговый расчёт задачи моделирования по точкам календарной динамики.
На одном шаге рассчитываются все модели на все сценарии на определенную дату.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором MODEL_SPACE, содержащим задачу моделирования с идентификатором PROBLEM.
Добавьте ссылки на системные сборки: Matrix, Metabase, Ms.
Sub StepDate;
Var
mb: IMetabase;
MSKey: Integer;
Problem: IMsProblem;
Setts: IMsProblemCalculationSettings;
Calc: IMsProblemCalculation;
State: IMsCalculationState;
Model: IMsModel;
Slice: IMsFormulaTransformSlice;
MatrixDS: IMatrixDataSource;
Matr: IMatrix;
Iter: IMatrixIterator;
TrVar: IMsFormulaTransformVariable;
Begin
mb := MetabaseClass.Active;
// Получаем задачу моделирования
MSKey := mb.GetObjectKeyById("MODEL_SPACE");
Problem := mb.ItemByIdNamespace("PROBLEM", MSKey).Bind As IMsProblem;
// Создаем настройки для расчёта задачи
Setts := Problem.CreateCalculationSettings;
// Выполняем пошаговый расчёт задачи
Calc := Problem.Calculate(Setts);
Repeat
Calc.StepDate;
State := Calc.CalculationState;
Debug.WriteLine(State.Message);
Until State.Model <> Null;
// Выводим информацию о наименовании рассчитанной модели
Model := State.Model;
Debug.WriteLine("Модель: " + Model.Name);
// Получаем данные моделируемой переменной
TrVar := Model.Transform.Outputs.Item(0);
Slice := TrVar.Slices.Item(0);
MatrixDS := State.DataMultiDim(Slice);
Matr := MatrixDS.Execute(Null);
// Выводим данные моделируемой переменной
Debug.WriteLine("Текущие значения моделируемой переменной '" + TrVar.Name + "'");
Iter := Matr.CreateIterator;
Iter.Move(IteratorDirection.First);
While Iter.Valid Do
Debug.WriteLine(" " + Iter.Value);
Iter.Move(IteratorDirection.Next);
End While;
// Прерываем расчёт задачи
Calc.Stop;
End Sub StepDate;
Результат выполнения примера: запущен пошаговый расчёт задачи PROBLEM, после расчёта в окно консоли выведено наименование рассчитанной модели и данные моделируемой переменной.
См. также: