精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖源码共赏〗>>我自己写的自定义报表,大家可能参考提议

主题:我自己写的自定义报表,大家可能参考提议
发信人: thworkin(小乐子)
整理人: hunter__fox(2003-05-18 20:24:33), 站内信件
**大家使用前要先建一个报表,设好表头之类的布局,并在数据环境中加入表(当**然也可以仿照下述把记录加进去),没法子,自己摸出来的东西就是有点不完善
**希望各位能提意见

LOCAL c_data,c_title,n_msto,n_msle,n_mshe,n_mswi,n_dyhe,n_dyfs,n_msjg,n_msbl,l_zdzl

*C_DATA:数据来源
*C_TITLE:标题
*N_MSTO:明细区的TOP
*N_MSLE:明细区的LEFT
*N_MSHE:明细区的HEIGHT
*N_DYHE:单元格内容高度
*N_DYFS:单元格字体大小
*N_MSJG:明细区的资料间的间隔
*N_MSBL:明细区的资料内容长度与数据定义长度的比例
*L_ZDZL:明细区域自动置中
*注:A4纸页宽为 82500
*N_MSWI:明细区的WIDTH

c_data = "XXXXX"
c_title = "统计表"
n_msto = 12500
n_msle = 2500
n_mshe = 2000
n_dyhe = 1500
n_dyfs = 9
n_mswi = 0
n_msjg = 500
n_msbl = 950
l_zdzz = .T.

SELEC 1
USE c_data + ".DBF"
n_fcou = FCOUNT()

SELECT 2
USE hhh.frx
DELETE ALL FOR SUBSTR(uniqueid,1,5) = "_WORK"
PACK

n_bgpb = n_msle  &&用于储存报表字段长度累计

FOR i = 1 TO n_fcou
    c_i = ALLTRIM(STR(i))
    c_uniq = SUBSTR("TTTTT",1,5 - LEN(c_i)) + c_i
    c_line = SUBSTR("LLLLL",1,5 - LEN(c_i)) + c_i
    c_zdmi = SUBSTR("MMMM",1,5 - LEN(c_i)) + c_i
*    C_UNIQ = IIF(I<=9,"TTT0" + C_I,IIF(I<=99,"TTT" + C_I,"TT" + C_I))
* C_LINE = IIF(I<=9,"LLL0" + C_I,IIF(I<=99,"LLL" + C_I,"LL" + C_I))
SELECT 1
c_finame = FIELD(i)

n_lenfild = 0
GO TOP
DO WHILE !EOF()
c_fival = &c_finame
DO CASE
CASE TYPE("c_fival") = "C"
c_fidtochr = ALLTRIM(c_fival)
CASE TYPE("c_fival") = "N"
c_fidtochr = ALLTRIM(STR(c_fival))
CASE TYPE("c_fival") = "D"
c_fidtochr = DTOC(c_fival)
OTHERWISE
ENDCASE
n_lenfild = IIF(LEN(c_fidtochr) > n_lenfild,LEN(c_fidtochr),n_lenfild)
        SKIP
    ENDDO

    n_filen =  n_lenfild * n_msbl
    SELECT 2
    APPEN BLANK
    REPLACE platform WITH "WINDOWS",objtype WITH 5,objcode WITH 0,;
        EXPR WITH " " + c_finame + "   ",vpos WITH n_msto - 3500,hpos WITH n_bgpb + n_msjg,;
        HEIGHT WITH n_dyhe,WIDTH WITH n_filen,penred WITH -1,;
        pengreen WITH -1,penblue WITH -1,fillred WITH -1,supgroup WITH 3,;
        fillgreen WITH -1,fillblue WITH -1,fontface WITH "宋体",;
        FONTSIZE WITH 9,mode WITH 1,supalways WITH .T.,offset WITH 2;
        supgroup WITH 3,uniqueid WITH "_WORK" + c_zdmi

    APPEN BLANK  && 放置字段
    REPLACE platform WITH "WINDOWS",objtype WITH 8,objcode WITH 0,;
        EXPR WITH c_data + "." + c_finame,vpos WITH n_msto + (n_mshe - n_dyhe)/2,;
        hpos WITH n_bgpb + n_msjg,;
        HEIGHT WITH n_dyhe,WIDTH WITH n_filen,fillchar WITH "C",penred WITH -1,;
        pengreen WITH -1,penblue WITH -1,fillred WITH -1,;
        fillgreen WITH -1,fillblue WITH -1,fontface WITH "宋体",;
        FONTSIZE WITH n_dyfs,mode WITH 1,supalways WITH .T.,;
        uniqueid WITH "_WORK" + c_uniq

    n_bgpb = n_bgpb + n_filen + n_msjg * 2
    APPEN BLANK  &&描竖线,字段间的间隔线
    REPLACE platform WITH "WINDOWS",objtype WITH 6,objcode WITH 0,;
        vpos WITH n_msto + 50,hpos WITH n_bgpb,;
        HEIGHT WITH n_mshe + 150,WIDTH WITH 100,penred WITH -1,;
        pengreen WITH -1,penblue WITH -1,fillred WITH -1,;
        fillgreen WITH -1,fillblue WITH -1,pensize WITH 1,;
        penpat WITH 8,supalways WITH .T.,uniqueid WITH "_WORK" + c_line
