Procedure: String;
Свойство Procedure определяет пользовательскую функцию.
Для выполнения примера предполагается наличие в репозитории алгоритма расчёта с идентификатором ALGORITHM и модуля с идентификатором MODULE. В модуле должна содержаться функция с наименованием «Func».
Добавьте ссылки на системные сборки: Algo, Metabase. Также добавьте ссылки на сборки, которые необходимы для работы с алгоритмами расчёта.
Sub UserProc;
Var
MB: IMetabase;
Descr, MObjAlgo: IMetabaseObjectDescriptor;
BlockFunc: ICalcFunc;
Algo, CalcObject: ICalcObject;
List: ICalcObjectsList;
CalcAlgo: ICalcAlgorithm;
ObjectType: IMetabaseCustomClass;
Begin
MB := MetabaseClass.Active;
// Получим алгоритм расчёта
MObjAlgo := MB.ItemById("ALGORITHM");
Algo := CalcObjectFactory.CreateCalcObject(MObjAlgo , True);
CalcAlgo := Algo As ICalcAlgorithm;
// Зададим тип объекта - блок функций
ObjectType := GetMetabaseHelper.GetCustomClassByEnum(BPClasses.Func_Block);
Descr := GetMetabaseHelper.CreateObjectDescriptor(ObjectType.ClassId, ObjectType.Name, "", CalcAlgo.Descriptor, False, False, Null, True);
// Создадим блок функций
CalcObject := New CalcFuncClass.Create(Descr);
BlockFunc := CalcObject As ICalcFunc;
// Зададим модуль, который содержит функцию
BlockFunc.Assembly := MB.ItemById("MODULE");
// Зададим функцию, которая будет выполняться при расчёте блока
BlockFunc.Procedure := "Func";
// Зададим дополнительное значение параметра
BlockFunc.SimpleParamValues := "10289";
// Проверим синтаксис
If BlockFunc.IsValid = False Then
// Выведем сообщение об ошибке
Debug.WriteLine(BlockFunc.ErrorInfo.ErrorMessage);
Else
// Сохраним блок функций
CalcObject.SaveObject;
End If;
// Получим список объектов алгоритма расчёта
List := CalcAlgo.Items;
// Добавим созданный блок функций
List.Add(CalcObject);
// Сохраним изменения в алгоритме расчёта
CalcAlgo.SaveObject;
End Sub UserProc;
В результате выполнения примера в алгоритме расчёта будет добавлен блок функций с заданными настройками. В консоль будет выведено сообщение об ошибке, если параметры функции заданы неправильно.
См. также: