В этой статье:

Начало работы с алгоритмом расчёта

Создание объекта алгоритма расчёта

Получение готового объекта алгоритма расчёта

Общие принципы программирования с использованием сборки Algo

Сборка Algo предназначена для работы с расширением «Алгоритмы расчёта». Программирование на Fore с использованием данной сборки заключается в последовательной настройке алгоритма расчёта.

Перед началом работы с алгоритмом расчёта:

  1. Убедитесь, что установлено расширение «Алгоритмы расчёта».

  2. В среде разработки добавьте ссылки на системную сборку Algo и пользовательскую сборку «Ядро алгоритма расчёта», которая содержится в компоненте «Алгоритмы расчёта»:

После выполнения действий будут доступны классы и прикладные функции пользовательской сборки «Ядро алгоритма расчёта» для начала работы с алгоритмом расчёта.

Начало работы с алгоритмом расчёта

Для начала работы с алгоритмом расчёта:

  1. Получите объект репозитория типа «Алгоритм расчёта показателей» с помощью класса CalcObjectFactory и прикладной функции CreateCalcObject, которые реализованы в пользовательской сборке «Ядро алгоритма расчёта».

Синтаксис функции CreateCalcObject:

CreateCalcObject(descr: IMetabaseObjectDescriptor, [OpenForEdit: Boolean = true]): ICalcObject;

Параметры:

  1. Приведите полученный объект к интерфейсу 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;

В процессе настройки алгоритма расчёта участвуют следующие объекты:

Настройка алгоритма расчёта осуществляется по схеме:

Для получения подробной информации о взаимодействии интерфейсов сборки обратитесь к разделу «Иерархия сборки Algo».

Создание объекта алгоритма расчёта

Для создания объекта алгоритма расчёта:

  1. В среде разработки добавьте ссылку на пользовательский модуль «Модуль взаимодействия с метабазой», который содержится в компоненте «Конструктор бизнес-приложений > Общие компоненты»:

  1. Создадим объект с помощью подключенного модуля:

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, FalseFalseNullTrue);
    
// Создадим объект заданного типа
    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

После выполнения действий в алгоритме расчёта будет создан объект с заданными настройками.

Получение готового объекта алгоритма расчёта

Для получения готового объекта алгоритма расчёта и работы с ним:

  1. Получите список объектов алгоритма расчёта с помощью свойства ICalcAlgorithm.Items.

  2. Получите конкретный объект алгоритма расчёта по индексу с помощью свойства ICalcObjectsList.Item.

  3. Приведите полученный объект к интерфейсу соответствующего типа объекта: 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