*    N_BGPB = N_BGPB + N_FILEN + N_MSJG * 2
ENDFOR

SELECT 2
n_mswi = hpos - n_msle
c_i = ALLTRIM(STR(i+1))
*C_LINE = IIF(I+1<=9,"LLL0" + C_I,IIF(I+1<=99,"LLL" + C_I,"LL" + C_I))
c_line = SUBSTR("LLLLL",1,5 - LEN(c_i)) + c_i
APPEN BLANK &&左端第一条坚线
REPLACE platform WITH "WINDOWS",objtype WITH 6,objcode WITH 0,;
vpos WITH n_msto - 100,hpos WITH n_msle,;
HEIGHT WITH n_mshe + 245,WIDTH WITH 100,penred WITH -1,;
pengreen WITH -1,penblue WITH -1,fillred WITH -1,;
fillgreen WITH -1,fillblue WITH -1,pensize WITH 1,;
penpat WITH 8,supalways WITH .T.,uniqueid WITH "_WORK" + c_line

c_i = ALLTRIM(STR(i+2))
*C_LINE = IIF(I+2<=9,"LLL0" + C_I,IIF(I+2<=99,"LLL" + C_I,"LL" + C_I))
c_line = SUBSTR("LLLLL",1,5 - LEN(c_i)) + c_i
APPEN BLANK &&上方第一条横线
REPLACE platform WITH "WINDOWS",objtype WITH 6,objcode WITH 0,;
vpos WITH n_msto - 2200,hpos WITH n_msle,;
HEIGHT WITH 100,WIDTH WITH n_mswi + 100,penred WITH -1,;
pengreen WITH -1,penblue WITH -1,fillred WITH -1,;
fillgreen WITH -1,fillblue WITH -1,pensize WITH 1,;
penpat WITH 8,supalways WITH .T.,uniqueid WITH "_WORK" + c_line

APPEN BLANK &&数据行线
c_i = ALLTRIM(STR(i+3))
*C_LINE = IIF(I+3<=9,"LLL0" + C_I,IIF(I+3<=99,"LLL" + C_I,"LL" + C_I))
c_line = SUBSTR("LLLLL",1,5 - LEN(c_i)) + c_i
REPLACE platform WITH "WINDOWS",objtype WITH 6,objcode WITH 0,;
vpos WITH n_msto + n_mshe,hpos WITH n_msle,;
HEIGHT WITH 100,WIDTH WITH n_mswi + 100,penred WITH -1,;
pengreen WITH -1,penblue WITH -1,;
fillgreen WITH -1,fillblue WITH -1,pensize WITH 1,;
penpat WITH 8,supalways WITH .T.,uniqueid WITH "_WORK" + c_line

DO CASE
CASE l_zdzz .AND. n_mswi < 82500
n_kbqu = (82500 - n_mswi)/2
DO CASE
CASE n_msle > n_kbqu
        REPLACE ALL FOR SUBSTR(uniqueid,1,5) = "_WORK" hpos WITH hpos - (n_msle - n_kbqu)
    CASE n_msle < n_kbqu
REPLACE ALL FOR SUBSTR(uniqueid,1,5) = "_WORK" hpos WITH hpos + (n_kbqu - n_msle)
otherwise
ENDCASE
CASE l_zdzz .AND. n_mswi >= 82500
    REPLACE ALL FOR SUBSTR(uniqueid,1,5) = "_WORK" hpos WITH hpos - n_msle
ENDCASE

APPEN BLANK
REPLACE platform WITH "WINDOWS",objtype WITH 5,objcode WITH 0,;
    EXPR WITH " " + c_title + " ",vpos WITH 3500,hpos WITH (82500 - LEN(c_title)*1150)/2,;
    HEIGHT WITH 3500,penred WITH -1,WIDTH WITH LEN(c_title) * 2000,;
    pengreen WITH -1,penblue WITH -1,fillred WITH -1,;
    fillgreen WITH -1,fillblue WITH -1,fontface WITH "宋体",;
    FONTSIZE WITH 16,mode WITH 1,supalways WITH .T.,offset WITH 2;
    supgroup WITH 3,uniqueid WITH "_WORK" + "TITLE"

SELECT 1
USE
SELECT 2
USE

REPORT FORM hhh.frx PREVIEW


[关闭][返回]