IAlgorithmCalculationDebug.RecalcPrev

Синтаксис

RecalcPrev;

Описание

Метод RecalcPrev осуществляет повторный расчёт предыдущего рассчитанного объекта алгоритма расчёта.

Комментарии

Для получения предыдущего рассчитанного объекта алгоритма расчёта используйте свойство IAlgorithmCalculationDebug.PrevObject.

Пример

Для выполнения примера предполагается наличие в репозитории алгоритма расчёта с идентификатором ALGORITHM. В алгоритме расчёта должны содержаться хотя бы три объекта для расчёта.

Добавьте ссылки на системные сборки: Algo, Metabase. Также добавьте ссылки на сборки, которые необходимы для работы с алгоритмами расчёта.

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObjectDescriptor;
    Algo, Obj: ICalcObject;
    ObjList, CloneList: ICalcObjectsList;
    CalcAlgo: ICalcAlgorithm;
    CalcDebug: IAlgorithmCalculationDebug;
    i: Integer;
Begin
    MB := MetabaseClass.Active;
    // Получим алгоритм расчёта
    MObj := MB.ItemById("ALGORITHM");
    Algo := CalcObjectFactory.CreateCalcObject(MObj, True);
    CalcAlgo := Algo As ICalcAlgorithm;
    // Получим список объектов алгоритма расчёта
    ObjList := CalcAlgo.Items;
    // Скопируем список объектов алгоритма расчёта
    CloneList := ObjList.Clone;
    // Удалим исключенные из расчёта объекты перед отладкой
    For i := CloneList.Count - 1 To 0 Step - 1 Do
        If Not CalcAlgo.Included(CloneList.Item(i)) Then
            CloneList.Remove(CloneList.Item(i));
        End If;
    End For;
    // Выведем в консоль количество включенных объектов в расчёт алгоритма и их наименование
    Debug.WriteLine("Количество объектов: " + CloneList.Count.ToString);
    For i := 0 To CloneList.Count - 1 Do
        Obj := CloneList.Item(i);
        Debug.WriteLine("- " + Obj.Name);
    End For;
    // Выполним отладку расчёта алгоритма
    CalcDebug := CalcAlgo.Debug(CloneList);
    i := 0;
    While CloneList.Count > 0 Do
        // Рассчитаем следующий объект
        CalcDebug.NextStep;
        // Выполним повторный расчёт второго объекта
        If i = 1 Then
            If CalcDebug.PrevObject <> Null Then
                // Выведем в консоль наименование повторно рассчитанного объекта
                Debug.WriteLine("Повторный расчёт: " + CalcDebug.PrevObject.Name);
                CalcDebug.RecalcPrev;
            End If;
        End If
        i:=i+1;
    End While;
    // Завершим отладку расчёта алгоритма
    CalcDebug.Stop;
End Sub UserProc;

В результате выполнения примера будет произведена отладка расчёта алгоритма, в котором будет выполнен повторный расчёт второго объекта. В консоль будет выведено количество рассчитанных объектов и их наименование, а также наименование повторно рассчитанного объекта, например:

Количество объектов: 3

- Блок контроля

- Блок расчёта

- Блок агрегации

Повторный расчёт: Блок расчёта

См. также:

IAlgorithmCalculationDebug