IMatrixChangesInfo.ItemID

Синтаксис

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(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
        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(0Then
        MatrEx.ApplyChanges(False);
    Else
        MatrEx.RevertChanges(11);
    End If;
    //...
    //Дальнейшая работа с матрицей
    //...
End Sub UserProc;

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

См. также:

IMatrixChangesInfo