Delphi中用FastReport制作報表

報表作爲系統信息的典型輸出形式之一,是大多數應用系統非凡是MIS系統的重要功能。是否具有一個良好的打印功能,往往從一定程度上關系到系統的成敗。Delphi有很強的報表功能,但是它的報表功能還不能滿足我們的需要。于是許多Delphi高手相繼推出了不少優秀的報表控件(模塊),作爲QuickReport的補充,其中FastReport就是一個代表。

FastReport綜合了QuickReport和Re portBuilder的優點,個頭小,速度快,並帶有全部源碼。筆者在開發一個藥品治理系統時,用FastReport2.51成功制作出了和藥品驗收單、藥品調撥單一模一樣的表單式報表。下面給朋友們介紹一下。

FastReport2.51下載地址:http//www.skycn.com/soft/8805.Html。

報表的需求分析

在醫院工作的朋友都知道,藥品入庫時要填寫藥品驗收單,藥房工作人員領取藥品時要填寫藥品調撥單。筆者單位使用的藥品驗收單和調撥單不是專用的,而是通用的商品驗收單和調撥單。與百貨業、電信系統使用的報表不同,它的外形爲條形,每張固定可填五種藥品,內容包括發貨單位、發貨單號、收貨單位、品名、規格、單位、價格、金額等,一式三聯。

綜上所述,我們可以把報表設計的需求歸納如下:

1. 大小爲:長21cm,寬10cm;

2. 每張可以打印5種藥品,表單下面有本頁小計。

3. 多于5種藥品時開始新一張表單的打印,不足5種藥品時要用空行補足。

報表設計

1.打開FastReport的報表設計器,按照圖1設計出“藥品驗收單”。

(圖片較大,請拉動滾動條觀看)

另外,InHJ、OutHJ、CaHj、LineCount這幾個變量分別表示“入庫合計”、“出庫合計”、“差價合計”和“數據總行數”,在程序中將對這幾個變量賦值。

2.按F11鍵,調出對象查看器,選中Band2,在它的OnBeforPrint事件中輸入如下代碼:

begin

if LINE#-1<>0 and LINE#-1 mod 5=0 then

begin

showBandChild1

showBandband1

end

end

代碼中用FastReport的內置函數LINE#取得當前行號,假如滿足條件,就顯示頁頭和Child3,開始新的一張表單。

3.選中Child3,在它的OnBeforPrint事件中輸入如下代碼:

begin

lin=lineCount //在程序中要對該變量賦值

while lin mod 5<>0 do

begin

showbandchild2 //打印空行

inclin

end

showBandchild3

end

這段代碼的用途是假如最後數據行不夠一張表單顯示時,就打印空行。

4. 選中Band3,在它的OnBeforPrint事件中輸入如下代碼:

begin

showbandchild1 //到達報表結束時顯示表單底部的內容

end

5.將報表保存後回到Delphi開發環境。

Delphi編程部分

在Delphi編程部分我們主要完成報表所需參數的傳遞,因爲要在好幾個過程中訪問這些參數,所以要將這幾個參數設爲全局變量:

private

line1line2integer //保存行號

inputXjintemp //入庫小計 ,每5行後清零,下同

outXjoutemp //出庫小計

CajiaXjcatempReal //差價小計

下面是幾個主要過程的代碼清單。

//單張表單數據合並過程

procedure TInputForm.frDBDataSet1NextSender TObject

var

ReCountinteger

begin

ReCount = Adoruku.RecordCount

Incline1// 該變量傳至報表文件控制打印空行

Incline2// 該變量控制清零小計值

if not Adoruku.Eof then

begin

inputXj=inputXj+ADORuku.fieldByName'入庫金額'.AsFloat

outXj=outXj+Adoruku.fieldByName'出庫金額'.AsFloat

CajiaXj=CajiaXj+AdorukuJXCJ.AsFloat

end

//每5行後將小計值清零

if line2 mod 5 = 0 and ReCount>line2 div 55 then

begin

intemp=inputXj

outemp=outXj

Catemp=CajiaXj

