Схемы отметки

Схемы отметки являются скрытыми дочерними объектами справочника. Каждая схема отметки это объект класса MetabaseObjectClass.KE_CLASS_DIMSELECTIONSCHEMA. Для работы со схемой отметки необходимо соответствующий дочерний объект справочника привести к типу IDimSelectionSchema.

Var
    MB: IMetabase;
    MDesc: IMetabaseObjectDescriptor;
    MDescs: IMetabaseObjectDescriptors;
    SelSchema: IDimSelectionSchema;
Begin
    MB := MetabaseClass.Active;
    MDesc := MB.ItemById("Dim_1");
    MDescs := MDesc.Children;
    Debug.WriteLine("Схемы отметки справочника");
    For Each MDesc In MDescs Do
        If MDesc.ClassId = MetabaseObjectClass.KE_CLASS_DIMSELECTIONSCHEMA Then
            Debug.WriteLine("Наименование: " + MDesc.Name);
            SelSchema := MDesc.Bind As IDimSelectionSchema;
            Debug.WriteLine("Количество примитивов: " + SelSchema.Count.ToString);
        End If;
    End For;

Схема отметки представляет из себя набор примитивов. Каждый примитив реализует определенный алгоритм по установке или снятию отметки элементов. Для схем отметки создано два вида примитивов: статические и динамические. Статические примитивы содержат определенную отметку, сформированную на стадии создания примитива. Динамические примитивы реализуют определенный алгоритм, по которому формируется отметки во время работы со справочником. Итоговая отметка схемы отметки получается после поочередного применения всех примитивов. Любой примитив является наследником типа IDimSelectionSchemaPrimitive. Для схемы отметки доступны следующие виды примитивов:

Var
    MB: IMetabase;
    MDesc: IMetabaseObjectDescriptor;
    Dimension: IDimensionModel;
    CrInfo: IMetabaseObjectCreateInfo;
    Schema: IDimSelectionSchema;
    LvlPrimitive: IDimLevelSelectionPrimitive;
Begin
    MB := MetabaseClass.Active;
    MDesc := MB.ItemById("Dim_1");
    Dimension := MDesc.Bind As IDimensionModel;
    //Информация для создания схемы отметки
    CrInfo := MB.CreateCreateInfo;
    CrInfo.ClassId := MetabaseObjectClass.KE_CLASS_DIMSELECTIONSCHEMA;
    CrInfo.Id := "Schema1";
    CrInfo.Name := "Схема отметки 1";
    CrInfo.Parent := MDesc;
    //Создание схемы отметки со статическим примитивом
    Schema := MB.CreateObject(CrInfo).Edit As IDimSelectionSchema;
    //Указание справочника
    Schema.Dimension := Dimension;
    //Добавление примитива, отмечающего элементы уровня
    //Предполагается наличие в справочнике минимум одного уровня
    LvlPrimitive := Schema.Add(SelectionPrimitiveType.Level) As IDimLevelSelectionPrimitive;
    LvlPrimitive.Included(Dimension.Levels.Item(0)) := True;
    //Сохранение схемы отметки
    (Schema As IMetabaseObject).Save;
    //Создание схемы отметки с динамическим примитивом
    CrInfo.Id := "Schema2";
    CrInfo.Name := "Схема отметки 2";
    Schema := MB.CreateObject(CrInfo).Edit As IDimSelectionSchema;
    Schema.Dimension := Dimension;
    Schema.Add(SelectionPrimitiveType.SelectedAncestors);
    (Schema As IMetabaseObject).Save;

Работа по организации отметки статических примитивов аналогична работе с отметкой справочника и описана в разделе Работа с данными справочников: Отметка справочников.

См. также:

Дополнительные объекты справочников