发信人: 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
 
  | 
 
 
 |