Пользовательская функция в отчете вызывает ошибку
Раздел: FastReport VCL
Добрый день.
Помогите разобраться.
В коде Delphi
регистрирую функцию:
AReport.AddFunction('function GetOtchetID_NS: Integer', sGroupName, '');
описываю в обработчике пользовательских функций:
function TPrintOtchet.ReportFunctionX(const AMethodName: string; var AParams: Variant): Variant;
begin
Result := Null;
if AnsiSameText(AMethodName, 'GetOtchetID_NS') then
begin
Result := 12;
end;
end;
В скрипте отчета использую:
procedure Page1OnBeforePrint(Sender: TfrxComponent);
var
ID_NS: Integer;
begin
ID_NS := [GetOtchetID_NS];
end;
И получаю ошибку:
Could not convert variant of type (Array Variant) into type (Integer)
Но, если эту функцию разместить в frxMemo (отчета), то ошибки нет - отображается 12
Подскажите в чем проблема?
Комментарии
если в скрипте отчета писать:
procedure Page1OnBeforePrint(Sender: TfrxComponent);
var
ID_NS: Variant;
begin
ID_NS := [GetOtchetID_NS];
end;
то работает...
---
еще: не важно как писать при этом ID_NS := [GetOtchetIDNS] или ID_NS := GetOtchetIDNS
---
под отладкой увидел следующее, что функция возвращает в отчет значение
unit: fs_iinterpreter
function TfsSetExpression.GetValue: Variant;
var
i: Integer;
begin
Result := VarArrayCreate([0, Count - 1], varVariant);
for i := 0 to Count - 1 do
if Items[i] = nil then
Result[i] := Null else
Result[i] := Items[i].Value;
end;
действительно создается Array Variant
var
ID_NS: Integer;
procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
ID_NS := GetOtchetID_NS;
end;
также работает если переменную объявить глобально, и задать ей явный тип (Integer)
the magic...
Попробуй код исправить так
if MethodName = 'GETOTCHETID_NS' then
В MethodName имена методов приходят в верхнем регистре.
Спасибо.
Это учтено:
if AnsiSameText(AMethodName, 'GetOtchetID_NS')
Проблема не в коде приложения, а в коде скрипта отчета...
Очень странно: перезапуск Delphi или ПК проблему устранил...
Так и не понял в чем было дело...