企業動態生產管理報表系統的設計

  一個企業進行信息化建設,其重要目的在於及時、準確地掌握企業的生產經營現狀,根據市場情況制定下一步生產經營方案。企業管理人員往往通過實時的生產經營報表了解各種情況,動態報表的設計與查詢早已人們所重視,目前市面上已出現許多處理報表的套用軟體,並廣為我們熟知和使用,筆者亦從事數據信息工作多年,曾編制多種類型的報表查詢程式,從報表的形式主要可分為共性表和個性表。顧名思義,共性表指一份報表中含有多條數據記錄,它們共用一個相同且固定的表頭;個性表則無固定表頭,由多個數據信息項目分布於整張報表中。對這兩類常用報表的查詢,目前較流行的程式設計方法為:在企業區域網路的內部公用伺服器上建立相應的資料庫,利用asp代碼設計報表查詢程式,並將其放在企業web主頁上供內部查詢使用。這種設計方式的優點在於用戶不需要安裝程式,只要知道本單位的網頁站點即可,查詢操作較為直觀,但也存在不足之處,主要表現為:報表結構設計較繁瑣,難以實現報表樣式緊湊而美觀,報表的可操作性和可維護性不強,報表數據的錄入、載入,以及報表列印都另需設計大量的程式代碼。通過大量查閱網上有關報表設計的資料,在長期的實踐中,筆者摸索出一套較為完善的報表設計方法,並從中選取了幾個較好的控制項,運用vb(亦可用vc++、vfp)編制了一套較為完善的報表查詢程式,現已廣泛套用於所屬企業中,取得了較好的效果,在此將其設計思路與方法介紹給大家,以供參考。

  1、表名稱列表的設計

  根據企業所需報表的分類,建立樹型結構的報表分類表,即各大類報表下細分小類報表,依次到具體的報表名稱,類似windows作業系統中資源管理器中的結構形式,建立“報表名稱信息庫”,其中必需包含的欄位有:

報表代碼 報表名的主關鍵字
主鍵值  樹型結構中的主鍵值
父結點  樹型結構中父結點的鍵值(為空則表示是根結點)
是否存在子結點  樹型結構中是否存在子結點
報表名稱 報表名稱的中文名稱
標題名稱 報表名稱的標題名稱
資料庫代碼 報表所需數據的資料庫代碼
流程庫代碼 報表中部分數據的資料庫代碼
時間欄位名稱 數據表中時間欄位的名稱代碼
時間欄位特徵 指定所需年、月、日的情況,以確定為年報、月報或日報
顯示條件 對按指定的時間查詢出的數據再增加特定的查詢顯示條件
報表類型 表示是共性表或個性表
行高  顯示每行的高度(針對共性表)
是否統計   是否需增加一條對所查數據的統計信息記錄(針對共性表)
數據表數量   所需查詢數據表的數量(針對個性表,為0時需用戶許可權)
數據表位置   所查詢數據表的具體位置(為空則為系統設定的網路路徑)

  程式設計時,在主form視窗中加入windows activex 的treeview控制項,根據報表名稱信息庫中結構關係,在activate過程中給treeview加入各報表名稱結點,並設定各報表名稱的顯示方式。這樣在以後的管理中不需對程式進行任何修改即可任意地增刪報表,調整報表的顯示信息。

  2、共性表的設計

  共性表一般由標題部分、表頭部分、數據信息體三部分構成,其典型式樣如圖1所示(本系統所設計的共性報表之一)。

圖1 共性表示意圖

  設計方法分以下幾點:
(1)根據報表數據內容,設計資料庫(表)的結構,建立資料庫。設計庫(表)結構時應儘量考慮得全面,欄位的類型設定準確,長度充足,所建資料庫應放在網路伺服器中。
(2)報表表頭設計。為了使報表直觀和美觀,表頭設計採用表格形式,經多方面的比較,從網上查到一種新開發的共享註冊軟體——flexcell控制項,該控制項比較適用於表頭設計。

  flexcell是一款美觀、方便、易用的電子表格控制項,可在程式中設定單元格(cell)各種屬性和方法,附帶flexcell表格設計器,提供圖表、列印預覽、列印等功能,不需要excel運行庫支持就可以輸出為excel workbook。使用flexcell控制項,可以方便地製作出非常專業的報表和數據錄入界面。

  建立“表頭信息庫”,每個表頭單元格作為一條記錄,並輸入其各顯示屬性。“表頭信息庫”中包含的欄位有:

報表代碼 報表名的主關鍵字
行號  表頭單元所在行的行號
行高  表頭單元所在行的行高
合併行數 表頭單元所在行需進行的行合併數量,不需合併則為0
列號  表頭單元所在列的列號
列寬  表頭單元所在列的列寬
合併列數 表頭單元所在列需進行的列合併數量,不需合併則為0
單元名稱 單元格內需顯示的文字信息
顯示屬性 單元格內顯示的文字的字號、字型、粗細、前景色、背景色等

(3)報表數據信息體設計。報表數據信息體採用傳統的系統控制項——grid控制項來實現。將查詢結果庫作為grid的數據源,根據表頭所需顯示的信息,設定各顯示欄位的屬性和計算統計方法。

  為了實現對報表數據項進行靈活的處理及對其顯示屬性設計,需根據報表所對應資料庫的庫結構,建立其相應的“查詢信息輔助庫”,其中需包含的欄位有:

