fastreport里面如何显示金额大写 ( 积分: 20 )

  • 主题发起人 主题发起人 mkbss
  • 开始时间 开始时间
M

mkbss

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥大姐,在fastreport里面如何显示金额大写,用什么函数可以实现呀
 
放一个变量行吗?
 
貌似不行 需要在程序里面自己写一个金额大写的函数 用计算字节 然后报表里面显示这个计算字节就OK了
 
to skyroom007: 可以详细点吗?金额大写的函数是怎么样的呀
求救呀
 
function MoneyToCharacter(Money:real):string;
//数字转换为中文大写
var
temp:string;
resu:string;
i,j:integer;
len:integer;
Num:array[0..9] of string;
A:array[0..13] of string;
begin
Num[0]:='零';
num[1]:='壹';
Num[2]:='贰';
num[3]:='叁';
Num[4]:='肆';
num[5]:='伍';
Num[6]:='陆';
num[7]:='柒';
Num[8]:='捌';
num[9]:='玖';
a[0]:='分';
a[1]:='角';
a[2]:='元';
a[3]:='拾';
a[4]:='佰';
a[5]:='仟';
a[6]:='万';
a[7]:='拾';
a[8]:='佰';
a[9]:='仟';
a[10]:='亿';
a[11]:='拾';
a[12]:='佰';
a[13]:='仟';
temp:=trim(inttostr(round(money*100)));
len:=length(temp);
resu:='';
if (len>13) or (len=0) then
begin
exit;
end;
for i:=1 to lendo
begin
j:=strtoint(copy(temp,i,1));
resu:=resu+num[j]+a[len-i];
end;
result:=resu;
end;
调用这个就OK了
 
to skyroom007,谢谢你的答复。
小弟还是有些不明白,memo1的内容是sum(<frxDBDataset1.&quot;Amount&quot;>),现在memo2要显示的是memo1的金额大写,要怎么控制呢
谢谢
 
Memo2.text:=MoneyToCharacter(sum(<frxDBDataset1.&quot;Amount&quot;>));
 
to skyroom007,谢谢你的答复。
小弟我运行时,出现错误提示:undeclared indentifier:'SUM'
为什么会这样呀
求救呀
 
放一个变量,这个变量是转成大写以后的,这样不就行了吗
 
to 李详鹏:变量转成大写怎么实现呀
 
不就是用上面的函数啊~~~~~~!!!!!!
 
一步步教你如何在fr中添加自定义的函数,
1、打开FR目录下的fr_Calss.pas文件,然后找到
constructor TfrStdFunctionLibrary.Create
看到一个个系统原带函数名称没? 看到了就依样写上一句 Add('AMTINWORD');
然后往下快到End附近的时候,看到添加入口的语句没?
加上一句
AddFunctionDesc('AMTINWORD', '金额大写', 'AmtInWord(<Number>)/返回金额的中文大写.');
这样到时在报表设计器里面就可以看到 有一个金额大写的分类,里面有AMTINWORD函数。
2、找到procedure TfrStdFunctionLibrary.DoFunction(FNo: Integer;
p1, p2, p3: Variant;
var val: Variant);
过程
在 Case语句里面加上一句,注意,语句的CASE入口“22” 是 上面的 Add('AMTINWORD')的ItemIndex号码,从0开始数数看,是不是22,否则改成正确的。
22: Val := AmtInCnWord(frParser.Calc(p1));

3、在FR_Utils.pas单元中添加上下面的函数,函数的内容随便你写了。楼上仁兄的就可以。
Function AmtInWord(Num:Double):String;

以上是在FR中添加系统函数的做法,也是终极解法,其他在程序中自定义函数的方法与传变量的做法都有一定限制。
 
TO Levi
你的写法就是以后程序都不用写刚刚那个大写转换函数了,直接在FR里面定义好 相当于给FR加了这么一个函数 以后要显示大学直接调用这个就OK了啊 这个倒是很方便的方法啊 ~~嘿嘿 学习一下
 
to levi兄,小弟按照你的方法试了一次,发现在fr_Calss.pas文件里,没有constructor TfrStdFunctionLibrary.Create这个函数,也没有找到这个procedure TfrStdFunctionLibrary.DoFunction(FNo: Integer;
p1, p2, p3: Variant;
var val: Variant);
过程
倒是在frxClassRTTI.pas这个文件中找到constructor TFunctions.Create;入口,但是无法按照你的方法进行,是我的方法不对吗
谢谢
 
估计你的是3.x版,你在fr_Class文件里,查找一下系统的函数,像 SUM, Yearof等,应该可以找到系统函数位置的,
你找到的Rtti文件,从名字上判断是FR读控件资源的,所以不是需要的文件。
 
//这是我正在用的:
function tobig(str:string):string;
var
i,nPos:integer;
currstr,newstr,tmpstr,counstr:string;
begin
newstr:='分';
nPos:=pos('.',str);
if nPos=0 then
str:=str+'.00' else
if length(str)-nPos=1 then
str:=str+'0';
nPos:=pos('.',str);
tmpstr:=leftstr(str,nPos-1)+copy(str,nPos+1,2);
for i:=length(tmpstr)do
wnto 1do
begin
case strtoint(copy(tmpstr,i,1)) of
0:
currstr:=' 零 ';
1:
currstr:=' 壹 ';
2:
currstr:=' 贰 ';
3:
currstr:=' 叁 ';
4:
currstr:=' 肆 ';
5:
currstr:=' 伍 ';
6:
currstr:=' 陆 ';
7:
currstr:=' 柒 ';
8:
currstr:=' 捌 ';
9:
currstr:=' 玖 ';
end;
newstr:=currstr+newstr;
case length(tmpstr)-i+1 of
1:
counstr:='角';
2:
counstr:='元';
3:
counstr:='拾';
4:
counstr:='佰';
5:
counstr:='仟';
6:
counstr:='万';
7:
counstr:='拾';
8:
counstr:='佰';
9:
counstr:='仟';
10:
counstr:='亿';
11:
counstr:='拾';
12:
counstr:='佰';
13:
counstr:='仟';
14:
newstr:='Sorry!';
end;
if i>1 then
newstr:=counstr+newstr;
end;
Result := newstr;
end;
 
www.delphifans.com上有的
 
to 雪狐狸,
这个函数在fastreport里面如何调用呀?
因为合计金额是sum(frxDBDataset1.&quot;Amount&quot;)
调用tobig(sum(frxDBDataset1.&quot;Amount&quot;))会有错误出现呀
 
接受答案了.
 
頂一下。不錯。以後會用到的。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部