skvor22
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Нашел свою ошибку. Правильно так: 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', 'Дополнительные функции', 'Пропись(<Число>)/Возвращает Число прописью')); Потом гадаешь и думаешь почему ничего не получается из примеров. :-\ |