趙小娟,王才善
(蘭州交通大學(xué)光電技術(shù)與智能控制教育部重點實驗室,蘭州730070)
隨著企業(yè)管理系統(tǒng)的廣泛應(yīng)用,越來越多的企業(yè)趨向于使用電子報表進(jìn)行企業(yè)生產(chǎn)管理。報表作為一種信息統(tǒng)計和分析的重要手段,已成為信息系統(tǒng)的重要組成部分之一,而中國式報表的復(fù)雜性使得一些報表軟件無法直接應(yīng)用,如何將數(shù)據(jù)進(jìn)行統(tǒng)計生成到報表中去,特別是生成到Excel電子表格中,就成為管理系統(tǒng)軟件開發(fā)經(jīng)常遇到的問題。本文結(jié)合洛陽石化鐵路運輸調(diào)度管理系統(tǒng)報表的設(shè)計,給出一個在.NET平臺上,使用Orcal數(shù)據(jù)庫和Excel開發(fā)報表應(yīng)用的實例,從而提出一種基于Excel的報表開發(fā)方案。
報表生成系統(tǒng)能及時、準(zhǔn)確的反應(yīng)企業(yè)實時的生產(chǎn)狀況及現(xiàn)場等數(shù)據(jù)信息,方便企業(yè)管理。構(gòu)成企業(yè)報表的基本要素有報表數(shù)據(jù)、報表格式和報表輸出。
報表數(shù)據(jù)主要分為生產(chǎn)數(shù)據(jù)和管理數(shù)據(jù),生產(chǎn)數(shù)據(jù)是企業(yè)生產(chǎn)過程中產(chǎn)生和采集的實時數(shù)據(jù)和歷史數(shù)據(jù),例如鐵路運輸調(diào)度過程中的車數(shù)、車號、進(jìn)出場時間等信息。管理數(shù)據(jù)是指企業(yè)管理中涉及的數(shù)據(jù),如操作人員的信息、班次及工作考核情況等。
生產(chǎn)報表包括原始數(shù)據(jù)和統(tǒng)計數(shù)據(jù),這些數(shù)據(jù)是各個系統(tǒng)運行時存入數(shù)據(jù)庫的數(shù)據(jù)。報表設(shè)計時應(yīng)考慮以下幾點需求:
(1)對采集到或處理后的數(shù)據(jù)有定期(日、周、旬、月、季度、年)或不定期(階段)展現(xiàn)的要求。
(2)對數(shù)據(jù)進(jìn)行分類、統(tǒng)計求和、求差、求平均值、求最值等計算的要求。
(3)對采集到的數(shù)據(jù)有分組、分欄、排序顯示的需求。
在設(shè)計企業(yè)生產(chǎn)報表的過程中,對報表展現(xiàn)格式也有很高的要求,表1列出了幾個鐵路運輸調(diào)度管理系統(tǒng)中生產(chǎn)報表的格式情況,主要有簡單列表、分組報表、分欄報表和交叉報表等。因此需要設(shè)計的報表系統(tǒng)能夠展現(xiàn)各種各樣的報表格式。
表1 鐵路運輸調(diào)度管理系統(tǒng)生產(chǎn)報表格式
隨著企業(yè)信息化管理系統(tǒng)的應(yīng)用,一般對報表的輸出有以下幾點要求:
(1)支持多種格式輸出。要求報表能以各種不同的文件格式輸出及打印,可以與不同辦公軟件進(jìn)行交互,能夠?qū)С鯡xcel、Pdf、Word等常用格式文件,主要導(dǎo)出Excel文件。
(2)支持各類輸出設(shè)備。要求報表生成系統(tǒng)能夠?qū)蟊磔敵龅礁鞣N設(shè)備,如支持多種打印機,對生成的報表可進(jìn)行精確的打印。
(3)支持導(dǎo)出報表可編輯。要求導(dǎo)出的報表可以進(jìn)行人工編輯修改。
整個報表生成系統(tǒng)的設(shè)計,遵循了軟件設(shè)計的分層結(jié)構(gòu),主要分為3層如圖1。最上層為用戶界面層(UI層),進(jìn)行與用戶的交互、報表的顯示、導(dǎo)出和打印。中間層為業(yè)務(wù)邏輯層,進(jìn)行邏輯運算、報表模板讀取、實現(xiàn)報表數(shù)據(jù)填充。底層為數(shù)據(jù)訪問層和通信層,數(shù)據(jù)訪問層直接和數(shù)據(jù)庫連接,實現(xiàn)數(shù)據(jù)篩選、統(tǒng)計、運算。通信層主要為TCP/IP通信和串口通信,實現(xiàn)數(shù)據(jù)傳輸。
針對報表生成系統(tǒng)的通用性要求,整個系統(tǒng)采用了對象、組件技術(shù)進(jìn)行開發(fā)。實現(xiàn)基于Excel的COM組件,結(jié)合ADO.NET技術(shù)和標(biāo)準(zhǔn)的PL/SQL語句的報表生成方法。
圖1 報表生成系統(tǒng)結(jié)構(gòu)圖
數(shù)據(jù)訪問層采用接口實現(xiàn),主要完成對數(shù)據(jù)庫的操作和與邏輯層的數(shù)據(jù)交互,數(shù)據(jù)訪問層應(yīng)用了ADO.NET組件,通過調(diào)用ADO.NET提供的各種類庫(即Data Providers)方便訪問不同的數(shù)據(jù)庫,實現(xiàn)應(yīng)用程序與數(shù)據(jù)庫的交互。數(shù)據(jù)訪問層通過ADO.NET對象建立與數(shù)據(jù)庫的連接,調(diào)用數(shù)據(jù)庫的存儲過程,提取Excel報表所需的數(shù)據(jù),將其存入建立好的DataSet對象中,此時可以斷開與數(shù)據(jù)庫的連接,將操作得到的DataSet返回給業(yè)務(wù)邏輯層,作為報表的數(shù)據(jù)源。
系統(tǒng)采用C/S和B/S混合架構(gòu)設(shè)計,如圖2。C/S的業(yè)務(wù)邏輯層程序運行在客戶機上,B/S的業(yè)務(wù)邏輯層程序運行在Web服務(wù)器上。
圖2 C/S和B/S混合模型結(jié)構(gòu)圖
業(yè)務(wù)邏輯層主要完成報表數(shù)據(jù)的二次篩選、報表模板讀取和報表數(shù)據(jù)填充,主要功能分為3個部分:傳遞數(shù)據(jù)到數(shù)據(jù)訪問層,接收從數(shù)據(jù)訪問層返回的數(shù)據(jù);獲得從UI層傳來的數(shù)據(jù),傳遞數(shù)據(jù)到UI層;實現(xiàn)數(shù)據(jù)二次處理、邏輯運算等。在邏輯層通過C#.NET創(chuàng)建Excel報表之前,需要在工程中添加一個Excel的COM組件,在應(yīng)用程序中使用其提供的對象、方法開發(fā)Excel報表。邏輯層接收UI層傳遞的參數(shù),調(diào)用數(shù)據(jù)訪問層接口,獲得數(shù)據(jù)源,再通過COM接口庫將數(shù)據(jù)源填充到報表模板中,形成報表文件。如果數(shù)據(jù)訪問層返回的DataSet還不滿足條件,可在邏輯層使用LINQ語句進(jìn)行篩選、統(tǒng)計。例如對篩選出來的數(shù)據(jù)可以使用LINQ語句進(jìn)行分組、統(tǒng)計匯總等。同時邏輯層也控制報表文件的輸出格式,將最后形成的報表文件傳遞到用戶界面層顯示。
模板文件是一個XLT格式的Excel文件,是定義報表生成數(shù)據(jù)時的具體方式。在模板中定義好表頭區(qū)域、報表數(shù)據(jù)區(qū)和表結(jié)尾區(qū)。表頭區(qū)域可以設(shè)置為固定表頭,也可以設(shè)置為動態(tài)表頭,根據(jù)需要進(jìn)行選擇。報表數(shù)據(jù)區(qū)是一個自適應(yīng)區(qū)域,它隨著數(shù)據(jù)的增長自動增長。報表結(jié)尾區(qū)隨著數(shù)據(jù)區(qū)的變化自動向后移動,始終保持在數(shù)據(jù)區(qū)下方。在Excel工作簿中繪制所需的報表樣式,設(shè)置模板格式化信息及公式,設(shè)置好后保存為模板格式,這樣就完成了模板文件的制作。使用模板文件可以確保創(chuàng)建的文件格式保持一致,調(diào)用模板時,系統(tǒng)打開的是一個工作備份,不會破壞模板文件。
用戶界面層是系統(tǒng)與用戶交互的主要部分,提供了數(shù)據(jù)的錄入和顯示。設(shè)計用戶登陸界面,使用戶通過崗位名稱、用戶名和密碼登錄系統(tǒng),在數(shù)據(jù)庫中設(shè)計用戶權(quán)限表和功能模塊表,該表由系統(tǒng)管理員進(jìn)行維護(hù),用戶登錄時,根據(jù)用戶名和崗位在用戶權(quán)限表中查找相應(yīng)權(quán)限,在用戶操作界面顯示相應(yīng)功能模塊。報表生成系統(tǒng)嵌入在統(tǒng)計管理模塊中,報表生成界面顯示用戶可以查詢的報表類型和名稱,提供查詢條件的輸入,比如輸入要查詢的開始時間、結(jié)束時間、股道和班次等。同時判斷輸入條件的合法性,若輸入條件不正確,則給出提示信息。界面上還設(shè)計了相應(yīng)的操作按鈕,提供報表生成、導(dǎo)出、打印、預(yù)覽、格式選擇和退出等按鈕功能。通過觸發(fā)按鈕事件將用戶的操作和選擇以參數(shù)形式傳遞給邏輯層進(jìn)行邏輯處理。同時,用戶界面層也接收邏輯層返回的報表文件,實現(xiàn)報表的展現(xiàn)。
(1)數(shù)據(jù)訪問層實現(xiàn),部分代碼如下:
(2)報表模板調(diào)用,部分代碼如下:
(4)關(guān)閉進(jìn)程、釋放資源:
在填寫Excel過程中可能會有異常發(fā)生,需要使用異常處理機制,給用戶提示信息,采取相應(yīng)措施,使程序可以繼續(xù)運行。
在洛陽石化鐵路運輸調(diào)度管理系統(tǒng)報表生成子系統(tǒng)中,采用了基于Excel的分層模板架構(gòu)的報表設(shè)計思路和方法,主要實現(xiàn)了企業(yè)的各類生產(chǎn)報表的生成、導(dǎo)出和打印如圖3。該系統(tǒng)的應(yīng)用不僅滿足企業(yè)的生產(chǎn)需求,也減輕了操作人員統(tǒng)計報表的工作量,提高了工作效率。
圖3 洛陽分公司鐵路運輸部生產(chǎn)日報
在.NET環(huán)境下,通過運用數(shù)據(jù)庫技術(shù)、模板技術(shù)和組件技術(shù),采用C#語言設(shè)計了基于Excel的分層式模板架構(gòu)的企業(yè)報表生成系統(tǒng),實現(xiàn)了企業(yè)對報表的需求。采用Excel實現(xiàn),使頁面布局設(shè)計靈活,方便用戶的操作,滿足了企業(yè)對報表要求,成功開發(fā)了洛陽石化鐵路運輸調(diào)度管理系統(tǒng)報表生成子系統(tǒng),項目實施后具有很好的執(zhí)行效率和穩(wěn)定性,得到了用戶好評,證明了該方案具有很好的推廣價值和研究意義。
[1] 陳國華. 基于Excel的報表引擎的研究與設(shè)計[J] . 計算機工程與設(shè)計,2004,25(4):526.
[3] 東方人華,鄒敬. Visual C#.NET 范例入門與提高[M] . 北京:清華大學(xué)出版社, 2003.
[4] 吳雷,袁兆山,李超. B/S結(jié)構(gòu)下的復(fù)雜報表實現(xiàn)技術(shù)的研究[J] . 計算機應(yīng)用研究,2006,23(5):83-85.
[5] 吳鉑,吳秀麗,孫樹棟. 基于設(shè)計模式的報表生成組件的設(shè)計與實現(xiàn)[J] . 計算機工程與應(yīng)用,2004, 40(16):113-115,118.
[6] Timothy Zapawa. Excel Advanced Report Development[M] .Publishing House of Electronics Industry, 2006.1.
[7] R. Kishore, H. Zhang, R. Ramesh. Enterprise integration using the agent paradigm: foundations of multi-agent-based integrative business information systems[J] . Decision Support Systems, 2006, 42(1): 48-78.