⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +

📁 visualfoxpro企业会计电算化实例
💻
字号:
*************************************************************
*****                 科目与凭证查询.prg                *****
*************************************************************
CLOSE DATA                                                   && 关闭数据库
SET TALK OFF                                                 && 阻止对话结果传送到窗口
SET CENTURY ON                                               && 指定用四位数表示年 
SET DATE ANSI                                                && 日期格式yy.mm.dd
CLEAR ALL                                                    && 请屏幕CLEAR
@ 0,0 SAY SPACE(33)+'财  务  查  询'+SPACE(32) COLOR RGB(255,0,0)  && 显示信息,前景红色
DEFINE WINDOW test1 FROM 1, 1 TO 12, 32 TITLE " 类别选择 " GROW CLOSE  && 定义窗口
ACTIVATE WINDOW test1                                        && 激活窗口
DEFINE WINDOW test2 FROM 1, 32 TO 12, 98 TITLE " 明细或文件选择 " GROW  CLOSE && 定义窗口
ACTIVATE WINDOW test2                                        && 激活窗口
DEFINE WINDOW test3 	FROM 11.5, 0 TO 26, 98 TITLE " 科目明细或凭证浏览 " ;
	ZOOM  MINIMIZE FLOAT GROW CLOSE                          && 定义窗口
ACTIVATE WINDOW test3                                        && 激活窗口
STORE 1 TO k,kk                                              && 初始化变量
DO WHILE .T.                                                 && 循环 
	ACTIVATE WINDOW test1                                    && 激活窗口
	CLEAR                                                    && 请窗口
	@ 0.5,5 GET k FUNC '*vt 科目及其明细;科目各月合计;转帐记帐凭证;收付记帐凭证' ;
		SIZE 1.2,20,0.5                                      && 纵向按钮
	READ CYCLE                                               && 激活对象
	DO rk                                                    && 调用过程,按Ctrl_End结束程序
	ACTIVATE WINDOW test2                                    && 激活窗口
	DIME b(100)                                              && 定维数组
	STORE ' ' TO b                                           && 初始化数组
	DO CASE                                                  && 根据情况判断处理
		CASE k=1                                             && 当选择了科目及其明细
			DO kmjqmx                                        && 运行科目及其明细过程
		CASE k=2                                             && 当选择了科目各月合计 
			DO kmgyhj                                        && 运行科目各月合计过程
		CASE k=3                                             && 当选择了转帐记帐凭证
			N=ADIR(a,'zz*.dbf')                              && 将转账凭证文件信息存放在数组a中
		CASE k=4                                             && 当选择了收付记帐凭证
			N=ADIR(a,'sf*.dbf')                              && 将收付凭证文件信息存放在数组a中
	ENDCASE
	IF N=0                                                   && 如果文件的数量等于0,说明没有此类文件
		WAIT WINDOW '未有此类文件' TIMEOUT 5                 && 显示信息
		CLEAR WINDOW ALL                                     && 释放全部窗口		
	ELSE
		DIME b(N),c(N)                                       && 定维数组
		FOR i=1 TO N                                         && 循环
			IF LEN(a(i,1))=10                                && 如果文件名的长度等于10(通项)   
				b(i)=a(i,1)+'    '+DTOC(a(i,3))+'  '+a(i,4)+'  '+a(i,5)
                  ** 文件名            文件日期   	文件时间	文件属性(A 可读写)		
				c(i)=10                                      && 记下长度
			ELSE                                             && 否则,文件名的长度等于12(内容)
				b(i)=a(i,1)+'   '+DTOC(a(i,3))+'  '+a(i,4)+'  '+a(i,5)
				c(i)=12                                      && 记下长度
			ENDIF
		NEXT
		@ 0,1 GET kk FROM b FUNC '&t ' SIZE 8,45             && 文件名List列表
		READ CYCLE                                           && 激活对象
		DO rk                                                && 调用过程,按Ctrl_End结束程序
		DEFINE WINDOW test3 FROM 11.5, 0 TO 28,98 TITLE " 凭证浏览 " ;
			ZOOM  MINIMIZE FLOAT GROW CLOSE                  && 定义窗口
		ACTIVATE WINDOW test3                                && 激活窗口
		IF A(kk,1)='ZZ'                                      && 如果是查询转账凭证  
			USE (a(kk,1)) ORDER TAG (SUBSTR(a(kk,1),1,IIF(LEN(a(kk,1))=10,6,8))) && 打开表及复合索引文件
		ELSE                                                 && 否则,是查询收付凭证
			USE (a(kk,1)) INDEX (SUBSTR(a(kk,1),1,IIF(LEN(a(kk,1))=10,6,8))) && 打开表及索引文件
		ENDIF                              && 应该提倡使用复合索引文件,这里是为了提供比较
		IF c(kk)=10                                          && 如果是通项
			SUM 金额合计 TO jehj_m                           && 累加金额合计
			STORE '金额合计:'+STR(jehj_m,10,2) TO w          && 组成字符串 
			WAIT WINDOW w                                    && 显示信息
		ELSE                                                 && 否则,是内容
			SUM 借方 TO jfhj_m                               && 累加借方合计
			SUM 贷方 TO dfhj_m                               && 累加贷方合计
			STORE '借方合计:'+STR(jfhj_m,10,2)+'  贷方合计:'+STR(dfhj_m,10,2) TO w
			WAIT WINDOW w                                    && 显示信息
		ENDIF
		BROW IN WINDOW test3 NOAPPEND NOEDIT NODELETE NOCLEAR && 浏览
		DO rk                                                && 调用过程,按Ctrl_End结束程序
	ENDIF
