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(Null) As 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(0) Then
MatrEx.ApplyChanges(False);
Else
MatrEx.RevertChanges(1, 1);
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;
При выполнении примера будет произведён расчёт результирующей матрицы куба. Для матрицы будет включён режим раздельного хранения исходных и изменённых данных, после этого будет изменено значение в ячейке. Информация об изменениях будет выведена в консоль среды разработки.
См. также: