IMsProblemCalculation.EnableArithmeticErrors

Синтаксис

EnableArithmeticErrors: Boolean;

EnableArithmeticErrors: boolean;

Описание

Свойство EnableArithmeticErrors определяет признак срабатывания события OnError при возникновении ошибок в арифметических операциях в процессе расчёта задачи моделирования.

Комментарии

Допустимые значения:

Событие OnError обрабатывает ошибки при делении на 0.

Пример

Для выполнения примера в репозитории необходимо наличие контейнера моделирования с идентификатором CONTAINER. В контейнере моделирования должна содержаться задача моделирования с идентификатором CONTAINER_TASK.

Добавьте ссылки на системные сборки:

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;

После выполнения примера будет выполнен расчёт задачи моделирования. Если при расчёте возникли ошибки в арифметических операциях, то в консоль будет выведено соответствующее сообщение.

См. также:

IMsProblemCalculation