EnableArithmeticErrors: Boolean;
EnableArithmeticErrors: boolean;
Свойство EnableArithmeticErrors определяет признак срабатывания события OnError при возникновении ошибок в арифметических операциях в процессе расчёта задачи моделирования.
Допустимые значения:
True. Событие OnError срабатывает при возникновении ошибок в арифметических операциях;
False. По умолчанию. Событие OnError не срабатывает.
Событие OnError обрабатывает ошибки при делении на 0.
Для выполнения примера в репозитории необходимо наличие контейнера моделирования с идентификатором CONTAINER. В контейнере моделирования должна содержаться задача моделирования с идентификатором CONTAINER_TASK.
Добавьте ссылки на системные сборки:
для примера на Fore: Metabase, Ms;
для примера на Fore.NET: Cubes, Matrix, Metabase, Ms.
Public Class MCallback: ProblemCalculationCallback
// Опишем событие OnError
Public Sub OnError(Message: String);
Begin
// Выведем в консоль информацию об ошибке
Debug.WriteLine("Ошибка: " + Message);
End Sub OnError;
End Class MCallback;
Sub main;
Var
Mb: IMetabase;
MbDes: IMetabaseObjectDescriptor;
Problem: IMsProblem;
Calc: IMsProblemCalculation;
CallBack: MCallBack;
CalcSet: IMsProblemCalculationSettings;
Begin
// Получим репозиторий
Mb := MetabaseClass.Active;
// Получим задачу моделирования
MbDes := Mb.ItemByIdNamespace("CONTAINER_TASK", Mb.GetObjectKeyById("CONTAINER"));
Problem := MbDes.Edit As IMsProblem;
// Настроим параметры расчёта задачи
CalcSet := Problem.CreateCalculationSettings;
// Отключим прерывание расчёта задачи при возникновении ошибки
CalcSet.BreakOnError := False;
// Создадим объект для расчёта задачи
Calc := Problem.Calculate(CalcSet);
// Создадим объект для обработки событий
CallBack := New MCallback.Create;
Calc.Callback := CallBack;
// Активируем срабатывание события OnError при ошибках в арифметических операциях
Calc.EnableArithmeticErrors := True;
// Запустим расчёт задачи
Calc.Run;
End Sub main;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Ms;
Public Class MCallback: IMsProblemCalculationCallback
// Опишем событие OnError
Public Sub OnError(Message: String);
Begin
// Выведем в консоль информацию об ошибке
System.Diagnostics.Debug.WriteLine("Ошибка: " + Message);
End Sub OnError;
// Опишем остальные события интерфейса
Public Sub OnBreak(Breakp: IMsBreakpoint);
Begin
End Sub OnBreak;
Public Sub OnMessage(Message: String);
Begin
End Sub OnMessage;
Public Sub OnFinish();
Begin
End Sub OnFinish;
Public Sub OnModelCalculation(Model: IMsModel);
Begin
End Sub OnModelCalculation;
Public Sub OnStep();
Begin
End Sub OnStep;
Public Sub OnWarning(Message: string);
Begin
End Sub OnWarning;
Public Sub OnStageStart(Stage: MsProblemCalculationStage; Data: object);
Begin
End Sub OnStageStart;
Public Sub OnStageFinish(Stage: MsProblemCalculationStage; Duration: Integer; Data: object);
Begin
End Sub OnStageFinish;
Public Sub OnBeforeSaveData(Stub: IVariableStub; Matrix: IMatrix; var ValueFlag: integer; Var Cancel: boolean);
Begin
End Sub OnBeforeSaveData;
Public Sub OnSaveData(Stub: IVariableStub; Matrix: IMatrix; ValueFlag: integer; AuditRecordKey: object);
Begin
End Sub OnSaveData;
Public Function OnGetActiveEvents(): MsProblemCalculationCallbackEvents;
Begin
Return MsProblemCalculationCallbackEvents.mspceAll;
End Function;
End Class;
…
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
MbDes: IMetabaseObjectDescriptor;
Problem: IMsProblem;
Calc: IMsProblemCalculation;
CallBack: MCallBack;
CalcSet: IMsProblemCalculationSettings;
Begin
// Получим репозиторий
Mb := Params.Metabase;
// Получим задачу моделирования
MbDes := Mb.ItemByIdNamespace["CONTAINER_TASK", Mb.GetObjectKeyById("CONTAINER")];
Problem := MbDes.Edit() As IMsProblem;
// Настроим параметры расчёта задачи
CalcSet := Problem.CreateCalculationSettings();
// Отключим прерывание расчёта задачи при возникновении ошибки
CalcSet.BreakOnError := False;
// Создадим объект для расчёта задачи
Calc := Problem.Calculate(CalcSet);
// Создадим объект для обработки событий
CallBack := New MCallback.Create();
Calc.Callback := CallBack;
// Активируем срабатывание события OnError при ошибках в арифметических операциях
Calc.EnableArithmeticErrors := True;
// Запустим расчёт задачи
Calc.Run();
End Sub;
После выполнения примера будет выполнен расчёт задачи моделирования. Если при расчёте возникли ошибки в арифметических операциях, то в консоль будет выведено соответствующее сообщение.
См. также: