Выбор пользовательской функции

Функция определяет, каким образом будет выполняться расчёт блока. Функция должна быть написана в модуле Fore и иметь следующую сигнатуру:

Public Function <название функции>([<дополнительные параметры>,]Paramarray parameters: Array Of Variant): Variant;

Где:

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

Результат функции можно вывести в консоль среды разработки или использовать его с помощью интерфейса ITsCalculationContext. В процессе расчёта алгоритма результат функции не используется.

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

Выбор пользовательской функции выполняется на странице «Параметры блока» в мастере редактирования блока функции:

Для выбора пользовательской функции:

  1. Выберите модуль с функцией или сборку, содержащую модуль с функцией, в раскрывающемся списке «Модуль». Модуль или сборка должны быть написаны на языке Fore. Для просмотра выбранного модуля или формы в среде разработки нажмите кнопку «Открыть».

Совет. Для создания модуля, содержащего требуемую сигнатуру функции, нажмите кнопку «Создать». Будет открыт диалог, в котором выберите место хранения модуля и задайте его наименование и идентификатор. После этого модуль будет открыт в среде разработки.

  1. Выберите пользовательскую функцию в раскрывающемся списке «Функция». В списке содержатся только те функции модуля, которые имеют требуемую сигнатуру.

  2. Если в сигнатуре функции определены константные пользовательские параметры, то задайте их значения в поле «Дополнительные значения параметров». Если параметров несколько, то их значения приводятся через запятую. Строковые параметры приводятся в кавычках.

  3. Проверьте правильность задания параметров функции с помощью кнопки «Проверить синтаксис». Если всё настроено верно, то будет отображено соответствующее сообщение, в обратном случае - сообщение об ошибке.

В результате будет выбрана пользовательская функция, рассчитываемая блоком.

Пример пользовательской функции

Пример выполняет команду СУБД, ключ которой передаётся в качестве константного пользовательского параметра. Команда СУБД содержит параметры, идентификаторы которых совпадают с идентификаторам справочников, используемых в качестве параметров блока функции.

Для выполнения примера добавьте ссылки на системные сборки: Db, Dimensions, Metabase, Ui.

Public Function callDBCommand(Command: Integer; Paramarray parameters: Array Of Variant): Variant;
Var
    Desc: IMetabaseObjectDescriptor;
    ComInst: ISQLCommandInstance;
    i: integer;
    Prms: IMetabaseObjectParamValues;
    Prm: IMetabaseObjectParamValue;
    Sel: IDimSelection;
Begin
    
// Выполним действия, если выдан диалог подтверждения с заданным сообщением
    If WinApplication.ConfirmationBox("Выполнение расчёта может занять продолжительное время. Продолжить?"Then
        
// Получим команду СУБД
        Desc := MetabaseClass.Active.Item(Command);
        
// Создадим копию параметров команды СУБД с пустыми значениями
        Prms := Desc.Params.CreateEmptyValues;
        
// Заполним копию параметров команды СУБД значениями параметров из блока
        For i := 0 To parameters.Length - 1 Do
            
// Получим значение параметра блока функции 
            Sel := parameters[i];
            
// Выведем в консоль значение параметра
            Debug.Writeline(Sel.ToString);
            
// Получим параметр команды СУБД по идентификатору справочника, используемого в качестве параметра блока
            Prm := Prms.FindById(Sel.Dimension.Ident);
            
// Присвоим значение параметра блока значению параметра команды СУБД
            If Prm <> Null Then
                Prm.Value := Sel.ToVariant;
            
End If;
        
End For;
        
// Откроем команду СУБД с полученными значениями параметров из блока
        ComInst := Desc.Open(Prms) As ISQLCommandInstance;
        
// Запустим команду СУБД на выполнение
        ComInst.Execute;
    
End If;
    
Return 0;
End Function callDBCommand;

После выполнения функции будет запущено выполнение команды СУБД с параметрами, значения которых были получены из блока функции. В консоль будут выведены значения полученных параметров.

См. также:

Начало работы с расширением «Алгоритмы расчёта» в веб-приложении | Вставка и настройка блоков функций