ICompoundDimensionInstance.ComposeElement

Синтаксис

ComposeElement(Source: Integer; Elements: Array): Integer;

Параметры

Source - индекс источника составного справочника, которому принадлежит элемент.

Elements - массив индексов элементов-источников. Размерность массива определяется числом фиксированных измерений источника Source.

Описание

Метод ComposeElement возвращает индекс элемента составного справочника по его источникам.

Если элемент не найден, то метод возвращает значение «-1».

Пример

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

Sub Main;

Var

MB: IMetabase;

Cube: IVirtualCube;

Sources: IVirtualCubeSources;

CDim: ICompoundDimension;

CSource: ICompoundDimensionSource;

CSel, Sel: IDimSelectionSet;

FixInfo: ICubeDimensionFixInfo;

Fix: ICubeDimensionFix;

Params: IMetabaseObjectParamValues;

CDimInst: ICompoundDimensionInstance;

Instance: IDimInstance;

Elements: IDimElements;

Source, i: Integer;

Arr: Array Of Integer;

Begin

MB := MetabaseClass.Active;

Cube := MB.ItemById("Virt_Cube").Bind As IVirtualCube;

Sources := Cube.Sources;

//Формирование отметки для открытия составного справочника

CDim := Cube.FactDimension As ICompoundDimension;

Sel := (New DimSelectionSetFactory.Create).CreateDimSelectionSet;

CSel := (New DimSelectionSetFactory.Create).CreateDimSelectionSet;

For Each CSource In CDim.Sources Do

Sel.Clear;

//Формирование отметки в соответствии с отметкой фиксированных измерений в источниках

FixInfo := Sources.FindByKey(CSource.Key).FixInfo;

For Each Fix In FixInfo Do

If Fix.Selection.SelectedCount <> 0 Then

Fix.Selection.CopyTo(Sel.Add(Fix.Instance), True);

End If;

End For;

CSel.AddCompound(CSource.Key, Sel);

End For;

//Открытие составного справочника

Params := (CDim As IMetabaseObject).Params.CreateEmptyValues;

Params.FindById("SELECTIONS").Value := CSel;

CDimInst := (CDim As IMetabaseObject).Open(Params) As ICompoundDimensionInstance;

//Получение элементов составного справочника

Instance := CDimInst As IDimInstance;

Elements := Instance.Elements;

//Индекс последнего источника данных

Source := CDim.Sources.Count - 1;

//Последний источник данных

CSource := CDim.Sources.Item(Source);

//Массив индексов элементов для получения индекса элемента составного справочника

Arr := New Integer[CSource.Dimensions.Count];

For i := 0 To CSource.Dimensions.Count - 1 Do

Arr[i] := 0;

End For;

//Индекс элемента в составном справочнике

i := CDimInst.ComposeElement(Source, Arr);

If i <> -1 Then

Debug.WriteLine(Elements.Name(i));

End If;

End Sub Main;

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

См. также:

ICompoundDimensionInstance