報表代碼 報表名的主關鍵字
欄位名稱 顯示欄位的名稱
欄位類型 顯示欄位的類型
欄位長度 顯示欄位的長度
欄位小數位  顯示欄位的小數位長度
顯示順序 顯示欄位的在grid中的顯示順序
統計標識 在匯總記錄中欄位是否需要進行計數、求和、求平均數等操作
計算方法 根據原庫中的有關欄位進行計算處理形成新欄位的方法
顯示屬性 單元格內顯示的文字的字號、字型、粗細、前景色、背景色等

(4)報表數據查詢。通過點擊報表名稱列表中的報表名稱,運行報表查詢程式(只限於報表名稱項即最底端子結點才可,而報表類別項即父結點則不能,或“報表名稱信息庫”中無子節點的記錄),按用戶指定時間(年或年月或日期)查詢網路資料庫(共性表的數據源往往只含一個資料庫),然後根據其“報表名稱信息庫”和“查詢信息輔助庫”來處理查詢結果庫,包括根據顯示條件篩選數據記錄、根據流程庫篩選數據記錄、篩選所需的欄位、重新計算生成新欄位、增加匯總合計記錄及其各欄位的值等處理過程,形成最終的結果庫。

(5)報表生成與顯示。由設定的查詢時間和“報表名稱信息庫”中“標題名稱”來確定報表的標題名稱(caption)。根據“表頭信息庫”來設定報表表頭(flexcell控制項)的顯示屬性,計算其大小,根據系統顯示版面的大小設定其顯示位置。報表數據信息體(grid控制項)中各數據項欄位的顯示屬性由“查詢信息輔助庫”來決定,每列的列寬與表頭對應的列寬相等,行高設為“報表名稱信息庫”中行高值,顯示位置設在表頭正下方,並緊貼表頭,另還需根據系統顯示版面的大小計算其高度,最後在共性表的顯示頁面中顯示出報表。

  3、個性表的設計

  共性表一般只由標題部分和數據信息體(表體)部分構成,表體由提示信息部分和數據部分構成,其典型式樣如圖2(本系統所設計的較為複雜的個性報表之一)所示。

圖2 個性表示意圖

  設計方法分以下幾點:
(1)與共性表一樣,根據報表數據內容,設計資料庫(表)的結構,建立資料庫。要注意對一份比較複雜的個性表,往往需要建多個數據表,其數量由“報表名稱信息庫”中的“數據表數量”來設定。
(2)表體設計使用flexcell控制項。對提示信息部分的設計方法與共性表的表頭設計一樣;數據部分仍在flexcell控制項中顯示,其“查詢信息輔助庫”與共性表有所不同,其中需包含的欄位有:

報表代碼 報表名的主關鍵字
資料庫代碼  對複雜報表中可能含多個資料庫信息,其代碼也各不相同
欄位名稱   顯示欄位的名稱
欄位類型   顯示欄位的類型
欄位長度   顯示欄位的長度
欄位小數位  顯示欄位的小數位長度
行號  所在單元行的行號
行高  所在單元行的行高
合併行數   所在單元需進行的行合併數量,不需合併則為0
列號  所在單元列的列號
列寬  所在單元列的列寬
合併列數 所在單元需進行的列合併數量,不需合併則為0
計算方法   根據原庫中的有關欄位進行簡單計算處理的方法
顯示屬性   單元格內顯示的文字的字號、字型、粗細、前景色、背景色等

(3)報表數據查詢。點擊報表名稱列表中的報表名稱,按指定時間(年或年月或日期)查詢網路資料庫,對複雜個性表的數據源往往有多個資料庫,需根據代碼和資料庫數量結合來查詢各具體的資料庫,然後對各結果庫進行數據記錄篩選和適當的數據項目計算處理,形成最終的結果庫。

(4)報表生成與顯示。報表的標題名稱(caption)設定方法同上。根據“表頭信息庫”來設定提示信息部分的顯示屬性,方法亦同上。數據部分的顯示應分別根據“查詢信息輔助庫”對各結果庫進行處理,顯示屬性的設定方法與提示信息部分的設定方法類似,只是對某些含多條記錄的結果庫,顯示處理時,只增加行號,各欄位列號與第一記錄相同。最後計算flexcell控制項的大小,計算調整其顯示位置,在個性表的顯示頁面中顯示出報表。

  4、系統的其他功能模組設計

(1)數據的安全性與訪問許可權。後台資料庫的選擇可用sql server、oracle、dbf等。用戶訪問後台資料庫時,較常用的方法是進行身份驗證,即在sql連線串中加入用戶名和密碼,為了別於對用戶的管理,本系統設計了用戶信息庫,並對其進行加密處理,對所有普通用戶和特殊用戶對每一類報表設定訪問許可權,這樣就保障了數據信息的安全性和保密性。
(2)數據的錄入、載入(導入)、導出。對報表數據有操作許可權的用戶,可以直接在報表中進行數據修改或新數據的錄入,根據“查詢信息輔助庫”中設定的各數據欄位的對應關係,可按設定的時間載入到網路資料庫中,同時應檢查庫中是否重複。數據導出可存儲為dbf、txt或xls檔案,flexcell控制項本身就有直接導出到excel檔案的功能。
(3)報表的列印。對於共性表可直接設計報表檔案進行列印輸出,亦可套用vb編制與excel的接口程式,將報表導出到excel中列印輸出;對於個性表則可直接利用其列印方法——object.printpreview ()來實現,只是如控制項未註冊,將在輸出的報表中加上“unregisted”的字樣。

  5、結束語
 
  一套完善、系統的應用程式,能較大程度地提高工作效率,方便以後對系統管理與維護工作。本系統套用中只需安裝一次,即可由管理員根據用戶的需要隨時將所需的報表信息添加到查詢界面中,而不必對程式進行任何的修改。