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(Null) As ICubeInstance;
DestInst := CubeInst.Destinations.DefaultDestination;
// Получение отметки, в соответствии с которой осуществляется работа
DimSS := DestInst.CreateDimSelectionSet;
For Each DimS In DimSS Do
If DimS.Dimension.Ident = "COUNTRY" Then
DimS.SelectElement(0, False);
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(1, 10), 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-источник. В окно консоли будет выведена кешированная матрица, новое значение и кешированная матрица после изменений.
См. также: