IMatrixWritableProxy.BaseMatix

Синтаксис Fore

BaseMatix: IMatrix;

Синтаксис Fore.NET

BaseMatix: Prognoz.Platform.Interop.Matrix.IMatrix;

Описание

Свойство BaseMatix возвращает матрицу исходных данных объекта-посредника.

Комментарии

Для получения матрицы измененных данных объекта-посредника используйте IMatrixWritableProxy.ChangeMatrix.

Пример Fore

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

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

Sub UserProc;
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    DefDest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    i: integer;
    DestExec: ICubeInstanceDestinationExecutor;
    Proxy, Mx, BaseMatrix, ChangeMatrix: IMatrix;
    Mxe: IMatrixEx;
    Wp: IMatrixWritableProxy;
    Iter: IMatrixIterator;
    Mc: IMatrixCoord;
Begin
    MB := MetabaseClass.Active;
    CubeInst := MB.ItemById("CUBE").Open(NullAs ICubeInstance;
    DefDest := CubeInst.Destinations.DefaultDestination;
    SelSet := DefDest.CreateDimSelectionSet;
    For i := 0 To SelSet.Count - 1 Do
        SelSet.Item(i).SelectAll;
    End For;
    Debug.WriteLine("---------------Неизмененные значения элементов-------------------");
    DestExec := DefDest.CreateExecutorO(CubeInstanceDestinationExecutorOptions.MatrixProxy);
    DestExec.PrepareExecute(SelSet);
    DestExec.PerformExecute(False);
    Proxy := DestExec.Matrix;
    Iter := Proxy.CreateIterator;
    Iter.Move(IteratorDirection.First);
    i := 0;
    While Iter.Valid Do
        Debug.WriteLine(i.ToString + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.Next);
        i := i + 1;
    End While;
    Debug.WriteLine("---------------Добавление нового значения-------------------");
    Mx := DefDest.Execute(SelSet, -1);
    Mxe := Mx As IMatrixEx;
    Wp := Mxe.CreateWritableProxyO(0As IMatrixWritableProxy;
    BaseMatrix := Wp.BaseMatrix;
    Mc := BaseMatrix.CreateCoord;
    Iter := BaseMatrix.CreateIterator;
    Iter.Move(IteratorDirection.First);
    Iter.PutCurrentPos(Mc);
    Mc.Item(0) := 0;
    Mc.Item(1) := 0;
    Mc.Item(2) := 0;
    Mc.Item(3) := 0;
    Iter.Goto(Mc);
    If Iter.Valid Then
        Debug.WriteLine("Ошибка - значение уже существует");
    Else
        Debug.WriteLine("Coord - OK");
    End If;
    Iter.PutCoord(Mc);
    Iter.Value := 100500;
    Debug.WriteLine("Новое значение = " + Iter.Value);
    Debug.WriteLine("---------------Измененные/добавленные значения элементов-------------------");
    Wp.ApplyChanges;
    ChangeMatrix := Wp.ChangeMatrix;
    Iter := ChangeMatrix.CreateIterator;
    Iter.Move(IteratorDirection.First);
    i := 0;
    While Iter.Valid Do
        Debug.WriteLine(i.ToString + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.Next);
        i := i + 1;
    End While;
    Debug.WriteLine("---------------Исходные значения-------------------");
    Wp.RevertChanges;
    Iter := ChangeMatrix.CreateIterator;
    Iter.Move(IteratorDirection.First);
    i := 0;
    While Iter.Valid Do
        Debug.WriteLine(i.ToString + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.Next);
        i := i + 1;
    End While;
End Sub UserProc;

После выполнения примера в матрицу будет добавлен новый элемент. В окно консоли будут выведены: неизмененные значения элементов, добавленные/измененные значения элементов, исходные значения.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    DefDest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    i: integer;
    DestExec: ICubeInstanceDestinationExecutor;
    Proxy, Mx, BaseMatrix, ChangeMatrix: IMatrix;
    Mxe: IMatrixEx;
    Wp: IMatrixWritableProxy;
    Iter: IMatrixIterator;
    Mc: IMatrixCoord;
Begin
    MB := Params.Metabase;
    CubeInst := MB.ItemById["CUBE"].Open(NullAs ICubeInstance;
    DefDest := CubeInst.Destinations.DefaultDestination;
    SelSet := DefDest.CreateDimSelectionSet();
    For i := 0 To SelSet.Count - 1 Do
        SelSet.Item[i].SelectAll();
    End For;
    System.Diagnostics.Debug.WriteLine("---------------Неизмененные значения элементов-------------------");
    DestExec := DefDest.CreateExecutorO(CubeInstanceDestinationExecutorOptions.cideoMatrixProxy As Integer);
    DestExec.PrepareExecute(SelSet);
    DestExec.PerformExecute(False);
    Proxy := DestExec.Matrix;
    Iter := Proxy.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    i := 0;
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(i.ToString() + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.itdNext);
        i := i + 1;
    End While;
    System.Diagnostics.Debug.WriteLine("---------------Добавление нового значения-------------------");
    Mx := DefDest.Execute(SelSet, uinteger.MaxValue);
    Mxe := Mx As IMatrixEx;
    Wp := Mxe.CreateWritableProxyO(0As IMatrixWritableProxy;
    BaseMatrix := Wp.BaseMatrix;
    Mc := BaseMatrix.CreateCoord();
    Iter := BaseMatrix.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    Iter.PutCurrentPos(Mc);
    Mc.Item[0] := 0;
    Mc.Item[1] := 0;
    Mc.Item[2] := 0;
    Mc.Item[3] := 0;
    Iter.Goto(Mc);
    If Iter.Valid Then
        System.Diagnostics.Debug.WriteLine("Ошибка - значение уже существует");
    Else
        System.Diagnostics.Debug.WriteLine("Coord - OK");
    End If;
    Iter.PutCoord(Mc);
    Iter.Value := 100500;
    System.Diagnostics.Debug.WriteLine("Новое значение = " + Iter.Value);
    System.Diagnostics.Debug.WriteLine("---------------Измененные значения элементов-------------------");
    Wp.ApplyChanges();
    ChangeMatrix := Wp.ChangeMatrix;
    Iter := ChangeMatrix.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    i := 0;
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(i.ToString() + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.itdNext);
        i := i + 1;
    End While;
    System.Diagnostics.Debug.WriteLine("---------------Значения элементов после сброса-------------------");
    Wp.RevertChanges();
    Iter := BaseMatrix.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    i := 0;
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(i.ToString() + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.itdNext);
        i := i + 1;
    End While;
End Sub;

См. также:

IMatrixWritableProxy