Работа с данными справочников

Для получения данных справочника необходимо открыть соответствующий объект репозитория и полученный экземпляр привести к интерфейсу IDimInstance. IDimInstance - основной интерфейс, предоставляющий возможности по работе с элементами справочника, по работе со значениями определенных атрибутов, индексов, уровней справочника и работе с отметкой справочника.

Var
    MB: IMetabase;
    DimInst: IDimInstance;
Begin
    MB := MetabaseClass.Active;
    DimInst := MB.ItemById("Dim_1").Open(NullAs 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(NullAs IDimInstance;
    Elements := DimInst.Elements;
    For Elem := 0 To Elements.Count - 1 Do
        Debug.WriteLine("Идентификатор: " + Elements.Id(Elem) + " ;Наименование: " + Elements.Name(Elem));
    End For;

В данном коде для всех элементов справочника осуществляется вывод значений атрибутов Идентификатор и Наименование.

Для работы с элементами, объединенными по какому-либо признаку (элементы одного уровня, элементы одного блока), используются различные свойства интерфейса IDimElements:

При работе с элементами, объединенными по какому-либо признаку, осуществляется работа не с коллекцией, а с массивом элементов. Для работы с массивом элементов предназначен интерфейс IDimElementArray. В зависимости от того, по какому признаку объединены элементы, используются разные свойства для получения массива элементов:

Индексация элементов в массиве может не совпадать со сквозной индексацией элементов в справочнике. Для получения соответствия используя свойство 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(NullAs 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;

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

См. также:

Введение