Condition: IExpression;
Свойство Condition возвращает условие срабатывания точки останова.
Условие срабатывания точки останова задаётся выражением, которое должно вернуть результат логического типа. Точка данных в выражении определяется ключевым словом «Value». Пример выражения: «Value > 0». Если установлено данное условие, то точка останова будет срабатывать в точках данных, значение которых больше нуля.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором MODEL_SPACE. В данном контейнере должна присутствовать задача моделирования с идентификатором PROBLEM» рассчитывающая модель, содержащую переменную с идентификатором VARABLE.
В примере используется класс MCallback, описание которого приведено в IMsProblemCalculationCallback.OnBreak.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase, Ms.
Sub UserProc;
Var
Mb: IMetabase;
ModelSpaceDescr: IMetabaseObjectDescriptor;
Problem: IMsProblem;
CalcSettings: IMsProblemCalculationSettings;
CallBack: MCallback;
Calculation: IMsProblemCalculation;
Breakpoints: IMsBreakpoints;
Breakpoint: IMsBreakpoint;
DataBreakpoint: IMsDataBreakpoint;
Stub: IVariableStub;
MatrixDs: IMatrixDataSource;
SelSetSource, SelSetDest:IDimSelectionSet;
i: Integer;
Begin
Mb := MetabaseClass.Active;
ModelSpaceDescr := Mb.ItemById("MODEL_SPACE");
Problem := Mb.ItemByIdNamespace("PROBLEM",ModelSpaceDescr.Key).Edit As IMsProblem;
CalcSettings := Problem.CreateCalculationSettings;
CallBack := New MCallback.Create;
CalcSettings.Callback := CallBack;
CalcSettings.FactIncluded := True;
Calculation := Problem.Calculate(CalcSettings);
Breakpoints := Calculation.Breakpoints;
Breakpoints.Clear;
Breakpoint := Breakpoints.Add(MsBreakpointKind.Data);
DataBreakpoint := Breakpoint As IMsDataBreakpoint;
DataBreakpoint.Name := "DataBreakpoint";
Stub := Mb.ItemByIdNamespace("VARABLE",ModelSpaceDescr.Key).Edit As IVariableStub;
DataBreakpoint.Variable:= Stub;
MatrixDs := Calculation.VariableStub(Stub);
SelSetSource := MatrixDs.Execute(Null).Dimensions;
SelSetDest := SelSetSource.CreateCopy;
For i := 0 To SelSetDest.Count - 1 Do
SelSetDest.Item(i).SelectAll;
End For;
DataBreakpoint.Selection := SelSetDest;
DataBreakpoint.Condition.AsString := "Value = Null";
Calculation.Run;
End Sub UserProc;
После выполнения примера для задачи расчёта будет установлена точка останова, срабатывающая, если значение в рассчитываемой точке для переменной VARABLE имеет значение Null.
См. также: