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

字號:

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