線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3262
推到 Plurk!
推到 Facebook!

有关fastreport报表中金额大写问题

缺席
chamstar
一般會員


發表:24
回覆:36
積分:12
註冊:2004-10-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-23 11:40:02 IP:59.37.xxx.xxx 訂閱
我用fastreport3 作报表时,有一金额合计栏 [SUM(,MasterData1,2)] ,但显示为小写,请教如何才能显示为大写?(我查找了半天都找不到,可能是我查找不得方法,如果本站有,能否告诉我查找方式,实在不好意思)。

function MoneyCn(mmje: Double): string;
const
s1: string = '零壹贰叁肆伍陆柒捌玖';
s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';

function StrTran(const S, s1, s2: string): string;
begin
Result := StringReplace(S, s1, s2, [rfReplaceAll]);
end;
var
S, dx: string;
i, Len: Integer;
begin
if mmje < 0 then
begin
dx := '负';
mmje := -mmje;
end;
S := Format('%.0f', [mmje * 100]);
Len := Length(S);
for i := 1 to Len do
dx := dx Copy(s1, (Ord(S[i]) - Ord('0')) * 2 1, 2) Copy(s2, (Len - i)
* 2 1, 2);
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰',
'零'),
'零拾', '零'), '零角', '零'), '零分', '整');
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零',
'零'),
'零亿', '亿'), '零万', '万'), '零元', '元');
if dx = '整' then
Result := '零元整'
else
Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
end;



procedure Tyingfu.FormCreate(Sender: TObject);
begin
DateTimePicker1.Date:=StartOfTheMonth(Now);
DateTimePicker2.Date:=Now;
frxReport1.AddFunction('function MoneyCn(mmje: Double): String;','Myfunction','小写金额转大写的函数');
end;



function Tyingfu.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;

begin
if UpperCase(MethodName) = UpperCase('MoneyCn') then
Result := MoneyCn(Params[0]);
end;

end.


我将述代码加入后,调用MoneyCn,如果用 MoneyCn([SUM(,MasterData1,2)]) 时,显示结果为 MoneyCn(78160),而不是大写,我测试直接用 [MoneyCn(78160)],就可以出来,不知是何原因

編輯記錄
chamstar 重新編輯於 2007-08-23 17:27:23, 註解 無‧
chamstar 重新編輯於 2007-08-23 17:33:37, 註解 無‧
chamstar
一般會員


發表:24
回覆:36
積分:12
註冊:2004-10-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-24 08:50:03 IP:59.37.xxx.xxx 訂閱
我查了好久,也没查出原因,请帮忙,谢谢!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-24 11:43:32 IP:219.68.xxx.xxx 未訂閱
不是很懂你的意思, 因為轉大寫實作你都有了, 看到最後一行, 我猜想你的問題是在詢問這個問題
一般fr 如果引用function, 前後一定要加[ ], 這樣才不會被fr誤認為是一串文字或變數(Dictionary), 如果是變數原則上是可以(在begin...end之間) x:= x 1; 要做成 [x]:= [x] 1 亦可,
但在TfrMemoView中 function 一定要 [myfunction]來表示, 兩個function 之間還必須空一格, 否則第二個function會被當成文字看待
如 [myfunction1] [myfunction2]
===================引 用 chamstar 文 章===================
我将述代码加入后,调用MoneyCn,如果用 MoneyCn([SUM(,MasterData1,2)]) 时,显示结果为 MoneyCn(78160),而不是大写,我测试直接用?? [MoneyCn(78160)],就可以出来,不知是何原因
編輯記錄
P.D. 重新編輯於 2007-08-24 11:45:18, 註解 無‧
chamstar
一般會員


發表:24
回覆:36
積分:12
註冊:2004-10-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-24 15:26:14 IP:59.37.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
不是很懂你的意思, 因為轉大寫實作你都有了, 看到最後一行, 我猜想你的問題是在詢問這個問題
一般fr 如果引用function, 前後一定要加[ ], 這樣才不會被fr誤認為是一串文字或變數(Dictionary), 如果是變數原則上是可以(在begin...end之間)?? x:= x 1; 要做成 [x]:= [x] 1 亦可,?
但在TfrMemoView中 function 一定要 [myfunction]來表示, 兩個function 之間還必須空一格, 否則第二個function會被當成文字看待
如 [myfunction1]? [myfunction2]
===================引 用 chamstar 文 章===================

我改为 [MoneyCn([SUM(,MasterData1,2)])] ,运行报表时报以下错误:
source file not Found: Fs_iilparser.pas
我点Ignore 略过后又报以下错误
Error in expression 'MoneyCn([SUM,MasterData1)])': Undeclared identifier: 'SUM'

不知是何原因。
系統時間:2024-04-20 1:16:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!