ENDDO                                                        && 下一个DO循环  
RETURN

	PROC kmjqmx                                              && 查询科目及其明细过程
		DIME a(200),b(85),mx1(5000),mx(1000,12)              && 定维数组
		STORE 0 TO a                                         && 初始化数组
		STORE ' ' TO b                                       && 初始化数组
		USE zk85                                             && 打开表‘ZK85’(总控85,内含85个科目) 
		COPY TO ARRAY zza                                    && 复制到数组
		FOR i=1 TO RECC()                                    && 循环
			b(i)=zza(i,2)                                    && 赋值到一维数组
		NEXT
		STORE 1 TO h,m                                       && 初始化变量
		DO WHILE .T.                                         && 循环
			DEFINE WINDOW test1 FROM 1, 1 TO 11, 32 TITLE "科目选择 "+' Esc 反回主目录 ';
			 DOUBLE GROW  CLOSE                              && 定义窗口
			ACTIVATE WINDOW test1                            && 激活窗口
			@ 0,0 GET h FROM b FUNC '&t ' SIZE 8,29          && 科目List列表
			READ CYCLE                                       && 激活窗口
			DO rkk                                           && 键控过程,按ESC重新启动科目与凭证查询
			DO rk                                            && 调用过程,按Ctrl_End结束程序
			IF zza(h,5)='选用科目'                           && 如果是选用科目
				IF FILE(zza(h,3)+'.dbf')                     && 如果文件存在
					USE &zza(h,3)                            && 打开科目文件
					ACTIVATE WINDOW test2                    && 激活窗口
					CLEAR                                    && 清窗口
					DEFINE WINDOW test3 FROM 11.5,1 TO 28, 98 TITLE " 细目: "+zza(h,2)+;
					 '     Ctrl_End退出' ZOOM  MINIMIZE FLOAT GROW CLOSE  && 定义窗口
					ACTIVATE WINDOW test3                    && 激活窗口
					BROW IN WINDOW test3 NOAPPEND NOEDIT NODELETE NOCLEAR && 浏览
					DO rk                                    && 调用过程,按Ctrl_End结束程序   
				ELSE                                         && 否则				
					WAIT WINDOW  '未建此帐'                  && 显示信息
				ENDIF
			ENDIF
			IF zza(h,5)='选用明细'                           && 如果是选用明细
				IF FILE(zza(h,4)+'.dbf')                     && 如果文件存在
					USE &zza(h,4)                            && 打开明细联系表
					COPY TO ARRAY mx                         && 复制到数组
					IF RECC()>=1                             && 如果纪录个数大于0  
						DIME mx1(RECC())                     && 定维数组
						FOR i=1 TO RECC()                    && 循环
							mx1(i)=mx(i,1)+mx(i,2)           && 赋值,明细名称和表名
						NEXT 
						ACTIVATE WINDOW test2                && 激活窗口
						@ 0,0 GET m FROM mx1 FUNC '&t' SIZE 8,47 && 明细联系表List列表
						READ                                 && 激活对象
						DO rk                                && 调用过程,按Ctrl_End结束程序
						DEFINE WINDOW test3	FROM 11.5, 1 TO 28, 98 TITLE ' 细目:  '+;
						mx(m,1)+'     Ctrl_End退出' ZOOM  MINIMIZE FLOAT GROW CLOSE && 定义窗口
						ACTIVATE WINDOW test3                && 激活窗口
						IF FILE(mx(m,2)+'.dbf')              && 如果明细文件存在
							USE &mx(m,2)                     && 打开明细表
							BROW IN WINDOW test3 TITLE ' 细目:'+mx(m,1)+'     Ctrl_End退出';
							NOEDIT NOAPPEND NODELETE NOCLEAR && 浏览
							DO rk                            && 调用过程,按Ctrl_End结束程序
						ELSE                                 && 否则
							WAIT WINDOW '未建此帐'           && 显示信息
						ENDIF
					ENDIF
				ELSE                                         && 否则
					WAIT WINDOW '未建此帐'                   && 显示信息     
				ENDIF
			ENDIF
			IF zza(h,5)='暂不使用'                           && 如果选择了暂不使用
				WAIT WINDOW '暂不使用本科目'                 && 显示信息
			ENDIF
		ENDDO                                                && 下一个DO循环
		WAIT WINDOW '按任意键'                               && 显示信息
		CLEAR WINDOW test1, test2,test3                      && 释放窗口
		CLEAR                                                && 清屏幕
		RETURN                                               && 返回主程序  

	PROC kmgyhj                                              && 过程,查询科目各月合计
		DIME a(200),b(85),mx1(5000),mx(1000,12)              && 定维数组   
		STORE 0 TO a                                         && 初始化数组
		STORE ' ' TO b                                       && 初始化数组
		USE zk85                                             && 打开表‘ZK85’(总控85,内含85个科目)
		COPY TO ARRAY zza                                    && 复制到数组
		STORE 0 TO k                                         && 初始化变量
		FOR i=1 TO RECC()                                    && 循环
			IF zza(i,5)<>'暂不使用 '                         && 如果选用与否等于暂不使用
				k=k+1                                        && 计数器加 1  
				b(k)=zza(i,2)                                && 赋值到一维数组
			ENDIF
		NEXT                                                 && 下一个FOR循环
		STORE 1 TO h                                         && 初始化变量
		DO WHILE .T.                                         && 循环
			DEFINE WINDOW test1 FROM 1, 1 TO 12, 32  TITLE " 科目选择 "	;
			 DOUBLE  GROW CLOSE                              && 定义窗口
			ACTIVATE WINDOW test1                            && 激活窗口
			@ 0,0 GET h FROM b FUNC '&t ' SIZE 8,29          && 科目List列表
			READ CYCLE                                       && 激活对象
			DO rkk                                           && 键控过程,按ESC重新启动科目与凭证查询
			DO rk                                            && 调用过程,按Ctrl_End结束程序
			FOR i=1 TO 85                                    && 循环
				IF b(h)=zza(i,2)                             && 如果科目名相等
					IF FILE(zza(i,6)+'.dbf')                 && 如果文件存在
						USE &zza(i,6)                        && 打开月合计表
						ACTIVATE WINDOW test2                && 激活窗口 
						CLEAR                                && 清窗口
						DEFINE WINDOW test3 FROM 11.5, 1 TO 28, 98 TITLE " 科目: "+;
						 zza(i,2)+'  各月合计总页  'ZOOM  MINIMIZE FLOAT GROW CLOSE
						ACTIVATE WINDOW test3                && 激活窗口
						BROW IN WINDOW test3 NOAPPEND NOEDIT NODELETE NOCLEAR  && 浏览
						DO rk                                && 调用过程,按Ctrl_End结束程序
					ELSE                                     && 否则
						WAIT WINDOW  '未建此帐'              && 显示信息
					ENDIF
				ENDIF
			NEXT                                             && 下一个FOR循环
		ENDDO                                                && 下一个DO循环
		RETURN                                               && 返回主程序

	PROC rk                                                  && 键控过程,按Ctrl_End结束程序
		IF READKEY()=270                                     && 如果按了Ctrl_End
			CLEAR ALL                                        && 释放内存变量、窗口,关闭表
			CLEAR                                            && 清屏幕
			CANCEL                                           && 结束程序的执行   
		ENDIF
		RETURN                                               && 过程结束

	PROC rkk                                                 && 键控过程
		IF READKEY()=268.OR.READKEY()=12                     && 如果按了Esc
			CLEAR ALL                                        && 释放内存变量、窗口,关闭表
			DO 科目与凭证查询                                && 重新启动科目与凭证查询
		ENDIF
		RETURN                                               && 过程结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -