IInMemManager.AcceptDataFromMatrix

Синтаксис

AcceptDataFromMatrix(MatrixInmem: IMatrix; MatrixFrom: IMatrix; ValueFlag: Integer);

Параметры

MatrixInmem. Текущая матрица файлового кеша, в которую будут сохраняться данные;

MatrixFrom. Матрица, значения которой необходимо сохранить в файловый кеш;

ValueFlag. Точки передаваемой матрицы, которые будут сохранены.

Описание

Метод AcceptDataFromMatrix сохраняет точки передаваемой матрицы в файловом кеше.

Комментарии

Передаваемая матрица может быть матрицей куба или матрицей файлового кеша.

Пример

Для выполнения примера в репозитории предполагается наличие куба с идентификатором CUBE.  В кубе имеется измерение с идентификатором COUNTRY. В репозитории используется файловый кеш.

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

Sub UserProc;
Var
    Mb: IMetabase;
    CubeInst: ICubeInstance;
    DestInst: ICubeInstanceDestination;
    InMem: IInMemManager;
    DimSS: IDimSelectionSet;
    DimS: IDimSelection;
    Matr: IMatrix;
    newValue: Double;
Begin
    Mb := MetabaseClass.Active;
    // Открытие куба
    CubeInst := Mb.ItemById("CUBE").Open(NullAs ICubeInstance;
    DestInst := CubeInst.Destinations.DefaultDestination;
    // Получение отметки, в соответствии с которой осуществляется работа
    DimSS := DestInst.CreateDimSelectionSet;
    For Each DimS In DimSS Do
        If DimS.Dimension.Ident = "COUNTRY" Then
            DimS.SelectElement(0False);
        Else
            DimS.SelectAll;
        End If;
    End For;
    // Инициализация менеджера для работы с кешем
    InMem := New InMemManager.Create;
    // Проверка наличия данных в кеше
    If InMem.CheckHasMatrix(DestInst) Then
        // Получение матрицы с данными
        Matr := InMem.GetMatrix(DestInst.CreateExecutor, DimSS);
        Debug.WriteLine("Кешированная матрица:");
        // Просмотр матрицы
        ShowMatrix(Matr);
    Else
        Debug.WriteLine("Куб не кеширован. Будет произведено кеширование");
        Matr := InMem.PrepareMatrixPartial(DestInst, DimSS); 
        Debug.WriteLine("Кешированная матрица:");
        ShowMatrix(Matr);
    End If;
    // Установка точек матрицы для пометки измененных значений
    Matr.ValueFlag := 1;
    // Присвоение элементам нового значения
    NewValue := Math.Round(Math.RandBetween(110), 2);
    Debug.Writeline("Новое значение: " + NewValue.ToString);
    // Изменение значений в матрице по отметке
    Matr.SetValueBySelection(DimSS, NewValue);
    // Сохранение данных в кеш
    InMem.AcceptDataFromMatrix(Matr, Matr, Matr.ValueFlag);
    // Чтение обновленной матрицы из кеша
    Matr := InMem.GetMatrix(DestInst.CreateExecutor, DimSS);
    Debug.WriteLine("Кешированная матрица после изменений:");
    // Просмотр матрицы
    ShowMatrix(Matr);
    // Сохранение значений из кеша в SQL-источник по переданной отметке
    InMem.SaveToDb(DestInst, DimSS);
End Sub UserProc;

Sub ShowMatrix(Matr: IMatrix);
Var
    Iter: IMatrixIterator;
Begin
    If Matr.Count <> 0 Then
        Iter := Matr.CreateIterator;
        Iter.Move(IteratorDirection.First);
        While Iter.Valid Do
            Debug.Write(Iter.Value + " ");
            Iter.Move(IteratorDirection.Next);
        End While;
        Debug.WriteLine("");
    Else
        Debug.WriteLine("Empty");
    End If;
End Sub ShowMatrix;

При выполнении примера будет проверено наличие данных в кеше, если данных нет, то куб будет кеширован. Затем данные  по отметке будут изменены и сохранены в кеш, после сохранены в SQL-источник. В окно консоли будет выведена кешированная матрица, новое значение и кешированная матрица после изменений.

См. также:

IInMemManager