inputXj=0

outXj=0

CajiaXj=0

end

//到達數據集末尾時給變量賦值

if Adoruku.Eof then

begin

intemp=inputXj

outemp=outXj

Catemp=CajiaXj

end

end

以上程序在windows 2000/XP+Delphi6.0中調試通過。至此,我們已經完成了藥品驗收單的設計工作,其他的類似報表設計可以參照以上過程。圖2是程序運行時生成的報表預覽效果。

(圖片較大,請拉動滾動條觀看)

Java程序中用JFreeChart制作圖形報表
Java程序中用JFreeChart制作圖形報表
  一、需求分析  我家領導認爲,在是否嫁給我做老婆的問題上,應該有更加科學的決策模型。假如能夠將天天的感情生活量化,且以時間爲X軸,生成數據報表,就可以爲她的決策提供數據支持。 ...查看完整版>>Java程序中用JFreeChart制作圖形報表
 
Java程序中用JFreeChart制作圖形報表
Java程序中用JFreeChart制作圖形報表
  一、需求分析  我家領導認爲,在是否嫁給我做老婆的問題上,應該有更加科學的決策模型。假如能夠將天天的感情生活量化,且以時間爲X軸,生成數據報表,就可以爲她的決策提供數據支持。 ...查看完整版>>Java程序中用JFreeChart制作圖形報表
 
VB6中用DataReport做報表
  首先介紹一下DataReport對象的幾個常用屬性。一是DataSource,用于設置一個數據源,通過該數據源,數據使用者被綁定到一個數據庫;二是DataMember,從DataSource提供的幾個數據成員中設置一個特定的數據成員;三...查看完整版>>VB6中用DataReport做報表
 
VB6中用DataReport做報表
我不是VB熟練工,最近剛剛用VB做完一個程序,其中控制部分沒費太大周折,倒是報表部分頗讓我費了一翻腦筋。在網上找了半天,也沒找到關于VB6的 DataReport的詳細介紹,于是想借鑒"前輩"們的經驗,用Crysta...查看完整版>>VB6中用DataReport做報表
 
VB6中用DataReport做報表
VB6中用DataReport做報表 VB6中用DataReport做報表   首先介紹一下DataReport對象的幾個常用屬性。一是DataSource,用于設置一個數據源,通過該數據源,數據使用者被綁定到一個數據庫;二是DataMember,從...查看完整版>>VB6中用DataReport做報表
 
用Word做Delphi報表輸出工具
摘要:用Word做Delphi報表輸出工具用Word做Delphi報表輸出工具 整理編輯:China ASP   筆者在實際應用中發現,報表的內容一般很少變動,但其字體格式及版式是經常變動的,而且有時用戶爲了某種需要,不想修改數據...查看完整版>>用Word做Delphi報表輸出工具
 
用Word做Delphi報表輸出工具
用Word做Delphi報表輸出工具 整理編輯:China ASP   筆者在實際應用中發現,報表的內容一般很少變動,但其字體格式及版式是經常變動的,而且有時用戶爲了某種需要,不想修改數據庫的真實內容而又要改變報表內容。...查看完整版>>用Word做Delphi報表輸出工具
 
在Delphi中用ADSI創建IIS的虛擬目錄
摘要:在Delphi中用ADSI創建IIS的虛擬目錄先引入類型庫(Project|Import Type Library)adsiis.dll、iisext.dll和activeds.tlb新建一個單元,聲明unit ActiveDs;interface function ADsGetObject(const PathName: Wid...查看完整版>>在Delphi中用ADSI創建IIS的虛擬目錄
 
Delphi中用ICMP探測遠程主機是否存活
Delphi中用ICMP探測遠程主機是否存活2005-03-10 jlbnet網絡通訊中經常需要確定遠程主機是否存活,以決定下一部進行的操作。可以直接使用ICMP協議來實現,但是要考慮許多協議細節,實現起來比較麻煩。Windows 自帶的I...查看完整版>>Delphi中用ICMP探測遠程主機是否存活
 
 
回到王朝網路首頁