ItemID(Index: Integer): Integer;
Index. Индекс элемента в коллекции изменений.
Свойство ItemID возвращает идентификатор элемента с изменёнными данными в матрице.
Полученный идентификатор может использоваться в свойствах IMatrixChangesInfo.OriginalValueByItemID, IMatrixChangesInfo.OriginalValueFlagByItemID, IMatrixChangesInfo.StateByItemID, методах IMatrixCoord.GotoItemID, IMatrixIterator.GotoItemID.
Для выполнения примера в репозитории предполагается наличие куба с идентификатором 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, id: 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
id := Changes.ItemID(0);
Debug.Write("OriginalValueByItemID: " + Changes.OriginalValueByItemID(id));
Debug.Write(". OriginalValueFlagByItemID: " + Changes.OriginalValueFlagByItemID(id).ToString);
Debug.WriteLine(". StateByItemID: " + Changes.StateByItemID(id).ToString);
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;
При выполнении примера будет произведён расчёт результирующей матрицы куба. Для матрицы будет включён режим раздельного хранения исходных и изменённых данных, после этого будет изменено значение в ячейке. Информация об изменении будет выведена в консоль среды разработки. Обращение к элементу с информацией об изменениях осуществляется по его идентификатору.
См. также: