Сборка Algo предназначена для работы с расширением «Алгоритмы расчёта». Программирование на Fore с использованием данной сборки заключается в последовательной настройке алгоритма расчёта.
Перед началом работы с алгоритмом расчёта:
Убедитесь, что установлено расширение «Алгоритмы расчёта».
В среде разработки добавьте ссылки на системную сборку Algo и пользовательскую сборку «Ядро алгоритма расчёта», которая содержится в компоненте «Алгоритмы расчёта»:
После выполнения действий будут доступны классы и прикладные функции пользовательской сборки «Ядро алгоритма расчёта» для начала работы с алгоритмом расчёта.
Для начала работы с алгоритмом расчёта:
Получите объект репозитория типа «Алгоритм расчёта показателей» с помощью класса CalcObjectFactory и прикладной функции CreateCalcObject, которые реализованы в пользовательской сборке «Ядро алгоритма расчёта».
Синтаксис функции CreateCalcObject:
CreateCalcObject(descr: IMetabaseObjectDescriptor, [OpenForEdit: Boolean = true]): ICalcObject;
Параметры:
descr. Объект репозитория;
OpenForEdit. Разрешение или запрет редактирования объекта репозитория.
Приведите полученный объект к интерфейсу ICalcAlgorithm.
Пример получения алгоритма расчёта с идентификатором ALGORITHM на редактирование:
Sub UserProc;
Var
MB: IMetabase;
MObj: IMetabaseObjectDescriptor;
Algo: ICalcObject;
CalcAlgo: ICalcAlgorithm;
Begin
MB := MetabaseClass.Active;
MObj := MB.ItemById("ALGORITHM");
Algo := CalcObjectFactory.CreateCalcObject(MObj, True);
CalcAlgo := Algo As ICalcAlgorithm;
//...
End Sub UserProc;
В процессе настройки алгоритма расчёта участвуют следующие объекты:
Блок расчёта. Используется для выполнения расчётов по заданным параметрам. Для работы с блоком расчёта предназначен интерфейс ICalcBlock;
Блок агрегации. Используется для выполнения агрегации по заданным параметрам. Для работы с блоком агрегации предназначен интерфейс ICalcAggr;
Блок функций. Используется для расчёта прикладной функции. Для работы с блоком функций предназначен интерфейс ICalcFunc;
Блок линейной оптимизации. Используется для решения задачи оптимального использования ограниченных ресурсов. Для работы с блоком линейной оптимизации предназначен интерфейс ICalcLinearOptimizationBlock;
Блок контроля. Используется для проверки вводимых данных в расширении «Интерактивные формы ввода данных». Для работы с блоком контроля предназначен интерфейс ICalcValidationBlock;
Готовый алгоритм расчёта. Используется для расчёта существующего алгоритма расчёта в текущем расчёте. Для работы с готовым алгоритмом расчёта предназначен интерфейс ICalcAlgorithm.
Настройка алгоритма расчёта осуществляется по схеме:
Для получения подробной информации о взаимодействии интерфейсов сборки обратитесь к разделу «Иерархия сборки Algo».
Для создания объекта алгоритма расчёта:
В среде разработки добавьте ссылку на пользовательский модуль «Модуль взаимодействия с метабазой», который содержится в компоненте «Конструктор бизнес-приложений > Общие компоненты»:
Создадим объект с помощью подключенного модуля:
Sub UserProc;
Var
MB: IMetabase;
Descr,MObjAlgo: IMetabaseObjectDescriptor;
Block: ICalcFunc;
Algo, CalcObject: ICalcObject;
List: ICalcObjectsList;
CalcAlgo: ICalcAlgorithm;
ObjectType: IMetabaseCustomClass;
Begin
MB := MetabaseClass.Active;
// Получим алгоритм расчёта, в который будет добавлен объект
MObjAlgo := MB.ItemById("<идентификатор
алгоритма расчёта>");
Algo := CalcObjectFactory.CreateCalcObject(MObjAlgo, True);
CalcAlgo := Algo As ICalcAlgorithm;
// Зададим тип объекта
ObjectType := GetMetabaseHelper.GetCustomClassByEnum(BPClasses.<тип объекта>);
Descr := GetMetabaseHelper.CreateObjectDescriptor(ObjectType.ClassId, ObjectType.Name, "", CalcAlgo.Descriptor, False, False, Null, True);
// Создадим объект заданного типа
CalcObject := New <класс объекта>.Create(Descr);
// Приведем полученный объект к соответствующему интерфейсу
Block := CalcObject As <интерфейс>;
//...
// Дальнейшая настройка объекта
//...
// Сохраним объект
CalcObject.SaveObject;
// Получим список объектов алгоритма
List := CalcAlgo.Items;
// Добавим
созданный объект в алгоритм
List.Add(CalcObject);
// Сохраним
изменения в алгоритме расчёта
CalcAlgo.SaveObject;
End Sub UserProc;
В подстановках <тип объекта>, <класс объекта>, <интерфейс> задайте взаимосвязанные значения, соответствующие объекту:
Объект | Подстановки | Значения |
Блок расчёта | <тип объекта> | Calc_Block |
<класс объекта> | CalcBlockClass | |
<интерфейс> | ICalcBlock | |
Блок агрегации | <тип объекта> | Aggr_Block |
<класс объекта> | CalcAggrClass | |
<интерфейс> | ICalcAggr | |
Блок функций | <тип объекта> | Func_Block |
<класс объекта> | CalcFuncClass | |
<интерфейс> | ICalcFunc | |
Блок линейной оптимизации | <тип объекта> | LinearOptimization |
<класс объекта> | CalcLinearOptimizationBlock | |
<интерфейс> | ICalcLinearOptimizationBlock | |
Блок контроля | <тип объекта> | Validation_Block |
<класс объекта> | CalcValidationBlockClass | |
<интерфейс> | ICalcValidationBlock | |
Готовый алгоритм расчёта | <тип объекта> | Algorithm |
<класс объекта> | CalcAlgorithmClass | |
<интерфейс> | ICalcAlgorithm |
После выполнения действий в алгоритме расчёта будет создан объект с заданными настройками.
Для получения готового объекта алгоритма расчёта и работы с ним:
Получите список объектов алгоритма расчёта с помощью свойства ICalcAlgorithm.Items.
Получите конкретный объект алгоритма расчёта по индексу с помощью свойства ICalcObjectsList.Item.
Приведите полученный объект к интерфейсу соответствующего типа объекта: ICalcBlock, ICalcAggr, ICalcFunc, ICalcLinearOptimizationBlock, ICalcValidationBlock, ICalcAlgorithm.
После выполнения действий будет доступна настройка полученного объекта и работа с ним.
Пример получения готового блока расчёта в алгоритме с идентификатором ALGORITHM:
Sub UserProc;
Var
MB: IMetabase;
MObj: IMetabaseObjectDescriptor;
Algo, CalcBlock: ICalcObject;
List: ICalcObjectsList;
CalcAlgo: ICalcAlgorithm;
Block: ICalcBlock;
Begin
MB := MetabaseClass.Active;
// Получим алгоритм расчёта
MObj := MB.ItemById("ALGORITHM");
Algo := CalcObjectFactory.CreateCalcObject(MObj, True);
CalcAlgo := Algo As ICalcAlgorithm;
// Получим список объектов алгоритма расчёта
List := CalcAlgo.Items;
// Получим блок расчёта
CalcBlock := List.Item(0);
Block := CalcBlock As ICalcBlock;
//...
End Sub UserProc;
Также получение готового блока расчёта приведено в примере для ICalcBlock.StubOut, получение блока линейной оптимизации - ICalcLinearOptimizationBlock.StubCoefficient.
См. также:
Введение в сборку Algo | Интерфейсы сборки Algo | Перечисления сборки Algo