IMatrixEx.ChangesInfo

Синтаксис

ChangesInfo: IMatrixChangesInfo;

Описание

Свойство ChangesInfo возвращает информацию об изменениях в матрице.

Комментарии

Для того. чтобы фиксировалась информация об изменениях, установите свойству PreserveOriginalValues значение True.

Пример

Для выполнения примера в репозитории предполагается наличие куба с идентификатором CUBE_1.

Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    Dest: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    Sel: IDimSelection;
    Exec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
    MatrEx: IMatrixEx;
    Coord: IMatrixCoord;
    Changes: IMatrixChangesInfo;
    i: Integer;
Begin
    MB := MetabaseClass.Active;
    CubeInst := MB.ItemById("CUBE_1").Open(NullAs ICubeInstance;
    Dest := CubeInst.Destinations.DefaultDestination;
    // Формирование отметки
    Sels := Dest.CreateDimSelectionSet;
    For Each Sel In Sels Do
        Sel.SelectAll;
    End For;
    // Настройки для расчёта
    Exec := Dest.CreateExecutor;
    Exec.PrepareExecute(Sels);
    // Расчёт куба
    Exec.PerformExecute;
    Matr := Exec.Matrix;
    // Режим раздельного хранения исходных и изменённых данных
    MatrEx := Matr As IMatrixEx;
    MatrEx.PreserveOriginalValues := True;
    Matr.ValueFlag := Matr.ValueFlag + 1;
    // Формирование координаты и изменение значения по ней в матрице
    Coord := Matr.CreateCoord;
    For i := 0 To Coord.Count - 1 Do
        Coord.Item(i) := 0;
    End For;
    Matr.Item(Coord) := 300;
    // Просмотр изменений
    Changes := MatrEx.ChangesInfo;
    If Changes <> Null Then
        ShowChanges(Changes);
    Else
        Return;
    End If;
    // Если новое значение больше старого, то применяем изменения, иначе - отменяем
    If Matr.Item(Coord) > Changes.OriginalValue(0Then
        MatrEx.ApplyChanges(False);
    Else
        MatrEx.RevertChanges(11);
    End If;
    //...
    //Дальнейшая работа с матрицей
    //...
End Sub UserProc;

Sub ShowChanges(Changes: IMatrixChangesInfo);
Var
    i, c: Integer;
Begin
    c := Changes.Count;
    For i := 0 To c - 1 Do
        Debug.Write("ItemID: " + Changes.ItemID(i).ToString);
        Debug.Write(". OriginalValue: " + Changes.OriginalValue(i));
        Debug.Write(". OriginalValueFlag: " + Changes.OriginalValueFlag(i).ToString);
        Debug.WriteLine(". State: " + Changes.State(i).ToString);
    End For;
End Sub ShowChanges;

При выполнении примера будет произведён расчёт результирующей матрицы куба. Для матрицы будет включён режим раздельного хранения исходных и изменённых данных, после этого будет изменено значение в ячейке. Информация об изменениях будет выведена в консоль среды разработки.

См. также:

IMatrixEx