Для выполнения примера предполагается наличие в репозитории модуля с идентификатором "UserDimMod", содержащего в себе макрос для построения дерева элементов вычисляемого справочника. Допустим макрос содержит следующий код:
Sub UserProc;
Var
MB: IMetabase;
MObj: IMetabaseObject;
Params: IMetabaseObjectParams;
Param: IMetabaseObjectParam;
CrInfo: IMetabaseObjectCreateInfo;
UserDim: IUserDimension;
Attrs: IUserDimAttributes;
Attr: IUserDimAttribute;
Orders: IUserDimOrders;
Block: IUserDimBlock;
BlockAttr: IUserDimIndexAttributes;
Levels: IUserDimLevels;
Begin
MB := MetabaseClass.Active;
CrInfo := MB.CreateCreateInfo;
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_USERDIM;
CrInfo.Id := "NewUserDim";
CrInfo.Name := "Новый вычисляемый справочник";
CrInfo.Parent := MB.Root;
MObj := MB.CreateObject(CrInfo).Edit;
//Параметры справочника
Params := MObj.Params;
Param := Params.Add;
Param.Id := "i1";
Param.Name := "Количество главных элементов";
Param.DataType := DbDataType.Integer;
Param := Params.Add;
Param.Id := "k1";
Param.Name := "Количество дочерних элементов";
Param.DataType := DbDataType.Integer;
UserDim := MObj As IUserDimension;
Attrs := UserDim.Attributes;
//Создание аттрибутов
Attr := Attrs.Add;
Attr.DataType := DbDataType.Integer;
Attr.Id := "Id";
Attr.Name := "Идентификатор";
Attrs.Id := Attr;
Attr := Attrs.Add;
Attr.DataType := DbDataType.String;
Attr.Id := "Name";
Attr.Name := "Наименование";
Attrs.Name := Attr;
Attr := Attrs.Add;
Attr.DataType := DbDataType.Integer;
Attr.Id := "Order";
Attr.Name := "Порядок";
Attrs.Order := Attr;
//Сортировка по атрибутам
Orders := Attrs.Orders;
Orders.Add(Attrs.Name, False);
Orders.Add(Attrs.Order, False);
//Один блок
Block := UserDim.Blocks.Add;
//Первичный индекс блока по атрибуту Идентификатор
BlockAttr := Block.Indexes.PrimaryIndex.Attributes;
BlockAttr.Add(Attrs.Id);
//Два уровня для справочника
Levels := UserDim.Levels;
Levels.Add.Name := "Первый уровень";
Levels.Add.Name := "Второй уровень";
//Установка модуля и макроса
UserDim.ForeModule := MB.ItemById("UserDimMod").Bind As IModule;
UserDim.ForeSub := "UserMacro";
(UserDim As IMetabaseObject).Save;
End Sub UserProc;
После выполнения примера в корневом каталоге репозитория будет создан вычисляемый справочник. В справочнике будут созданы три атрибута и один блок, установлен порядок сортировки элементов. В первичный индекс блока будет добавлен атрибут Идентификатор. Будут созданы два уровня справочника и установлен модуль и макрос, осуществляющий построение дерева элементов.
Также для справочника будут созданы два параметра. В случае использования указанного выше макроса для построения дерева элементов, данные параметры будут использоваться для задания количества корневых элементов и количества дочерних элементов для каждого корневого, соответственно.
См. также: