Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > FastReport4. Поключение внешней функции


Автор: huminclouds 5.10.2010, 15:15
Подключаю к отчету внешнюю функцию (представление числа прописью). Делаю все, как написано в мануале:
Код

function TForm1.frxReport1UserFunction(const MethodName: string;
  var Params: Variant): Variant;
begin
  if MethodName = 'NumToWords' then
    Result := NumToWords(Params[0]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  frxReport1.AddFunction('function NumToWords(num: String): String');
  frxReport1.ShowReport();
end;

В скрипте отчета, добавляю результат функции NumToWords в Memo:
Код

procedure ReportSummary1OnBeforePrint(Sender: TfrxComponent);                                   
begin
  Memo1.Text := NumToWords(IntToStr(<frxDBDataset1."TOTAL">));
end;

На что при построении отчета вылетает ошибка:
Цитата

Could not convert variant of type (Null) into type (OleStr)

Функция в Delphi работает на ура. Подскажите, пожалуйста, в чем причина ошибки.

Автор: Frees 6.10.2010, 06:42
Код

Memo1.Text := NumToWords(VarToStr(<frxDBDataset1."TOTAL">))

?

Автор: huminclouds 6.10.2010, 07:33
Ах, если бы все было так просто... Но дело совсем не в этом. Функция принимает параметр без ошибок. Ошибка возникает как раз на выходе. Как видно из текста ошибки, функция возвращает Null-значение независимо от параметра.

Автор: huminclouds 6.10.2010, 08:25
Невнимательно я просто мануал проштудировал. 
Цитата

Имя метода должно быть в верхнем регистре
Код

function TForm1.frxReport1UserFunction(const MethodName: string;
  var Params: Variant): Variant;
begin
  if MethodName = 'NUMTOWORDS' then
    Result := NumToWords(Params[0]);
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)