VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

實現FOXPRO動態製表的新思路(轉貼)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作