動態報表漫談
什么是動態報表
動態意即變化,動態報表也就是指可以變化的報表。說得更具體一些:也就是報表開發者為報表最終用戶提供的報表是可配置的,是可以進行個性化調整的,一個動態報表相當于一個設計合理的報表模型,不同的報表用戶可以配置出他們最想要的運行方式。當然動態報表的變化要講究一定的規律,提供給最終用戶的操作界面是非常直觀,非常容易操作的。
動態報表主要包括哪些方面
下面列出動態報表的動態變化主要方面,并進行簡單地解釋。
報表數據:數據的動態變化主要有兩個方面,其一,就是數據篩選條件的動態化,也就是報表的查詢條件設置是非常靈活的,報表用戶可以設置出他們需要的各種報表數據查詢條件;其二,報表查看的數據項是可以動態配置的,在開發報表時應將一個報表所有的可選數據項都提供給報表用戶進行選擇,不同的用戶可以根據他們的需要挑選出他們需要的數據項。
報表分析方式:在一個報表上,用戶可以選擇不同的統計方式來生成報表。如一個按期間進行統計分析的報表,可以選定統計期間為:月度、季度、年度等。
報表的顯示外觀:報表的顯示外觀主要指報表文字的字體、報表數據的顯示格式、報表表格線的顯示參數等一切與顯示有關的方面,報表用戶可以配置出他們想要的報表展現格式。
報表的布局:報表開發者可以對報表內容的輸出位置、寬度、高度與顯示順序等進行重新配置。
報表輸出的自適應:要面對不同用戶的報表,必然要面對用戶的不同屏幕顯示分辨率與不同的打印紙張規格。報表必須保證在這些不同的環境下得到理想的輸出結果。
報表配置參數的持久化:指報表用戶對報表設定的配置參數可以進行永久保存,并可以在用戶下次進入報表時再次載入應用。如果一個用戶對某個報表有多種查看方式,最好能夠將用戶的不同配置參數分開保存,這樣就相當于這個動態報表具體化出來多個報表。
以上只是列出動態報表的主要動態變化方面,也不是每個動態報表都會涉及到所有的這些方面,而是應該根據具體情況進行合理的選擇,也有可能上面沒有列出的因素也需要考慮。
開發動態報表會有哪些好處
一般的軟件系統都需要面對不同的用戶,通用產品面對的用戶更是成千上萬,不同的報表用戶對同一報表會有不同的需求。即使是專門定制化的軟件,同一用戶在不同的條件下對報表的需求也會發生變化。怎樣開發出滿足不同用戶需要的報表與怎樣滿足用戶不斷變化的報表需求是一件很重要的工作,也是我們開發的報表系統應該達到的目標。
從上面動態報表的作用可以看出動態報表可以為我們帶來以下好處:
滿足用戶多樣化需求:同一報表可以滿足不同用戶的要求和用戶在不同條件下對報表的不同要求。
前面說過,動態報表是一種報表模型,從一個動態報表中可以具體化出來同一類型的很多報表。舉例來說:對于銷售匯總表,肯定會有多種匯總方式,如:按客戶,按產品,按期間等,只要定義出合理的抽象模型,我們就可以得到不同匯總方式的銷售匯總表。
減少整個報表系統總的開發工作量:雖然開發一個動態報表比通過簡單的拖放方式實現一個具體的報表要復雜得多,但是由此一個動態報表可以具體化出一批報表,同時動態報表給用戶帶來的靈活性是固化報表所不可比擬的。比如在我們經常會開發各種年報表、月報表、日報表等各種按期間統計報表時,這些報表除了統計期間有區別外,其它方面是基本類似的,我們只要開發一個動態報表就可以得到各種按期間統計的報表。
減少整個報表系統的維護工作量:因為報表在最終用戶的手中是可以配置,可以滿足用戶多樣化需求,相當于報表最終用戶對報表有二次開發能力,所以動態報表具有更持久的生命力。
最終減少整個報表系統的復雜度,并且大大增強報表系統開發的可復用度:如果不對報表進行抽象,而是每個具體報表都分開進行實現,勢必需要提供大量的報表,這樣數量眾多的報表勢必增加整個系統的復雜度,同時提供再多的報表也不一定能滿足眾多用戶的不同要求。動態報表相當于一種模型,可以在同一軟件系統中共享,也可以在不同的軟件系統中復用。
為什么說 Grid++Report 非常適合開發動態報表
首先 Grid++Report 的報表模板定義是完全可編程的。Grid++Report 的可視化設計器功能非常完善,全面支持各種通用操作方式,也符合規范的操作習慣。同時 Grid++Report 也提供完備而清晰的編程接口,整個報表模板定義可以通過程序定義出來。也就是說,報表設計器可視化設計出來的報表,用編程的手段一樣可以定義出來。正因為 Grid++Report 是完全可編程定義的,為實現動態報表提供了最基本的實現保障。
僅僅可編程定義報表還不夠,如果編程定義的過程非常繁雜,這樣實現動態報表也不會輕松。下面就來看看 Grid++Report 怎樣輕松實現報表的可編程定義:首先 Grid++Report 的編程模型非常清晰規范,其組件對象模型設計非常合理。其次 Grid++Report 的報表定義核心部分由一個具有超強數據展現能力的明細網格組成,通過動態定義列從而實現整個報表最核心部分的動態變化,列按從左到右的順序排列,只要給列設定合理的寬度,就可以得到合理的報表明細數據輸出,而不用繁瑣的計算每個明細數據項的準確位置。
當然 Grid++Report 獨有的報表查詢顯示功能也為實現動態報表提供了極大的便利,報表的動態輸出結果將更多的是在報表查詢顯示狀態中,有關Grid++Report 獨有的報表查詢顯示功能的更多介紹請參閱《報表查詢顯示功能 - Grid++Report 獨創》
Grid++Report 在報表查詢顯示時可以適應不同的顯示窗口尺寸。為報表內容提供了多種自動排列方式,可以將報表內容設定到合理的相對位置,這樣就可以在動態的顯示條件下得到理想的顯示效果。居中方式指定在水平與垂直方向上保持位置的居中;錨定方式保持報表部件與一個或幾個顯示邊界的固定距離;停靠方式指定報表部件采用怎樣的方式充滿顯示區域的某一邊或整個區域;指定對齊到列與對齊列方式可以讓列之外的報表部件與列始終保持對齊。設定合理的自動布局方式,就可以在不同尺寸的查詢顯示窗口中得到理想的輸出布局,從而適應用戶動態變化的顯示環境。
同樣Grid++Report 的自動布局能力在打印輸出時可以很好地實現同一報表在不同尺寸的紙張上打印,Grid++Report 無論在何種紙張規格上都會讓你得到滿意的打印輸出效果。很多其它的報表構件只能在設計時指定的紙張規格上得到合理的打印輸出結果,如果采用其它規格的紙張打印就不能得到布局良好的輸出。另 Grid++Report 還提供多種打印輸出適應策略:如列的總寬度大于或小于打印區域的寬度,可以自動進行各個列寬的按比例縮放,調整列的總寬度與打印區域的寬度到一樣;如果列的總寬度小于打印區域的寬度,可以指定將所有列水平居中輸出到打印區域;當列的總寬度大于打印區域的寬度,可以實現橫向分頁打印,超范圍的列另起新頁進行輸出,如果存在鎖定列,可以指定是否在新頁中重復輸出鎖定列。
在前面說過動態報表需要動態變化的方面,現在就來說說 Grid++Report 如何幫助報表開發者實現這些方面。
實現報表的顯示外觀的動態變化:因為Grid++Report是完全可編程定義的,只要將用戶配置的外觀參數定義到報表模板定義中,就實現了報表外觀的定義。
實現報表的布局的動態變化:前面已經說過 Grid++Report 的核心由一個有超強數據展現能力的明細網格組成,以及報表部件的多種布局方式,這些都有力地保證了報表可以很好地適應布局的動態變化。Grid++Report專業的可視化設計功能可以幫助報表最終用戶進行報表布局的可視化調整。
實現報表數據的動態篩選:根據報表的數據篩選參數,動態定義 Grid++Report 中報表的記錄集需要的字段。當然報表開發者此時需要根據報表的數據篩選參數動態地去實現向數據源取數功能,一般也就是根據數據篩選條件動態生成查詢數據庫數據的 SQL 語句,有了動態的取數功能,可以用推模式或拉模式向報表提供數據。
實現報表分析方式的動態變化:這里同樣需要報表的可編程定義功能,需要報表開發者通過編程接口將配置好的報表統計分析方式定義到報表中,至于報表的統計分析功能那就是 Grid++Report 的報表引擎的事情了。
報表輸出的自適應:在前面已經敘述了報表在查詢顯示時與報表打印預覽時的自適應能力,這里就不在贅述。報表配置參數的持久化需要報表開發者實現合理的保存與載入功能,建議對于多用戶網絡環境下的報表系統將報表配置參數保存在服務器的數據庫中,這樣便可共享動態報表的配置參數。報表配置參數載入之后就是調用報表的編程接口定義到報表中,這樣用戶的報表配置就可以持久可用。
總結
根據前面的敘述,我們將應用 Grid++Report 開發動態報表的主要任務進行劃分,這樣報表開發者可以更清楚自己應該做那些事情,明白自己的關注點。
Grid++Report 在開發動態報表中完成的主要任務:
提供編程接口實現報表的動態定義。
實現報表屏幕查詢顯示的動態輸出。
實現報表打印及數據導出等報表生成方面的動態輸出。
生成其它一切動態定義的結果。
報表設計器實現報表位置的動態調整。
報表開發者需要完成的主要任務:
實現報表數據篩選界面,動態實現數據源取數(一般為動態生成查詢SQL語句)。
實現報表顯示外觀定義界面及其他配置界面。
調用 Grid++Report 的編程接口動態定義報表。
實現報表動態配置參數的持久化保存與載入應用。
下面就動態報表的開發提一些建議,希望能夠對大家有所幫助。如果一個報表需要動態定義的部分不是太多,也可以考慮用報表設計器可視化定義出報表中固定不變比較框架性的部分,然后根據報表配置參數通過編程定義動態部分。以上提出的有關動態報表的方方面面,報表開發者可以根據一個報表的具體情況,以及開發過程中的其它情況,進行適當地剪裁選用,上面的敘述也不一定很全面很準確,開發者也應根據實際情況進行增補。前面說過,動態報表需要模型化的抽象,抽象必須來源于具體實踐與認真分析,實現動態報表也應該是一個逐步完善與持續改進的過程,只要你有開發動態報表意識,有歸納總結的習慣,Grid++Report一定可以協助你開發出功能強大的動態報表,你也可以在報表開發上積累寶貴的知識與資源,報表開發不應該只是簡單的拖曳排放,不是機械化的簡單重復勞動。希望大家都有一顆動態的心,設計開發實用性高、適應范圍廣、高度可復用的報表系統。
關于 Grid++Report 提供的動態報表例子
Grid++Report 的例子程序中包含了一個簡單的動態報表例子程序,只用VC進行了實現,一來是因為例子要簡單易懂,二來受VC實現界面繁雜的限制,例子程序未免顯得簡單與粗糙了一些,但也基本詮釋了用 Grid++Report 開發動態報表的思想。下面的幾幅圖片來自此例子程序,也許能讓你有個更直觀的認識。

圖一:動態報表例子查詢顯示

圖二:動態報表例子篩選數據對話框

圖三:動態報表例子顯示外觀設置對話框
要了解Grid++Report,請訪問:http://www.rubylong.cn/
銳浪報表Grid++Report源自2003年,經過多年持續不斷發展,是擁有最多軟件開發者的報表工具。易學易用,功能豐富,成熟穩定,支持各種編程環境下的報表開發。
浙公網安備 33010602011771號