ComposeElement(Source: Integer; Elements: Array): Integer;
Source - индекс источника составного справочника, которому принадлежит элемент.
Elements - массив индексов элементов-источников. Размерность массива определяется числом фиксированных измерений источника Source.
Метод ComposeElement возвращает индекс элемента составного справочника по его источникам.
Если элемент не найден, то метод возвращает значение «-1».
Для выполнения примера предполагается наличие в репозитории виртуального куба с идентификатором «Virt_Cube».
Sub UserProc;
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 UserProc;
После выполнения примера будет получен составной справочник виртуального куба. В консоль среды разработки будет выведено наименование источника данных и элементов фиксированных измерений источника, которые использовались при составлении наименования указанного элемента составного справочника.
См. также: