版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、報表模式化開發(fā)手冊V1.0, for NC-V3)朱俊彬、賴宏偉、李媛媛NC-UAP第一章總體介紹 21. 開發(fā)概述 2.1.1 技術型報表與業(yè)務型報表 21.2 一般報表開發(fā)存在的問題 21.3模式化報表開發(fā)思路 22. 應用模型 3.2.1數(shù)據(jù)模型與展現(xiàn)模型 32.2數(shù)據(jù)字典 42.3業(yè)務系統(tǒng)集成 5第二章低開發(fā)難度報表 61. 概述 6.2. 查詢類報表 8.2.1明細報表 82.2 匯總報表 172.3列結構依賴于查詢條件的報表(動態(tài)SQL) 233. 交叉類報表 列向拼接查詢型報表(復合查詢) 313.2列向分支統(tǒng)計型報表( CASE-WHEN ) 363.3 動態(tài)行
2、列交叉型報表(旋轉交叉) 404. 投影類報表 單元格依賴于行列條件的報表(投影交叉) 454.2 半錄入半嵌入型報表(合并查詢) 515. 算法類報表 數(shù)據(jù)加工預備知識 555.2 非投影類占比報表(普通占比) 605.3 投影類占比報表(投影占比) 655.4程序送數(shù)型報表 696. 高級應用 支持穿透的非投影交叉類報表(普通穿透) 736.2 支持穿透的投影交叉類報表(投影穿透) 796.3支持主從連動的報表 846.4支持統(tǒng)計圖表的報表 88第三章高開發(fā)難度報表 921. 基于行業(yè)報表工具開發(fā)的報表 9.21.1 標準報表 921.2分塊填
3、充報表 1042. 基于CELL REPORT工具開發(fā)的報表1112.1 CELL REPORT 工具介紹 1112.2 CELL REPORT 報表 113附錄 1241模式一覽表 1.2.42 查詢引擎FAQ之參數(shù)篇125第一章 總體介紹1. 開發(fā)概述1.1 技術型報表與業(yè)務型報表我們將報表應用劃分為兩種類型, 一類應用的側重點在于出報表所蘊涵的技術, 開發(fā)者(程 序員或實施人員) 通常憑借一定的數(shù)據(jù)庫和編程知識, 基于庫里的業(yè)務數(shù)據(jù), 做出符合用戶 需求的報表展現(xiàn)和輸出, 此類應用稱為技術型報表; 另一類應用則著眼于整個報表生命周期 中各環(huán)節(jié)的管理(包括出表、上報、審核、匯總、發(fā)布等流程
4、), 即把做報表的行為當成一項業(yè)務,對直接開發(fā)者的主要要求在于業(yè)務熟悉程度而非技術,此類應用稱為業(yè)務型報表。前者通常由專業(yè)程序員、 二次開發(fā)人員或技術型實施顧問承擔開發(fā)工作, 早期工具如報表模 板、自定義查詢等均面向此類應用, IUFO 則是后者的代表性產品。本文檔作為集團帄臺 技 術部對外發(fā)布的開發(fā)手冊,主要針對對象為技術型報表。1.2 一般報表開發(fā)存在的問題報表屬于 ERP 項目中的關鍵應用,通常被用戶的高層領導用于企業(yè)業(yè)績評估、輔助決策或 對外發(fā)布。 據(jù)統(tǒng)計, 在很多交付壓力較大的項目當中, 報表開發(fā)占有相當?shù)谋戎亍?就目前 開 發(fā)現(xiàn)狀而言,影響報表快速交付的主要問題有以下幾點:1、報
5、表開發(fā)本身的復雜性高。 中國式報表由于政策以及長期人工填報的原因具有極強的個 性化特點,根據(jù)業(yè)務邏輯進行數(shù)據(jù)查詢、數(shù)據(jù)組織、表樣展現(xiàn)和界面處理的每個步驟都 耗費了很高的開發(fā)代價;2、報 表開發(fā)的復用性低。 開發(fā)人員投入巨大努力完成第一批報表后, 發(fā)現(xiàn)第二批報表依然 要從頭做起,或者另一名開發(fā)人員遇到類似于第一批報表的需求,無法借鑒(甚至根本 不知道)前人的開發(fā)成果;3、報 表開發(fā)對專業(yè)技能要求偏高。 很多二次開發(fā)人員雖然不是專門搞技術的, 但通常具有 定的開發(fā)基礎,而目前的二次開發(fā)帄臺限制了他們發(fā)揮應有的作用。1.3 模式化報表開發(fā)思路所謂模式化開發(fā), 包含兩方面的工作: 專職人員將有代表性的
6、應用進行歸納抽象, 提取出共 性的部分形成代碼框架和方案,并以手冊的形式對外發(fā)布;報表開發(fā)人員拿到項目需求后, 從手冊上找到匹配的模式, 通過編寫一些低技術含量的子類代碼或進行一些機械性的工具操 作,就能夠快速地完成開發(fā)工作。 以往大部分的重復性勞動已經在模式的基類或者缺省實現(xiàn)中處理,當開發(fā)人員需要體現(xiàn)個性化的時候,則可以通過自己對接口的特殊實現(xiàn)完成。隨著模式的逐步豐富, 開發(fā)人員開發(fā)各類模式報表的工作量都會明顯降低, 同時也實現(xiàn)了代 碼復用和知識共享, 另一方面, 由于開發(fā)者的工作趨于簡單和機械, 他們的角色就可以由低 專業(yè)技能人員所取代。 從這個角度上說, 模式化是解決上節(jié)所述三個問題從而
7、真正實現(xiàn)報表 快速開發(fā)的有效方案。本手冊介紹了兩大類 NC 報表開發(fā)模式, 一類是基于查詢引擎的低開發(fā)難度報表, 其編碼量 小,操作簡單, 適合于開發(fā)數(shù)據(jù)和格式比較規(guī)律的報表; 另一類是基于行業(yè)報表工具的高開 發(fā)難度報表,主要工作是編寫子類代碼,自由度高,適合于開發(fā)復雜報表。2. 應用模型2.1 數(shù)據(jù)模型與展現(xiàn)模型一般來說,報表是由數(shù)據(jù)和格式組成的整體。報表的數(shù)據(jù)模型通常包含以下信息:1、數(shù)據(jù)結構;2、待定參數(shù)描述;3、取數(shù)規(guī)則描述;4、數(shù)據(jù)加工算法描述;5、多個數(shù)據(jù)集合之間的數(shù)據(jù)關聯(lián)描述;可作為數(shù)據(jù)載體的常用 NC 數(shù)據(jù)結構包括:1、nc.vo.pub.CircularlyAccessibl
8、eValueObject 循環(huán)訪問 V O ,是由屬性和取值成對組成的集合,提供了根據(jù)屬性獲得 /設置值的方法,是單據(jù)和報表模板采用的主要結構;2、 nc.vo.pub.ValueObject普通VO,包含多個屬性及每個屬性的getter和setter方法,是 業(yè)務組主要數(shù)據(jù)結構的父類;3、 com.borland.dx.dataset.StorageDataSet存儲數(shù)據(jù)集,由元數(shù)據(jù)和內容數(shù)據(jù)兩部分組成,元數(shù)據(jù)( Column )描述了各列的信息,內容數(shù)據(jù)描述了一個二維的數(shù)據(jù)集合,當游標 指向內容數(shù)據(jù)的某行時,可以獲得該行指定列的數(shù)據(jù),用于查詢引擎;4、nc.vo.pub.rs.Memory
9、ResultSet 內存結果集,同樣由元數(shù)據(jù)和內容數(shù)據(jù)組成,其中元 數(shù)據(jù)( MemoryResultSetMetaData )描述各列信息,內容數(shù)據(jù)( ArrayList )描述了一個二 維數(shù)據(jù)集合,可以直接訪問其任何元素,目前被一些業(yè)務算法使用;5、Object , Vector, ArrayList 這些都是 JDK 的常用結構,均可存儲二維數(shù)據(jù)。報表的展現(xiàn)模型通常包含以下信息:1、控件(核心控件是表格)屬性和布局;2、控件顯示內容與顯示規(guī)則(綁定數(shù)據(jù)、參數(shù)、行列格式、界面資源等) ;3、控 件連動規(guī)則;4、數(shù)據(jù)處理規(guī)則(定位、排序、過濾、統(tǒng)計、公式、交叉、鉆取等) ;5、動 態(tài)擴展規(guī)則;
10、6、輸 入輸出控制(待定參數(shù)設置,打印,導出等)第4 頁2.2數(shù)據(jù)字典NC數(shù)據(jù)字典提供了統(tǒng)一的數(shù)據(jù)建模帄臺,支持對各種數(shù)據(jù)庫對象進行管理,維護這些物理對象的邏輯屬性,并向外系統(tǒng)提供訪問數(shù)據(jù)庫邏輯信息的接口。以查詢引擎為例,查詢對象 的定義是基于數(shù)據(jù)字典進行的,而這份數(shù)據(jù)字典來自查詢對象所指定的數(shù)據(jù)源。由于多數(shù)報表的列與業(yè)務數(shù)據(jù)庫的字段存在某種對應關系,因此數(shù)據(jù)字典的存在有助于提高查詢定義的直觀性和易用性。NC數(shù)據(jù)字典通常在安裝產品時候由系統(tǒng)生成,如果想自己為某些數(shù)據(jù)庫對象生成字典,可以采用數(shù)據(jù)字典管理界面提供的導入方法。導入方式包括三種(詳細操作可參見數(shù)據(jù)字典導入說明)1、解析PDM文件(xm
11、l格式);2、解析NC標準建庫腳本;3、提取數(shù)據(jù)庫元數(shù)據(jù);如果需要給非NC 數(shù)據(jù)庫(比如用戶采用的第三方數(shù)據(jù)庫)生成數(shù)據(jù)字典,可 以利用PowerDesigner提供的逆向工程功能將庫里的物理表生成PDM 文件,修改其中表和字段的 中文名稱,然后以xml文件格式存儲,再使用上述第一種方法導入。2.3 業(yè)務系統(tǒng)集成對于直接使用查詢引擎開發(fā)出的報表, 可以使用以下兩種方式掛接到業(yè)務組的功能節(jié)點。 烈建議把準備掛接節(jié)點的查詢對象和格式對象的編碼設為與業(yè)務系統(tǒng)相關的有意義字符串, 以避免不同業(yè)務系統(tǒng)預置對象互相覆蓋的危險性。報表管理節(jié)點掛接法:1、注 冊功能節(jié)點,類名為 nc.ui.pub.query
12、model.QueryMainUI_N ;2、下掛一個參數(shù),參數(shù)名為folderId ,參數(shù)值為客戶化下查詢引擎管理中相關報表目錄的ID (可從數(shù)據(jù)庫表 pub_formatmodeldef的id字段查出)。獨立報表節(jié)點掛接法:1、注 冊功能節(jié)點,類名為: nc.ui.pub.querymodel.QueryNodeUI :2、 下掛兩個參數(shù):pkQryNode 界面模型對應的編碼(可從查詢引擎管理界面讀取), dsName查詢定義所在數(shù)據(jù)源。對于高開發(fā)難度模式的報表,則與普通功能節(jié)點一樣掛接 ToftPanel 的子類即可。第6 頁第二章低開發(fā)難度報表1. 概述本手冊列舉的低開發(fā)難度報表模式
13、統(tǒng)一由查詢引擎(V3版本)提供解決方案。查詢引擎是一個面向高級實施人員和普通開發(fā)人員的查詢建模產品,延續(xù)并完善了自定義查詢體系的技 術路線,在全面支持復雜查詢的設計和個性化的報表展現(xiàn)的同時,大幅度降低了報表開發(fā)人員的編碼工作量和專業(yè)技能要求。我們再來看一下查詢引擎的適用性和不適用性。查詢引擎長期作為一個查詢工具發(fā)展,因此尤其適用于與數(shù)據(jù)庫查詢分析或數(shù)據(jù)挖掘關系密切的報表開發(fā),同時也支持程序員調用服務器端代碼對數(shù)據(jù)進行業(yè)務處理。 另一方面,自定義查詢體系與模板體系存在一個很大的不同, 模板體系在發(fā)布產品之前已經由程序員錄入了大量初始化數(shù)據(jù),因此不同用戶能夠分配到不同的查詢模板、報表模板和打印模板
14、,而自定義查詢體系是完全自定義的實時開發(fā),沒有模板的預制數(shù)據(jù),因此在一個時刻只支持一種參數(shù)控制樣式、一種報表界面樣式和一種打印樣式(或直接打?。?,但這些樣式均可在設計態(tài)修改。在展現(xiàn)上,由于查詢引擎使用的是 SWING的表 格控件,因此對一些 EXCEL風格的需求支持不夠,這個薄弱環(huán)節(jié)將在 V31得到加強???體來說,V3版本的查詢引擎暫不適用于以下兩類報表開發(fā):1、有多模板分配需求的報表,或對打印有高度要求的報表;2、存在表體合并單元格的報表。設計如下:查詢引擎的查詢模型(數(shù)據(jù)模型)第 7 頁第 # 頁查詢模型流程如下所示(設計態(tài) /運行態(tài)):第 # 頁界面模型(展現(xiàn)模型)設計如下:查訶引用連
15、動規(guī)則(主從)數(shù)據(jù)頂處理(小計式)界面模型設計態(tài)抱件連動基于頸據(jù)集的數(shù)據(jù)處理基于表格的數(shù)據(jù)處理報表輸出界而模型運行瀏覽)態(tài)第 8 頁界面模型流程如下所示:本章共介紹了五大類報表的十五種開發(fā)模式。盡管這些模式之間存在相當差異,但是針對以 前我們發(fā)現(xiàn)的一些用例雜亂導致的培訓效果問題,本章的所有范例集中面向兩個業(yè)務應用(單位費用統(tǒng)計和部門人事統(tǒng)計),即用不同方案解決相似問題,以便于讀者從中領會和比 較這些模式的原理、特點和適用性。希望這種做法不會給讀者造成一個誤導:查詢引擎只能解決這兩類報表的應用。2. 查詢類報表查詢類報表指通過一個或多個 SQL查詢結果形成的二維數(shù)據(jù)展現(xiàn)出來的報表,由于SQL的語
16、法特點,此類報表通常具有固定的列結構和動態(tài)的行結構,但模式2.3也探討了一種根據(jù)參數(shù)動態(tài)改變查詢列結構的方案。2.1明細報表【概述】 明細報表用于展現(xiàn)最基本維度上的數(shù)據(jù),即最細粒度的數(shù)據(jù)。通常明細總是相對于匯總而言的,如果我們把某商品每個月的總銷售額列表視為匯總數(shù)據(jù),那么該商品每天的詳細銷售情況就可視為明細數(shù)據(jù);如果我們把某部門當年的總薪資情況做成匯總表,那么該部門每位員工當年的薪資情況就可以做成明細表。 查詢類報表中的明細表通常是指一些不含聚合函數(shù)的 SQL語句直接能夠查詢出的數(shù)據(jù)形成的報表?!緫脠鼍啊康?10 頁開發(fā)人員需要通過多表聯(lián)查 SQL 或者復合查詢獲得表體數(shù)據(jù),同時為報表展現(xiàn)提
17、供待定條 件設置、 欄位設置、 排序、 過濾、 定位、 小計合計及輸出等功能。 當明細表與匯總表一起 出 現(xiàn)時,用戶通常還會有從匯總數(shù)據(jù)聯(lián)查明細數(shù)據(jù)的需求(又稱穿透或鉆?。?, 此類應用將 在 模式 6.1 中介紹?!具m用性和不適用性】適用于:明細數(shù)據(jù)的取數(shù)規(guī)則可用 SQL 描述;不適用于:通過行列條件統(tǒng)計單元取值的明細表。此類報表應遵循模式 4.1 解決; 通過程序算法構造明細數(shù)據(jù)的報表。此類報表應遵循算法類報表模式解決;【解決方案】取數(shù)由向導式 SQL 設計描述,查詢條件由參數(shù)控制機制解決,欄目在格式設計態(tài)設定,排 序、過濾、定位、小計合計、輸出等功能均內置于報表瀏覽態(tài)?!鹃_發(fā)步驟】第一步
18、:在查詢引擎管理中建立查詢對象Q1,做向導式SQL設計(通常不含聚合函數(shù) sum、avg、count 、max 、min )。對于一個 SQL 無法描述的查詢,比如指定單位在指定期間內不同 科目的發(fā)生額,可以利用復合查詢(基于查詢對象的查詢,可參考模式3.1)進行描述。 Q1中待定的信息由參數(shù)定義描述, 普通參數(shù)可以在向導式設計的篩選條件處引用, 替換型參數(shù) 可以在向導式和手工式設計的任意位置引用(參見 FAQ 文檔); 第二步: 創(chuàng)建格式對象 F1 ,引用查詢對象 Q1 并嵌入表格, 做相關的欄位、 列格式和列表頭 設 計。表頭表尾可放置綁定參數(shù)的控件; 第三步:瀏覽 F1 (或掛功能節(jié)點)
19、, 設置參數(shù),檢查數(shù)據(jù)與格式是否正確; 【FAQ 】1、如何充分發(fā)揮查詢模型中參數(shù)的功能? 答:參 見附錄提供的查詢引擎 FAQ 之參數(shù)篇。2、格式設計中的 16 種控件各有何種用途? 答:表格、圖表是核心控件,用于綁定數(shù)據(jù)集; 面板、拆分窗格(分割面板) 、 多頁簽作為 界面容器;標簽、文本框、下拉框(組合框) 、 參 照、文本域、復選框、單選框是表頭表尾 控件, 需要放在容器上面, 用于綁定參數(shù); 下拉框、 列表綁定枚舉型參數(shù), 參照綁定參照型 參數(shù);主子表是已經不推薦使用的連動展現(xiàn)控件;按 鈕、樹暫無實際用處。3、如何控制報表的輸出格式? 答:打印輸出利用格式設計中的打印設置功能控制,E
20、XCEL 輸出由界面表格的樣式控制。【范例】 單位費用明細表各單位在指定期間范圍內的費用明細情況。 報表中要求包括公司、期間、 制單日期、科目、分錄摘要、發(fā)生額等信息,用戶可以根據(jù)年度和期間范圍進行查詢。第9 頁公司期間制單日期科目摘要借發(fā)生額貸發(fā)生額1、查詢引擎管理主界面創(chuàng)建查詢對象,編碼為gldetail,名稱為費用明細;2、進行參數(shù)定義,增加三個字符型參數(shù):年,起始期間,終止期間;3、進行SQL向導設計:從數(shù)據(jù)字典添加憑證表(gl_voucher)憑證分錄(gl_detail)科目表 (bd_accsubj)和公司目錄(bd_corp)指定表間連接關系、查詢字段、篩選條件(先定義確定條件
21、)和排序字段;第 10 頁第 11 頁4、在篩選條件頁簽增加待定條件,在右操作數(shù)框中按F12引用參數(shù);第 12 頁第 # 頁5、創(chuàng)建格式對象,編碼為gldetail,名稱為"費用明細表”;第 # 頁6、引用查詢“費用明細”;7、進行格式設計:添加表格和面板控件,表格停靠于中部,雙擊控件設置屬性,綁定數(shù)據(jù) 集費用明細,面板??坑诒辈?作為表頭容器),采用流式布局(FlowLayout )在面板上放 個文本框控件,分別綁定費用明細的三個參數(shù);旨屬性編輯鑲8、(可選)定義一種列格式,用于顯示兩位小數(shù), 在表格屬性框的列格式分欄中由兩個金額 列引用此列格式;'自定義列搭式引用1列名列
22、1顯不名列格式是否顯示AVNITHAHE公司名稱缺省格式0PERIOD會計期司峽省格式0VFKEFAKEDDATE砂日則厭省格式回SUBJUAME科目名禰址省格式EXFUNATION摘雯內容岐省格式mcjoiBn.本幣惜發(fā)生霰二位小數(shù)回LOCALCREDI.本幣貸發(fā)生輙二位小數(shù)上移職消9、瀏覽費用明細表(先設置參數(shù))第 17 頁2.2 匯總報表【概述】 匯總數(shù)據(jù)通常與明細數(shù)據(jù)相對, 是指在明細數(shù)據(jù)基礎上指定若干個有分類意義的字符型列進行分組, 并對另外若干個有統(tǒng)計意義的數(shù)值型列進行求和 (或求帄均、 最值、計數(shù)等) 獲得 的數(shù)據(jù)。展現(xiàn)匯總數(shù)據(jù)的報表稱為匯總報表?!緫脠鼍啊?我們再細分為兩種應
23、用:1靜態(tài)匯總設置: 查詢數(shù)據(jù)的 SQL 中指定了分組列和匯總列,此設置在報表瀏覽狀態(tài)不再改變。要求提 供待定條件設置、欄位設置、排序、過濾、定位、小計合計及輸出等功能。2 動 態(tài)匯總設置: 事先對數(shù)據(jù)設定某種缺省的匯總設置, 此設置在瀏覽態(tài)可做更改, 并重新計 算匯總數(shù)據(jù)。 同時具備上述功能需求?!具m用性和不適用性】適用于: 匯總數(shù)據(jù)的取數(shù)規(guī)則可用 SQL 描述;不適用于: 通過行列條件統(tǒng)計單元取值的匯總表。此類報表應遵循模式 4.1 解決; 通過程序算法構造匯總數(shù)據(jù)的報表。此類報表應遵循算法類報表模式解決;【解決方案】取數(shù)由向導式 SQL 設計描述,查詢條件由參數(shù)控制機制解決,欄目在格式設
24、計態(tài)設定,動 態(tài) 匯總由旋轉交叉機制解決,排序、過濾、定位、小計、輸出等功能均內置于報表瀏覽態(tài)?!鹃_發(fā)步驟】1、靜態(tài)匯總設置第一步:在查詢引擎管理中建立查詢對象Q2,做向導式 SQL設計,定義帶有聚合函數(shù)的 SQL 語句。單個 SQL 無法描述的查詢利用復合查詢描述。在 Q2 的查詢模型中創(chuàng)建參 數(shù)和 引用參數(shù),用來描述待定的信息;第二步:創(chuàng)建格式對象F2,引用查詢對象Q2并嵌入表格,做相關的欄位、列格式和列表頭 設 計。表頭表尾可放置綁定參數(shù)的控件;第三步:瀏覽F2 (或掛功能節(jié)點),設置參數(shù),檢查數(shù)據(jù)與格式是否正確;2、動態(tài)匯總設置 第一步: 同上述第一步 (但也可以不設置聚合函數(shù), 而是
25、在旋轉交叉設置中把 缺省的分組列 放到行列表中,把缺省的匯總列放到值列表中) ;第二步: 同上述第二步, 因交叉表的列結構不能在設計態(tài)確定, 因此只能指定非匯總列的列 格式等信息;第 17 頁 第三步:同上述第三步,需要改變匯總設置的時候,利用表頭右鍵菜單的交叉功能把新的匯 總列移到交叉行列表,確定即可;(關于交叉的詳細說明參見下一節(jié))【FAQ】1、行SQL向導設計時如何指定group by字段? 答:無需指定,系統(tǒng)自動把不含聚合函數(shù)的查詢字段作為group by字段。2、 行SQL手工設計時為何order by字段無效? 答:需要顯式指定排序字 段的排序方式(升序 asc,降序desc)【范
26、例】單位費用匯總表一一各單位在指定期間范圍內的費用匯總情況。報表中要求包括公司、期間、 科目、匯總發(fā)生額等信息,用戶可以根據(jù)年度和期間范圍進行查詢。公司期間科目借發(fā)生額貸發(fā)生額1、創(chuàng)建查詢對象,編碼為glsum,名稱為費用匯總;2、進行參數(shù)定義,增加三個字符型參數(shù):年,起始期間,終止期間;3、進行SQL向導設計:從數(shù)據(jù)字典添加憑證表、憑證分錄、科目表和公司目錄, 指定表間 連接關系、查詢字段、篩選條件和排序字段(除查詢字段外均與模式2.1的范例相同);磯查詢定義II遶算宇段 帀韶搭 毎序宇幻 效屬性|上一歩下一歩 I確定_取消字段表達式顯示£別名1b d_corp uni + rL:
27、=jTi e益司名稱uni t n:=imeaXJUZgj_vracher. peri od會計期間peri od3bd i.c«ubj subjntmt科目店稱sub j nun «刪除4sum (gl deta.il. l.«cald電bi tarn口unt)本幣借發(fā)生額loctldebi t amount5sum (gl_detail. localcredi tamount)本幣貸童生額localcredi t am ount<下移第 19 頁第 # 頁4、在篩選條件頁簽增加待定條件,在右操作數(shù)框中按F12引用參數(shù);第 # 頁第 # 頁5、創(chuàng)建格式對象
28、,編碼為 glsum,名稱為"費用匯總表”。引用查詢"費用匯總”; 6、進行格式設計:添加表格和面板控件,表格??坑谥胁?,綁定數(shù)據(jù)集費用匯總,面板停 靠于北部(作為表頭容器),采用流式布局,在面板上放三個文本框控件,分別綁定費用匯 總的三個參數(shù);7、瀏覽費用匯總表(先設置參數(shù))返回頻捷業(yè)理劇新輸出餐用尢點表年JEZO04起始期間OL導止期間03茲司名稱會計期問科目名斬本幣皆發(fā)生輙本幣貸塩生顫無翟她司01按口親公司0030.00004SO.QOOO2無翟燧荀01圧江厭團總部17523.42*5iiToe.oooo3無開甘韁司01長:遼毆靜瓷司130.00006.00004無埸
29、竝司01貨軾71.0000331.75005無陽竝司01定期存款0.0000!3.0000B無M螢司1東莞臣孑審噬廠145B8.65D0I2Z69B.S400T9無賜燧司01工行再款14655.5000144943.8145無開如司0廣州皓算申吐57<.7500139.0000無鶴她司01金融機構借就1144&.580067.500010無鋸竝司01利J&費用2275.83330 000011無甥竝司01內部貨誠和息0.00001000.000012無餌竝司01上海結輕中嗆0.0000!3670.333313無餌燧司01外部貸款20000.00001D.OOOO14無賜騎
30、決司01外fin單建720.000011:3®D.OOOO1516無藹燧司02崔江集團總部7ODG.O0D0I0.0000無雷她司Q2工疔存款Q. DQOOTOOO.OODO17闕4|竝司01本年利潤0.0000iei iM16射H分吩司01用1000.00001000.000019蘇州竝司01待攤燙用i.aooo1000.000020勞州竝司01固定資產34530. DOOOi29.S100探作罰:I2004-11-05 嗦 用友戟件8、當前匯總設置是對公司、期間、科目分組統(tǒng)計發(fā)生額,如果需要動態(tài)改變匯總依據(jù),則可以使用表頭右鍵菜單中的交叉功能。比如我們需要按照公司、期間重新匯總,
31、則把公司和期間移至交叉行列表,發(fā)生額移至交叉值列表,確定即可;會司書稱會計期間本幣僚生航本幣貸握蜩3通州分酋司01191S43.076216305.42392通州分酋司02372 柏.1078999941105.921599999943爲州券盤司03杜55覘9.5292&無埸券號司01的槪.7379&Q290.73TS5無埸分公司血7000.0T0D0. 06蘇州分酋司01I5B0強空弱1036.43111蘇州分書司02004-4.0勺5D4B. 52004J®州期同01終止期同M零査簡引事X返回數(shù)毎處理刷新榆出”漁作員:12004-11-D59、如果我們把科目移至交
32、叉行,期間移至交叉列,發(fā)生額移至交叉值,那么就實現(xiàn)了帶有數(shù)據(jù)旋轉的動態(tài)匯總,即展現(xiàn)各科目在不同期間下匯總出來的發(fā)生額。關于旋轉交叉的詳細應用可參看模式3.3;2.3列結構依賴于查詢條件的報表(動態(tài)SQL)【概述】 我們前邊提到過,SQL查詢的結果具有固定的列結構和動態(tài)的行結構,前兩個模式中雖然都引入了參數(shù)來控制動態(tài)信息,但也只用于待定的篩選條件,即影響報表的行結構。然而 有一類報表因查詢條件的不同而同時具有動態(tài)的列結構和行結構,比如在供應鏈的一些單據(jù)查 詢報表中,如果用戶在查詢條件中勾選了聯(lián)查訂單或到貨單,那么報表會在靜態(tài)的列結構(可能有10列)后面追加一些動態(tài)的列或列分組,用于顯示聯(lián)查單據(jù)的
33、明細信息(此時報表可 能就變成了 20列)【應用場景】開發(fā)人員需要把靜態(tài)的查詢 SQL同用戶對查詢條件設置的取值結合起來,構造出幾種不同 的SQL,分別對應于用戶希望看到的各種報表展現(xiàn)結果。這些SQL不僅僅存在篩選條件的差異,也可能存在查詢字段、 查詢表、分組字段、排序字段的差異。由于本模式采用的技術 方案需要通過代碼片段來描述查詢SQL究竟被如何矯正,因此本模式僅建議熟悉JAVA編程的報表開發(fā)人員使用?!具m用性和不適用性】適用于:查詢結果可由規(guī)范的靜態(tài) SQL 和動態(tài)參數(shù)取值聯(lián)合決定; 不適用于:查詢必須通過難以解析的復雜手工 SQL 才能描述; 要求對動態(tài)增加出來的列結構進行列格式設計的報
34、表 (因為這些列在設計態(tài)是未知的) 【解決方案】 取數(shù)由向導式 SQL 設計描述,查詢條件由參數(shù)控制機制解決,如何根據(jù)參數(shù)取值調整靜態(tài) SQL 則由 SQL 整理中的代碼片段來描述。SQL 整理中的常用數(shù)據(jù)結構和接口方法如下所述:1、查詢基本定義類QueryBaseDef,所提供方法包括:FromTableVO getFromT ables(); / 獲得查詢字段定義SelectFldVO getSelectFlds(); /獲得查詢字段定義JoinCondVO getJoinConds(); /獲得連接條件定義WhereCondVO getWhereConds(); /獲得篩選條件定義Gro
35、upbyFldVO getGroupbyFlds(); /獲得分組字段定義OrderbyFldVO getOrderbyFlds(); / 獲得排序字段定義 以及相應 setter (設置)方法。2、查詢表定義類 FromTableVO ,所提供方法包括:String getTablecode(); / 獲得表物理名String getTabledisname(); / 獲得表顯示名String getTablealias(); / 獲得表別名void setTablecode(String); / 設置表物理名void setTabledisname(String); / 設置表顯示名voi
36、d setTablealias(String); / 設置表別名3、查詢字段定義類 SelectFldVO ,所提供方法包括:String getExpression(); / 獲得字段表達式String getFldname(); / 獲得字段顯示名String getFldalias(); / 獲得字段別名void setExpression (String); / 設置字段表達式void setFldname (String); / 設置字段顯示名void setFldalias (String); / 設置字段別名4、連接條件定義類 JoinCondVO ,所提供方法包括:String
37、 getExpression0(); / 獲得篩選條件表達式void setExpression0(String); / 設置篩選條件表達式5、篩選條件定義類 WhereCondVO,所提供方法包括:String getExpression0(); / 獲得篩選條件表達式void setExpression0(String); / 設置篩選條件表達式6、分 組字段定義類 GroupbyFldVO ,所提供方法包括:String getExpression(); / 獲得分組字段void setExpression(String); / 設置分組字段7、排 序字段定義類 OrderbyFldVO
38、 ,所提供方法包括:String getExpression(); / 獲得排序字段UFBoolean getAsc(); / 獲得升序標志void setExpression(String); / 設置排序字段void setAsc(UFBoolean); / 設置升序標志8、SQL 整理中獲得靜態(tài)查詢基本定義的方法為QueryBaseDef getQueryBaseDef();整理代碼的核心目標就是根據(jù)參數(shù)取值來調整這個 QueryBaseDef 的內部結構?!鹃_發(fā)步驟】第一步:在查詢引擎管理中建立查詢對象Q3,做向導式SQL設計,描述靜態(tài)的SQL語句。在Q3的查詢模型中創(chuàng)建參數(shù)和引用參數(shù)
39、,用來描述待定的信息;第二步:在查詢模型中編寫 SQL 整理代碼,這段代碼采用純 JAVA 語法,目的是根據(jù)用 戶 的參數(shù)設置取值調整靜態(tài)的查詢基本定義 QueryBaseDef ,并把調整后的 QueryBaseDef 所生 成的 SQL 發(fā)到數(shù)據(jù)庫去執(zhí)行。整理界面的向導樹內置了常用的整理代碼向導,可以 輔助開 發(fā)人員快速完成編碼;第三步:創(chuàng)建格式對象F3,引用查詢對象Q3并嵌入表格,做相關的欄位、列格式和列表頭 設 計。表頭表尾可放置綁定參數(shù)的控件;第四步:瀏覽F3 (或掛功能節(jié)點),設置參數(shù),檢查不同參數(shù)設置下數(shù)據(jù)與格式是否正確;【FAQ 】1、進 行 SQL 整理對查詢對象有什么要求?
40、 答:該對象必須具有 SQL 設計,且強烈建議使用向導式 SQL 設計。2、SQL 整理在何時何地進行?答:SQL整理在服務器端進行,整理行為發(fā)生在數(shù)據(jù)庫查詢之前, 多用于根據(jù)參數(shù)矯正 SQL o【范例】 單位費用匯總或明細表各單位在指定期間范圍內的費用情況, 查詢匯總結果還是 明細結果由參數(shù)控制。如果用戶選擇匯總, 則報表中要求包括公司、 期間、科目、匯總發(fā)生額等信 息;如果用戶選擇明細, 則報表中要求包括公司、 期間、 科目、 明細發(fā)生額和分錄摘要等信 息。用戶可以根據(jù)年度和期間范圍進行查詢。1、創(chuàng) 建查詢對象,編碼為 glsumordetail ,名稱為費用匯總或明細;2、進行參數(shù)定義,
41、 增加三個字符型參數(shù) (年, 起始期間, 終止期間) 和一個枚舉型參數(shù) (顯 示 類型,可選值為“匯總”和“明細” ;)顯亦名數(shù)據(jù)類型默認值year年度2004bejginper i od起貽期間字符 1aiidperi o d終止期間03show type噩示方式宇符校舉匯駆睚田匯總a増行刪行確定取消第 26 頁第 # 頁3、進行SQL向導設計,內容與模式22的范例完全相同(我們在下面列出查詢字段的界面, 主要是方便讀者把字段表達式與 SQL整理中的代碼處理結合起來理解,因為整理代碼有很 強的針對性);4、在篩選條件頁簽增加待定條件,內容與模式2.2的范例完全相同;5、進行SQL整理設計一一
42、這段整理代碼的思路是:首先獲得用戶設置的顯示類型是“匯總”還是“明細”,如果是后者,則繼續(xù)獲得靜態(tài)查詢定義的查詢字段數(shù)組(SelectFldVO)找出其中帶有匯總函數(shù)的字段表達式,將匯總函數(shù)以及分組字段去掉,然后再增加一個新的查詢字段,對應憑證分錄表的摘要信息。瞬£QL整理代碼這段代碼中一部分為左側的代碼向導樹生成,其余部分則為直接手工編寫。 比如第一行代碼就是由通用向導中的“獲得參數(shù)值”生成:而陰影部分(增加分錄字段的代碼片段)則由SQL整理向導中的“追加查詢字段”生成:爭代科向導參致參數(shù)提示參數(shù)值臨時變量字段表達式gL_deti.i l. txpl anat i on字段顯示名分
43、錄摘要字段別名explanati on確定取消6、創(chuàng)建格式對象,編碼為 glsumordetail,名稱為"費用匯總或明細表”。引用查詢"費用匯 總或明細”;7、進行格式設計:添加表格和面板控件,表格??坑谥胁浚壎〝?shù)據(jù)集費用明細或匯總, 面板??坑诒辈?,采用流式布局,在面板上放三個文本框控件,分別綁定三個字符型參數(shù), 再放置一個下拉框控件,綁定枚舉型參數(shù)(顯示類型) ;8、瀏覽報表(先設置參數(shù)“顯示方式”的取值為“匯總”)第 29 頁"費用匯總戒明鈿顯巫名操作符年度2004起始期間01謔止期間03顯示方式匯恵H匸總1確定取消9、再設置參數(shù)“顯示方式”的取值為“明
44、細”然后瀏覽報表,或者直接在瀏覽態(tài)切換表頭 的下拉框控件為“明細”選項;3. 交叉類報表數(shù)據(jù)庫當中的表往往是象下面這樣存儲的:姓名月份銷售業(yè)績張三12000張三月5000李四月3000李四月4000月但用戶要求的報表往往是象下面這樣的:姓名123張三2月)0月5月)0李四30004000類似這樣,把原始數(shù)據(jù)中一列(或幾列,通常有分組意義)數(shù)據(jù)的不同取值維持在表的左側 不動(比如上表中的姓名),把另外一列(或幾列,通常有分類意義)數(shù)據(jù)的不同取值旋轉 到行的方向成為列標題(比如上表中的月份),再把另外一列(或幾列,通常有統(tǒng)計意義)數(shù)據(jù)對應匯總到旋轉出來的列標題下面(比如上表中的業(yè)績),就形成了交叉
45、表。在上述過程中,我們根據(jù)交叉規(guī)則把原始數(shù)據(jù)中的列分成了三種,第一種稱為交叉行(其數(shù)據(jù)交叉后出現(xiàn)在行上),第二種稱為交叉列(其數(shù)據(jù)交叉后出現(xiàn)在列頭上),第三種稱為交叉值(交叉前行、列、值的數(shù)據(jù)出現(xiàn)在一行上,交叉后值的數(shù)據(jù)出現(xiàn)在行、列的交叉點上)。交叉報表比普通報表提出了很多新的問題, 比如:數(shù)據(jù)交叉如何實現(xiàn), 交叉后列數(shù)目的不確 定性如何處理,列的順序如何控制等等。 根據(jù)實現(xiàn)方法的不同, 以及能否預先確定交叉后的 列結構,本章節(jié)提供了以下三種交叉報表模式的解決方案。3.1列向拼接查詢型報表(復合查詢)【概述】 報表在列向可以被劃分成幾個分組, 每組由若干個列構成,每個列分組的數(shù)據(jù)能夠通過SQL
46、查詢獲得,而不同列分組的數(shù)據(jù)出現(xiàn)在同一行的前提是它們對應于同一個行ID。即報表數(shù)據(jù)可以通過多個查詢結果集相互連接的方式獲得。【應用場景】 開發(fā)人員需要從某個具有分類意義的列中提取若干不同的取值,將它們旋轉成為列標題,再對另外一些有統(tǒng)計意義的數(shù)值列進行匯總。用戶表樣明確規(guī)定了這些列標題及其順序,因此交叉后的列結構是事先能夠確定的,無論這些列是否包含有效的統(tǒng)計數(shù)據(jù),它們都將在報表中存在,因此我們稱之為動態(tài)行固定列報表?!具m用性和不適用性】適用于:能夠預先確定交叉后列結構的報表;報表的每行數(shù)據(jù)都具有一個唯一的行ID,該ID可能是某個字段或某幾個字段的組合;不適用于:動態(tài)列結構的交叉報表;【解決方案】
47、 利用復合查詢解決固定列結構的交叉應用,每個交叉列對應一個查詢, 而用于連接多個查詢的行ID正是交叉行字段的組合?!鹃_發(fā)步驟】第一步:分析交叉報表的結構, 找出交叉行字段、交叉列字段和交叉值字段。 假定交叉列字 段 有n個(因為是固定列結構交叉,所以 n是定數(shù));第二步:創(chuàng)建n個查詢對象分別對應于 n個交叉列字段,通常這些對象會通過確定篩選條件與列標題掛鉤;第三步:創(chuàng)建復合查詢對象 Q4,通過增加臨時表的方式把上述n個查詢對象選為查詢表,這些臨時表的連接條件就是交叉行字段的組合,而Q4的參數(shù)應該是n個查詢對象的參數(shù)的并集,這樣才能保證 Q4的參數(shù)設置能夠分發(fā)給各個被引用查詢;第四步:創(chuàng)建格式對
48、象F4,引用查詢對象Q4并嵌入表格,做相關的欄位、列格式和列表頭 設 計。表頭表尾可放置綁定參數(shù)的控件; 第五步:瀏覽F4 (或掛功能節(jié)點),設置參數(shù),檢查數(shù)據(jù)與格式是否正確;【FAQ】1、定義復合查詢有什么注意事項?答:首先要保證復合查詢和各個子查詢都使用相同的執(zhí)行數(shù)據(jù)源(對于單數(shù)據(jù)源版查詢引擎無此問題),其次如果修改了子查詢的定義要保證復合查詢定義中的一致性?!痉独?部門員工民族統(tǒng)計表一一要求統(tǒng)計指定公司下各部門中不同民族的員工數(shù),民族預先指定為漢族、滿族和蒙古族,報表中包含部門編碼、 部門名稱、漢族人數(shù)、滿族人數(shù)和蒙古族人數(shù)。 請注意,這里作為交叉行并可以承擔行 ID角色的字段是部門信
49、息,作為交叉列并可以承擔 子查詢過濾角色的字段是民族,作為交叉值的字段是人數(shù)。部門編碼部門名稱人數(shù)漢族滿族蒙古族1、創(chuàng)建查詢對象,編碼為han,名稱為漢族,在篩選條件頁簽設置確定條件 “民族=漢族' 用于查詢各部門的漢族員工人數(shù);I饒掙農I腳麗畫宇斫*谿f排序福效J1性I典型模式O高級模式JOIN部分0»豁連接表1連接方式連接表2連接字段1比詼連接宇段2人費檔案內腳人員箱助值息農人貴宿嘉主鍵-AJSS32人員輔助惜息表內連接自定交頂檔案表民族二自定熨項檔案主鍵第 35 頁第 # 頁下一歩S&Tt取消確疋第 # 頁第 # 頁2、復制查詢對象han,修改編碼為 man,名
50、稱為滿族,修改確定條件為"民族='滿族'用于查詢各部門的滿族員工人數(shù);左卑集作數(shù)右環(huán)數(shù)待定條件表字段目定義頂檔葉読牲賽內容r'WI饒掙農|建接條件;劇宇段|誦連至審Y排序福效u性|圓典型模式o高級模式上一歩 |下t毗 | 軀消|3、復制查詢對象han,修改編碼為menggu,名稱為蒙古族,修改確定條件為"民族='蒙古族'用于查詢各部門的蒙古族員工人數(shù);4、創(chuàng)建查詢對象,編碼為nationalityA,名稱為部門員工民族統(tǒng)計A,選擇表為部門檔案和上述三個查詢對象對應的臨時表,利用部門主鍵字段連接。部門檔案提供部門編碼和名稱信息,三個子查
51、詢分別提供三個民族的員工人數(shù)。我們之所以沒有在子查詢中直接查出部門編碼和名稱再在復合查詢中利用部門編碼進行連接,是因為這樣做可能導致最終數(shù)據(jù)只列出擁有漢、滿、蒙族員工的部門,而不列出全部的部門;第 36 頁I遶捋農建接條件宇段算吐寸排序福效n性|JOIN部分oh連接表1葩方式連接字段1比詼連接字段2邯門檔案左腳部門檔嘉主鍵-部門主鍵2部門襠案部fl聲主鍵二部門主鍵3部門檔案左連接荽古族部1、帶案主鍵=部門主鍵通)典型模式 o高級模式上一步確定取消下一歩第 37 頁第 # 頁磯查詢宦義字磧表達式顯描迷1bd_deptdoc. deptcode部1褲碼dptcodeZbd_dept.doc. deptname部門名稱dptiiiSine3i EEiull (TEHQhtn. psnxto 0)hw4i snull CTEBQ_man. pEnno 0)mani5i smill (TE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年進口飛機交易具體合同版B版
- 2024年設計師合作協(xié)議標準格式版B版
- 2024年設計師咨詢服務協(xié)議樣本版
- 2025年度玩具產品加工安全認證協(xié)議范本3篇
- 網(wǎng)店運營推廣師試題庫及參考答案
- 2025年度綠色建筑設計與咨詢合同6篇
- 統(tǒng)編高一歷史《中外歷史綱要》(上)第三單元練習題(含答案)
- 臨近施工安全協(xié)議-交叉作業(yè)安全協(xié)議
- 銀行清收不良貸款工作總結(五篇范文)
- 2025年度財務數(shù)據(jù)跨境傳輸保密協(xié)議范本5篇
- 國潮風中國風2025蛇年大吉蛇年模板
- 《信托知識培訓》課件
- 物業(yè)項目經理崗位競聘
- 第8課《蒲柳人家(節(jié)選)》教學設計-2023-2024學年統(tǒng)編版語文九年級下冊
- 幼兒沙池活動指導方法
- IEC 62368-1標準解讀-中文
- 2024年冬季校園清雪合同
- 翻譯美學理論
- 15J403-1-樓梯欄桿欄板(一)
- 中國傳統(tǒng)樂器蕭介紹
- 新煤礦防治水細則解讀
評論
0/150
提交評論