|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 1 樓
|
發表於: 星期三 十二月 03, 2003 5:35 pm 文章主題: 實現FOXPRO動態製表的新思路(轉貼) |
|
|
實現FOXPRO動態製表的新思路
http://www.ithome-cn.net/technology/fox/fox40.htm
韋 明 成 紅
【摘 要】 本文在分析Foxpro報表資料庫結構的基礎上,通過修改Foxpro報表資訊庫的內容,實現了Foxpro報表的自動生成。
【關鍵字】 報表,動態報表,Foxpro
1、引言
FOXPRO資料庫為用戶提供了功能強大的“報表設計器”(Report builder),利用“報表設計器”的可視功能,可以方便靈活地製作幾乎任意形式的報表,並且可以控制報表的輸出、定義報表的頁面等。但是這樣製作的報表是一個靜態的報表,一旦資料庫的結構發生變化必須重新修改。而且,每段程式只能適合特定的資料庫,有多少報表就要編制多少個報表程式,不但增加了工作量,而且缺乏通用性和靈活性,也不利於程式的維護與擴充。
那麼,我們是否可以在充分利用FOXPRO“報表設計器”的強大控制功能的前提下,設計出通用的動態報表呢?為此,本文進行了較深入的研究,答案是肯定的。
2、報表的構成
一般情況下報表包含表頭、表體和表尾三部分:
•表頭:在每頁的頂端,顯示報表的標題及其它提示資訊等;
•表體:包含報表的主體,是報表的關鍵部分,一般有迴圈資料項目構成;
•表尾:出現在每頁的底端,顯示總結、總計、日期等文本資訊等。
3、報表資訊庫的結構
我們知道在FOXPRO中,報表的資訊是保存在以. FRX為副檔名的資料庫檔中(備註檔以. FRT為副檔名),瞭解報表資料庫的結構有助於問題的解決。報表庫(.FRX)的庫結構及欄位含義如下表所示:
欄位名稱 類型 長度 小數 說明
1 PLATFORM C 8 操作平臺(_DOS或_WINDOWS)
2 UNIQUEID C 10 唯一標識(當NAME合EXPR都為空時以_RHE開頭, 否則以_RNR開頭)
3 TIMESTAMP N 10 時間標籤(先後次序)
4 OBJTYPE N 2 目標類型(1.環境; 2.資料庫; 5.文字; 8.變數; 9.TIMESTAMP為空; 23.TIMESTAMP為空)
5 OBJCODE N 3 目標代碼(1.;4.;7.;53)
6 NAME M 10 名稱(資料庫名稱)
7 EXPR M 10 運算式
8 VPOS N 9 3 行座標
9 HPOS N 9 3 列座標
10 HEIGHT N 9 3 高度
11 WIDTH N 9 3 寬度
12 STYLE M 10 風格(透明,不透明)
13 PICTURE M 10 格式或OLE檔案名稱
14 ORDER M 10 索引排序
15 UNIQUE L 1 唯一資料庫(.F.,.T.,空)
16 COMMENT M 10 注釋
17 ENVIRON L 1 是否報表運行環境(.T.時)
18 BOXCHAR C 1 畫框字元
19 FILLCHAR C 1 運算式類型(C,N,D等,文字型的為空)
20 TAG M 10 (當該記錄為記錄環境的記錄時,該欄位儲存列印資訊等;記錄資料庫時,儲存資料庫名稱)
21 TAG2 M 10 當該記錄為記錄環境的記錄時,該欄位儲存列印控制等
22 PENRED N 5 前景紅
23 PENGREEN N 5 前景綠
24 PENBLUE N 5 前景藍
25 FILLRED N 5 填充紅
26 FILLGREEN N 5 填充綠
27 FILLBLUE N 5 填充藍
28 PENSIZE N 5 劃線寬度
29 PENPAT N 5 指定填充圖案(0.空;1.實體;2.水準;3.垂線;4.左斜;5右斜;6.交叉;7.斜交叉)
30 FILLPAT N 5 劃線類型(0.無;1.點;2.虛線;3. 虛線-點;4. 虛線-點-點)
31 FONTFACE M 10 字體類型
32 FONTSTYLE N 3 字體風格
33 FONTSIZE N 3 字體大小
34 MODE N 3 模式
35 RULER N 1 尺規(2-預設值,3-象素)
36 RULERLINES N 1 標線寬度
37 GRID L 1 是否顯示格線
38 GRIDV N 2 垂直格線刻度
39 GRIDH N 2 水準格線刻度
40 FLOAT L 1 浮動
41 STRETCH L 1 溢出時伸展
42 STRETCHTOP L 1 相對於頂端伸展
43 TOP L 1 相對於頂端固定
44 BOTTOM L 1 相對於底端固定
45 SUPTYPE N 1 控制類型
46 SUPREST N 1 控制設置
47 NOREPEAT L 1 每頁都列印頁標題
48 RESETRPT N 2 重置報表
49 PAGEBREAK L 1 每組從新的一頁開始
50 COLBREAK L 1 從新的一列開始
51 RESETPAGE L 1 每組頁號重新從1開始
52 GENERAL N 3 通用
53 SPACING N 3 空格
54 DOUBLE L 1 是否加倍
55 SWAPHEADER L 1 頭互換
56 SWAPFOOTER L 1 註腳互換
57 EJECTBEFOR L 1 列印前送紙
58 EJECTAFTER L 1 列印後送紙
59 PLAIN L 1 指定只在報表開始位置出現頁標題
60 SUMMARY L 1 是否僅列印總計和分類總計資訊
61 ADDALIAS L 1 是否增加別名
62 OFFSET N 3 偏移(0-左;1-右;2-居中)
63 TOPMARGIN N 3 上邊界高度
64 BOTMARGIN N 3 下邊界高度
65 TOTALTYPE N 2 計算類型
66 RESETTOTAL N 2 重置(1-表尾,2-頁尾)
67 RESOID N 3 源標識
68 CURPOS L 1 是否顯示當前位置
69 SUPALWAYS L 1 是否列印重複值
70 SUPOVFLOW L 1 當細節區資料溢出時到新頁或新列列印
71 SUPRPCOL N 1 當此列改變時列印
72 SUPGROUP N 2 當此組改變時列印
73 SUPVALCHNG L 1 若空行則刪除
74 SUPEXPR M 10 是否列印控制條件
4、常用控制物件的特徵
報表資料庫的欄位objtype(物件類型)和objcode(物件代碼)的值確定了控制物件的類型。為節省篇幅僅把最常用製表控制物件(文字,直線,運算式等)的特徵值列入下表:
Objtype Objcode Offset 含義
5 0 文字
8 0 運算式
6 0 1 直線z(水平線)
6 0 0 直線(垂直線)
7 4 矩形框(0~99橢圓)
用於報表佈局的控制的特徵值列入下表:
Objtype Objcode 含義
9 0 頁頭高度
9 1 頁細節高度
9 3 組標頭高度
9 4 組細節高度
9 5 組註腳高度
9 7 頁註腳高度
其他常用到的欄位有:①水準座標(Hpos);②寬度(Width);③運算式類型(Fillchar);④字體(Fontface); ⑤對齊方式(Offset)。
5、動態報表的實現
從資料庫中自動讀取欄位名、類型、寬度,通過修改報表庫(.FRX)的內容達到動態製表的目的,其演算法設計如下:
① 欄目寬度:取欄目標題與運算式寬度的最大者,Wi=MAX(Li,Hi), 其中Wi,Li,Hi分別表示欄目寬度、標題寬度、運算式寬度;
②總寬度:Width =
不同的設計人員所採取的方法步驟可能不同,我們僅給出一種設計的思路:
① 使用快速報表製作一個簡易範本,打開其報表結構庫,內容如下圖所示。
② 分別把“佈局部分”、“主體部分”和“環境部分”複製到三個資料表中;
③ 從欲列印的資料表中自動讀取欄位名、類型、寬度,根據以上提供的演算法修改“主體部分”資料表的相應的欄位內容;
④ 使用APPEND FROM 命令重新把“佈局部分”、“主體部分”和“環境部分”三個資料表連接到一個新的資料表中,該新表為欲列印的資料表的報表資料庫;
⑤ 使用報表命令,實現的報表控制輸出:予覽、列印及送入檔。
6、結束語
本文在分析研究FOXPRO報表資料庫的基礎上,實現了管理資訊系統中的通用動態製表問題。利用系統的強大功能,加以擴充生成新功能的設計有助於軟體的維護和標準化,利用類似的方法可以實現動態螢幕佈局等,該問題將另文介紹。
由於缺少這方面的資料,不當之處望批評指正。 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|