Автор: skvor22
Дата сообщения: 08.11.2010 16:22
Нашел свою ошибку.
Правильно так:
function TForm2.frxReport1UserFunction(const MethodName: string;
var Params: Variant): Variant;
var
n:string;
begin
if MethodName = 'SUMMAPROP' then
begin
n:= UserUnit.MoneyToString(Params[0],Params[1],Params[2],Params[3]);
Result :=UserUnit.MoneyToString(Params[0],Params[1],Params[2],
Params[3]); // Функция печати прописью
end
end;
procedure TForm7.SpeedButton1Click(Sender: TObject);
begin
Form2.frxReport1.AddFunction('function SUMMAPROP (S:Currency;kpk:boolean;usd:boolean;prop:boolean):string',
'Дополнительные функции', 'Пропись(<Число>)/Возвращает Число прописью');
Form2.frxReport1.DesignReport;
Form2.frxReport1.PrepareReport;
Form2.frxReport1.ShowReport;
end;
В самом отчете в нужном поле ставлю так:[SUMMAPROP(123.5,False,False,False)] где 123.5 - пробные цифры для преобразования, False -управляющие параметры моей функции
DroN_S, читал эту ссылку. Это хорошо если работаешь только на одном ПК, и потом необходимо пере компилировать исходники скриптовой библиотеки FastScript. А если переходишь на новую версию FastScript, то нужно не забыть опять делать изменение скриптовой библиотеки.
В интернете почему-то в основном примеры не для FastReport 4. В примерах везде пишут:
if AnsiCompareText('Пропись', Name) = 0 then val := Propis(Trunc(frParser.Calc(p1)));
frAddFunctionDesc(nil, 'Пропись', 'Дополнительные функции', 'Пропись(<Число>)/Возвращает Число прописью');
а в FastReport 4 нужно
if MethodName = 'Пропись' then Result := MyFunc(Params[0]);
rxReport1.AddFunction('function MyFunc(s: String): String', 'Дополнительные функции', 'Пропись(<Число>)/Возвращает Число прописью'));
Потом гадаешь и думаешь почему ничего не получается из примеров. :-\