Vfp 文档 一些经典编程文章 可供初学者学习编程时使用

源代码在线查看: vfp中任意改变报表栏目的方法.txt

软件大小: 265 K
上传用户: xiao11tian
关键词: Vfp 编程 文档 初学者
下载地址: 免注册下载 普通下载 VIP

相关代码

				
				
				
				VFP 中任意改变报表栏目的方法 
				福建省福州电业局 
				黄飞虎 
				---- 
				
				一、引言
				在使用Foxpro编制报表处理程序时,有些报表的栏目是不确定的,例如工资构成表中的表外工资项目每个月都可能不一样,这时候就要求应用程序能让用户自己选择要打印的项目,任意改变所选项目的打印顺序,任意改变对应栏目的中文名称等,而不需要程序员每个月都来修改报表处理程序。本文介绍一种利用内存变量任意改变报表栏目名称和打印顺序的方法。 
				
				二、数据库设计
				 BWGZ.DBF:GH C(6)  工号, XM C(8) 
				 姓名, BWGZ01~BWGZ0n  N(7,2)  表外工资01~0n,
				              BWGZZE N(8,2)  表外工资总额
				LMDY.DBF:COL_NO N(2,0)  表栏打印顺序, 
				    ITEM_CH1 C(6)  表栏名称第一行,
				    ITEM_CH2 C(6)  表栏名称第二行,
				BWGZ_FLD C(8)  对应表外工资字段名
				    LSSTRU.DBF:GH C(6),M_P01~M_P0n N(7,2)
				    在这里,我们假定n≤9。当n>9时,处理方法类似。
				三、算法描述
				---- 将不用的栏目名称第一行改为'未定义',往栏目最后移动,并重新编排COL_NO顺序; 
				
				---- 按COL_NO顺序过滤掉LMDY.DBF中所有ITEM_CH1='未定义'的记录,得到有效栏目数SUM_ITEM; 
				
				---- 打印报表之前,按LMDY.DBF中COL_NO的顺序,将对应的表外工资字段的值保存到LSSTRU中: 
				
				与COL_NO=i对应的表外工资字段BWGZ_FLD 
				 ── >  LSSTRU.M_P0i  ,1≤i≤n;
				 4.修改BWGZ.DBF中BWGZ01~BWGZ0n的数值:
				        LSSTRU.M_P0i  ──>  BWGZ.BWGZ0i 
				          ,1≤i≤SUM_ITEM   
				0 ── >  BWGZ.BWGZ0i  
				1          ,SUM_ITEM<i≤n
				 5.打印报表之后,从LSSTRU还原BWGZ.DBF中BWGZ01~BWGZ0n的数值:
				        LSSTRU.M_P0i  ── >  
				 与COL_NO=i对应的表外工资字段BWGZ_FLD  ,
				 1≤i≤n。
				四、报表格式文件W_BWGZ.FRX设计说明
				---- 1.在“页标头”栏中绘制表头栏目如下: 
				
				┌──┬──┬────┬─────────────────────--┐
				│    │    │        │其中:                                  │
				│工号│姓名│表外工资├────┬────┬───┬───┬────┤
				│    │    │ 总额 │M_CH101 │M_CH102 │M_CH103│ ...│M_CH10n│
				│    │    │      │M_CH201 │M_CH202 │M_CH203│ ...│M_CH20n│
				└──┴──┴────┴────┴────┴───┴───┴────┘
				---- 其中,内存变量M_CH101~M_CH10n与M_CH201~M_CH20n分别代表报表栏目的第一、二行,它们的值按打印顺序从LMDY.DBF中取,可通过程序修改。 
				
				---- 2.在“细节”栏中添加BWGZ.DBF字段,并定义数值字段格式为@Z(如果为0保持为空): 
				
				│gh│xm│bwgzze│bwgz01│bwgz02│bwgz03│ ...  │bwgz0n│
				└─┴─┴───┴───┴───┴───┴───┴───┘
				---- 3.在“总结”栏中添加与“细节”栏对应的数值字段,并定义其计算属性为“总和”: 
				
				│ 合  计 │bwgzze│bwgz01│bwgz02│bwgz03│ ...  │bwgz0n│
				└────┴───┴───┴───┴───┴───┴───┘
				---- 
				
				五、功能说明
				---- 利用本文介绍的方法,只要改变LMDY.DBF中的栏目顺序号COL_NO即可改变对应数据的打印顺序,通过改变内存变量M_CH10i与M_CH20i (1≤i≤n)的值就可以改变打印出来的栏目名称。当栏目名称="未定义"时,不汇总也不打印该栏目。 
				
				六、源程序
				---- 报表栏目名称的修改与打印顺序的调整比较简单,这里就不介绍了。下面给出的是报表打印源 
				
				程序W_PRINT.PRG:
				PARAMETER N_COLUMN	
							&& N_COLUMN为栏目总数
				USE BWGZ IN 1	
					     	&& 打开表外工资数据库
				SELECT 2
				USE LMDY		
							&& 打开报表栏目定义库
				INDEX ON COL_NO TO LMDY_NO
				SUM_ITEM=0
				DO WHILE .NOT.EOF()
				   IF ITEM_CH1="未定义"
				      EXIT
				   ENDIF
				   SUM_ITEM=SUM_ITEM+1
				   SKIP
				ENDDO
				DIMENSION cur_copy[N_COLUMN+1,4]
				cur_copy[1,1]='GH'
				cur_copy[1,2]='C'
				cur_copy[1,3]='006'
				cur_copy[1,4]='000'
				i=1
				do while iSUM_ITEM,'',
				   alltrim(item_ch1))
				   m_ch2&jj=iif(col_no >SUM_ITEM,'',
				   alltrim(item_ch2))
				   m_rep&jj=alltrim(bwgz_fld)
				   SKIP
				enddo
				select 1
				go top
				do while .not.eof()
				   select 3
				   append blank
				   repl gh with a- >gh
				   i=1
				   do while i&m_rep&ii
				
				      i=i+1
				   enddo
				   select 1
				   skip
				enddo
				go top
				do while .not.eof()
				   select 3
				   seek a- > gh
				   select 1
				   i=1
				   do while i SUM_ITEM,
				0,c- > m_p&ii)
				      i=i+1
				   enddo
				   repl BWGZZE with BWGZ01
				   i=2
				   do while igh
				   select 1
				   i=1
				   do while im_p&ii
				
				      i=i+1
				   enddo
				   skip
				enddo
				CLOSE DATABASES
				ERASE LSSTRU.DBF
				ERASE LSSTR_GH.IDX
				---- 以上程序在中文版Windows 95和Visual Foxpro 5.0中运行通过。 
				 
				
				
				--------------------------------------------------------------------------------
				
				中国计算机世界出版服务公司版权所有 
				
				
							

相关资源