在VFP報表中實現(xiàn)每頁打印指定記錄數(shù)

字號:

VFP在各企事業(yè)單位中有著廣泛的應用,我用它開發(fā)了本單位使用的元器件檢測信息管理系統(tǒng),現(xiàn)在是本單位日常工作中不可缺少的管理工具。開發(fā)中自有許多心得,但最想跟大家談的是在報表中實現(xiàn)每頁打印指定記錄數(shù)這個問題。
    方法一
    在VFP的報表生成器中,編制報表,用調整報表頁頭帶和頁腳帶高度的方法來控制每頁要打印的記錄數(shù)據(jù),這是一種比較簡單、容易實現(xiàn)的方法。但是由于不同的計算機中默認的紙張大小不一樣,或者相同的紙型中的頁邊距設置不一樣而使得每頁打印的記錄數(shù)發(fā)生改變。這對于固定的用戶和固定的打印機、紙張來講,沒有什么問題,但如果軟件要運行于多臺電腦上或推廣到更廣泛的用戶中,就要考慮不同的打印機及紙張的問題了。此時可以用下面介紹的方法二和方法三來實現(xiàn)。
    另外,有很多用戶要求當表中的記錄數(shù)不是整頁數(shù)時在最后一頁中以空的表格填滿報表,也只有在下面的兩種方法中才能實現(xiàn)。
    方法二
    以下過程中假設報表中使用的表名為 TEMP.DBF
    在報表設計器中:
    1、將報表中的打印字段前面的別名前綴全部刪除。
    2、將報表數(shù)據(jù)環(huán)境中原來的表從數(shù)據(jù)環(huán)境中移去。
    3、在報表的數(shù)據(jù)環(huán)境的 Init 中放入以下代碼:
    *-- DetailNum 是細節(jié)帶中要打印的記錄數(shù),可在這里按需要進入修改
    local DetailNum
    DetailNum = 17
    *-- 以下 SQL語句消除刪除記錄對分組字段的影響及對數(shù)據(jù)進行適當?shù)呐判?BR>    SELECT * FROM TempsintosTABLE TMP1swheresNOT DELETED() &&&&sgroupsby 排序條件
    SELECT int((recno()-1)/DetailNum) as GroupCount, * ;
     FROM Tmp1 ;
    sintosCURSOR Temp2
    USE IN TMP1
    *-- 為保持一個干凈的環(huán)境,刪除剛剛建立的臨時過渡表
    delete file TMP1.dbf
    if file("TMP1.fpt")
     delete file TMP1.fpt
    endif
    *-- 注:你可以在上面的代碼中設置 DetailNum 的值為你所希望每頁報表要打印的記錄數(shù)。
    *-- 你也可以在第一句 SQL Select 中按你的需要設置sgroupsby 子句來排序數(shù)據(jù)。
    4、在報表中增加一個分組并設置分組表達式為 GroupCount(即上面第二個 SQL Select 語句中的第一個字段名), 并選擇每組從新的一頁上開始復選框。
    5、運行你的報表。
    6、最后要說明的是:在運行報表前應設置正確的路徑以便 VFP 可以找到報表所使用的表。