Для получения данных справочника необходимо открыть соответствующий объект репозитория и полученный экземпляр привести к интерфейсу IDimInstance. IDimInstance - основной интерфейс, предоставляющий возможности по работе с элементами справочника, по работе со значениями определенных атрибутов, индексов, уровней справочника и работе с отметкой справочника.
Var
MB: IMetabase;
DimInst: IDimInstance;
Begin
MB := MetabaseClass.Active;
DimInst := MB.ItemById("Dim_1").Open(Null) As IDimInstance;
Для работы с коллекцией элементов справочника предназначен интерфейс IDimElements. Получить коллекцию элементов можно используя свойство Elements. Коллекция включает все элементы, на которые у пользователя есть права на чтение, без разделения на уровни или блоки. Элементы в коллекции имеют сквозную индексацию от 0 до Count-1. Зная сквозной индекс элемента можно получить все его параметры:
значения всех атрибутов по данному элементу.
параметры уровня, блока, индекса, которым принадлежит элемент.
Var
MB: IMetabase;
DimInst: IDimInstance;
Elements: IDimElements;
Elem: Integer;
Begin
MB := MetabaseClass.Active;
DimInst := MB.ItemById("Dim_1").Open(Null) As IDimInstance;
Elements := DimInst.Elements;
For Elem := 0 To Elements.Count - 1 Do
Debug.WriteLine("Идентификатор: " + Elements.Id(Elem) + " ;Наименование: " + Elements.Name(Elem));
End For;
В данном коде для всех элементов справочника осуществляется вывод значений атрибутов Идентификатор и Наименование.
Для работы с элементами, объединенными по какому-либо признаку (элементы одного уровня, элементы одного блока), используются различные свойства интерфейса IDimElements:
Blocks - элементы, распределенные по блокам справочника.
Levels - элементы, распределенные по уровням справочника.
RootElements - корневые элементы справочника.
При работе с элементами, объединенными по какому-либо признаку, осуществляется работа не с коллекцией, а с массивом элементов. Для работы с массивом элементов предназначен интерфейс IDimElementArray. В зависимости от того, по какому признаку объединены элементы, используются разные свойства для получения массива элементов:
IDimBlockInstance.Elements - элементы блока справочника.
IDimLevelInstance.Elements - элементы уровня справочника.
Индексация элементов в массиве может не совпадать со сквозной индексацией элементов в справочнике. Для получения соответствия используя свойство Element.
Var
MB: IMetabase;
DimInst: IDimInstance;
LvlInst: IDimLevelInstance;
Elements: IDimElements;
ElementArr: IDimElementArray;
i, Elem: Integer;
Begin
MB := MetabaseClass.Active;
DimInst := MB.ItemById("Dim_1").Open(Null) As IDimInstance;
LvlInst := DimInst.Levels.Item("LEVEL1");
//Коллекция всех элементов справочника
Elements := DimInst.Elements;
//Массив элементов первого уровня
ElementArr := LvlInst.Elements;
For i := 0 To ElementArr.Count - 1 Do
//Получение сквозного индекса элемента справочника
Elem := ElementArr.Element(i);
Debug.WriteLine("Идентификатор: " + Elements.Id(Elem) + " ;Наименование: " + Elements.Name(Elem));
End For;
В данном коде будет получен массив элементов, расположенных на указанном уровне справочника. Значения атрибутов Идентификатор и Наименование для всех элементов этого уровня будут выведены в консоль среды разработки.
См. также: