張前程
北京青年政治學院,北京 100102
FastReport在通用報表模塊模型中的應用—通用報表模型的設計
張前程
北京青年政治學院,北京 100102
本文簡要介紹了FastReport報表組件,設計并實現了一個通用報表模塊模型,此模型允許系統開發者或者系統管理員在不更改系統源代碼的前提下對系統中的報表進行增加或者修改,并允許最終用戶在打印輸出時控制報表的數據和輸出格式。此模型不依賴具體的應用,具有通用性,可以應用于其他的管理信息系統。
FastReport;報表;管理信息系統
隨著信息技術的發展,管理信息系統的應用范圍越來越廣泛,作為管理信息系統的一個重要組成部分,報表模塊的功能和作用不容忽視。一般來說,報表的功能主要有兩類:一是將管理信息系統中的數據以票據形式輸出,作為交易或其他活動的憑證;二是將管理信息系統中生產層、市場層等管理活動過程中的原始數據經過信息加工后轉換成有用信息以表格、圖形等各種形式輸出,提供給系統使用者,為決策者做出正確決策提供支持。
筆者基于FastReport設計了一個通用報表模塊模型,此模型能夠滿足不同系統不同用戶的需求,允許系統開發者或者系統管理員在不更改系統源代碼的前提下對系統中的報表進行增加或者修改,并允許最終用戶在打印輸出時控制報表的數據和輸出格式,十分靈活。模型成功應用于我們開發的一套電費管理信息系統中,取得了預期的效果。此模型不依賴具體的應用,具有通用性,可以應用于其他的管理信息系統。
不同單位不同應用的使用需求具有較大的差異,最終用戶在很大程度上是以生成系統報表的方便性和靈活性兩個指標來評價系統的成功與否。對于管理信息系統的設計者和開發者來講,需要選擇一個簡單易用并能夠滿足最終用戶需求的報表組件。
FastReport是高彈性的報表設計器,用于報表的數據可以從任何類型的數據源獲取,FastReport不僅包含最終用戶更改報表設計的能力,而且能夠適應查詢和數據庫的變化。另外,FastReport還包含自己的腳本語言,讓應用程序和最終用戶能夠更容易地改變報表。
FastReport包含一組方便靈活的報表工具控件:報表引擎、報表設計器、報表預覽控件。FR設計器提供了Text、Band、Picture、SupReport及Barodoe等對象,同時內嵌強大的類Pascal腳本語言解釋程序,用戶可以任意使用這個設計器,只需使用鼠標就可以創建大多數報表。
使用FastReport設計報表時至少要用到兩個控件:
1.1 TfrxReport控件是主要的報表生成控件。用于編輯報表,在設計時雙擊這個控件打開報表設計器窗口。這個控件是所有報表都必需的,用于確定報表設計和版面。
1.2 TfrxDBDataSet控件為報表提供數據源連接。一般的管理信息系統報表的數據都是從數據庫中取出來的,使用TfrxDBDataSet可以指定數據源,數據源可以是Ttable或TdataSource。在報表中的每個數據區域必須有一個這個控件的實例。
一個通用的報表模塊允許開發者或者系統管理員能夠在不更改系統源代碼的前提下,往系統中增加一些報表或者修改現有的報表。并允許系統最終用戶在實際打印報表時對進行輸出項目選擇,并對數據進行篩選。一個典型的管理信息系統中,一般包含用戶權限的管理,對于報表模塊來講,不同的用戶角色,其使用報表的權限也是不同的。所以報表模塊也應該具有權限管理的功能。
我們的模型在實現中主要包含兩個表S-Report和S-ReportRight。其中SReport是這個模型的核心數據表,用于實現報表權限管理,該表結構為:Report-ID(報表的ID)、Type-ID(報表類別ID)、ReportName(報表名稱,報表輸出時的標題)、ReportDescription(報表描述,用于向最終用戶介紹此報表的功能和使用方法)、TableName(表、視圖名稱,用于確定從那個表、視圖中取數據)、FieldsName(候選字段名稱列表:可以用于報表中輸出的字段列表)、FieldsAlias(候選字段對應的中文名稱列表:用于在報表中列的標題)、FieldsType(候選字段類型列表,用于報表輸出時對數據進行格式化)、SqlField(用戶選擇的字段列表)、SqlWhere(數據篩選條件)、SqlGroup(數據分組條件)、SqlOrder(數據排序條件)AccountField(需要合計的字段列表)、ColWidt(報表輸出列寬設置)、PaperType(紙張類型選擇)、Orientation(打印方向)、frxFile(報表模板文件)。在實際的應用中,核心數據表中每一條記錄對應一個報表,以Report-ID標識。其中序號5~12的字段用于生成從數據庫中查詢數據的SQL語句。序號14~16用于生成報表結果時的輸出格式的限制。
TableName標明此報表的數據從哪一個數據表(視圖)中查詢,FieldsName是TableName中可以用于報表輸出的所有字段列表,FieldsAlias是FieldsName中所列各個字段對應的中文名稱列表,這個主要是因為數據庫中一般使用英文字符作為字段名稱,而在報表輸出時,各列的標題一般使用中文。FieldsType是FieldsName中所包含的各個字段的類型的標識,用于報表輸出時的格式控制,例如表示價格或者金額的數據,要輸出一個人民幣符號“¥”,并且精確到小數點后兩位。SqlFields用于標識最終用戶選擇了TableName中的哪些字段進行報表輸出。SqlWhere表示TableName中符合什么條件的數據才會被輸出到報表,也是可以讓最終用戶設置的SqlGroup是數據分組條件,用于進行數據分組。SqlOrder用于把從TableName查詢出來的數據排序。AccountField用于標識哪些字段需要進行合計。
S-ReportRight用于實現報表權限管理。報表權限管理數據表結構和各個字段的含義為Report-ID(報表ID)、UserGroup-ID(用戶所屬組ID)。一個屬于用戶組(G1)的用戶(User1)擁有查看輸出一個報表(Report1)的條件是當且僅當在報表權限管理數據表中存在一條記錄(Report1,G1)。
在一個典型的報表使用過程中,用戶進入報表選擇界面,此界面上顯示了當前用戶擁有操作權限的報表列表,并按報表類別分類列出。用戶選擇任一報表,界面上列出此報表的標題(ReportName)和描述(ReportDescription)。用戶確認之后,根據此報表對應的S-Report中的記錄,生成一個SQL語句,并從數據庫中獲取數據,并將數據顯示在報表打印界面中,在此界面上,用戶可以進行數據列選擇、數據篩選、紙張選擇、打印方向設定、輸出列寬設定等各項操作,這些操作的結果會保存到S-Report表中,以避免用戶下次打印的時候重新設定。用戶的這些操作將導致數據查詢SQL語句的變化,報表打印界面將使用新的SQL語句查詢數據并顯示。之后在用戶進行報表打印之前,系統根據SReport中frxFile字段打開報表模板文件,并使用查詢出來的數據進行報表生成。
[1]張向群,張一品.基于FastReport組件的復雜報表的設計與實現[J].許昌學院學報,2005(9)
[2]葛濤.Delphi中運用FasReport設計和制作報表[J].微型電腦應用,2004(3)
10.3969/j.issn.1001-8972.2011.24.043