1、首先你們看下財務日記賬憑證的紙張格式:數據庫
下面咱們來分析下有幾點要素:一、每頁顯示5行記錄,二、就是在合計處的中文金額大寫了。其餘頁眉頁腳在水晶報表中很容易設計。數組
2、報表設計:在此只是提供一種實現方式,若是有更好的方法實現歡迎交流。ide
如圖構建水晶報表:函數
在頁眉處設計相關固定格式;新建過帳日期組(配合以後的設計能夠將不一樣日期的數據按頁分開);詳細數據中顯示咱們須要的信息;最後新建4個空白格式組頁腳(咱們使用的是SQL2008,在數據庫中查詢到的日記賬數據能夠按照過帳日期分組,爲了實現每頁5行數據的格式套打,咱們須要增長4行空白行,而後分別判斷本頁顯示數據一共有幾行若是不足5行數據則用空白行替代。)this
實現每頁5行數據:首先咱們在查詢數據庫數據的時候爲每行數據增長了一列名爲Num值爲1例如:selsct *,1 Num from XX where XX。(配合水晶報表的彙總功能咱們就能夠知道每行數據的序號,爲了實現每頁5行數據咱們還要增長一個公式字段TotalNum記錄序號而且將序號按照1-5循環顯示 :if ({#RTotal0}-({#RTotal0} \ 5) * 5)=0 then 5 else {#RTotal0}-({#RTotal0} \ 5) * 5)。而後利用TotalNum咱們在每一個組頁角中添加抑制顯示的條件(例如:第4行紅白格式組頁角就判斷若是TotalNum〉4就抑制顯示,第3行紅白格式組頁角就判斷若是TotalNum〉3就抑制顯示,以此類推)。到此咱們爲每一個組的數據每頁顯示5行補足了空白的格式行,下面就是讓數據分頁顯示了,在最後一個組頁腳節專家中勾選在後面新建頁並添加條件,使得最後一組的數據後面不用新建頁我是這樣實現的{getOJDT;1.TransId}<Maximum ({getOJDT;1.TransId}) ;而且在最後組頁腳節專家中勾選以後重置頁碼。這樣咱們格式化顯示數據的工做完成了,只要調整下詳細數據和組頁腳的高度就能夠實現5行數據顯示)。spa
3、下面咱們來實現金額大寫:設計
//定義一個字符數組
stringVar array strNumber := ["零","壹","貳","叄","肆","伍","陸","柒","捌","玖"];3d
//把數值轉換爲字符串
StringVar strValue := CStr({@TotalDebit});
//獲取數值字符串的長度
NumberVar strLength := Length(strValue);blog
//若是有小數點就進行獲取元、角、分的字符串
//在這裏咱們使用mid函數階段金額字符和ToWords函數轉換金額爲大寫,能夠查看幫助文檔
//沒有小數點的話就直接採用ToWords{@TotalDebit})這個值就能夠了文檔
//因爲ToWords函數在轉換角和分的時候不能真確顯示因此角和分咱們要單獨轉換,
//雖然ToWords函數能夠轉換負數可是爲了截取金額中的"-"號 我這裏仍是單獨使用了一個變量存儲"負"這個字符串
if inStr(strValue,".")>0 then
(
StringVar strDec := mid(strValue, inStr(strValue,".")+1,2);
StringVar strB := mid(strDec,1,1);
StringVar strC := mid(strDec,2,1);
);
if InStr (strValue,"-")=0 then
//判斷特殊狀況".00"
if inStr(strValue,".")=1 then
(StringVar strA:="0";)
else
(StringVar strA := mid(strValue,1,inStr(strValue,".")-1);
stringvar strX :="";)
else if InStr (strValue,"-")>0 then
( StringVar strA := mid(strValue,2,inStr(strValue,".")-1);
stringvar strX :="負";);
//判斷特殊狀況"-.00"
if strA="." then strA:="0";
if strB<>"0" or strC <>"0" then
if strA="0" then
if strB="0" then
strX + strNumber[ToNumber(strC)+1] + "分整"
else if strC ="0" then
strX + strNumber[ToNumber(strB)+1] + "角整"
else
strX + strNumber[ToNumber(strB)+1] + "角" + strNumber[ToNumber(strC)+1] +"分整"
else
strX + ToWords(toNumber(strA)) + "元" + strNumber[ToNumber(strB)+1] + "角" + strNumber[ToNumber(strC)+1] +"分整"
else
strX + ToWords(toNumber(strA)) + "元整"
最後的成果如圖: