注册 登录
编程论坛 VFP论坛

由费用明细帐.dbf动态生成 费用统计表.dbf

王咸美 发布于 2025-10-19 23:09, 430 次点击
由费用明细帐.dbf动态生成 费用统计表.dbf。要求:费用统计表.dbf中字段 “车费”、“餐费”、“住宿费”、“快递费”由 费用明细帐.dbf中的“费用明细”动态生成,不固定,随着记录的增加还可能出现 “交通费”、“通讯费”、……
请高手赐教,万分感谢!!!
只有本站会员才能查看附件,请 登录

原始表样式:
只有本站会员才能查看附件,请 登录

结果表样式
只有本站会员才能查看附件,请 登录
10 回复
#2
schtg2025-10-20 06:28
回复 楼主 王咸美
前些天讨论 https://bbs.bc-cn.net/thread-514544-2-1.html 第19楼已经给出了解决办法,只需要将竖表变横表就可以啦。
#3
王咸美2025-10-20 06:31
19楼不是我想要的结果,未用上我提供的原始表文件,字段名也不是动态生成的。
#4
sam_jiang2025-10-20 06:46
自己是一点脑子都不动啊
#5
王咸美2025-10-20 09:30
因为是新手,请见谅。
#6
wengjl2025-10-20 13:21
程序代码:

       ***************
       * 名称:将费用明细转换成按项目列表
       * 来源:https://bbs.bc-/thread-514545-1-1.html
       * 时间:2025-10-20
       * 思路:因原表费用明细中的记录缺少规律,第一步去掉 “,”号,使之有规律性;
       *       第二步提取“XX费”的名称;第三步创建统计;第四步进行统计;第五步算合计。
       *       以上五步中有一个BUG,即 当“XX费”的长度超过5个汉字,会出错。
       ***************
       SET SAFETY off
       SET engi 70
       CLOSE DATABASES
      
       SELECT * from 费用明细帐 into table ls
       SELECT ls
       REPLACE 费用明细 with STRTRAN(费用明细,[],[]) ALL   &&& 第一步完成
       zfc=[,]
       SELECT ls
       GO top
       SCAN
         fymx=费用明细
         n=OCCURS([],fymx)
         k1=1
         FOR i=1 to n
           k2=AT([],fymx,i)
           y=AT([],fymx,i)
           c_zf=SUBSTR(fymx,k1,k2-k1+2)
           IF !c_zf$zfc
             zfc=zfc+[0000000.00 as ]+c_zf+[,]
           ENDIF
           k1=y+2
         ENDFOR
         SELECT ls
       ENDSCAN      &&& 第二步完成
       c_zdm=[日期]+zfc+[合计]
       SELECT &c_zdm. from ls into table 费用统计表   &&& 第三步完成
       SELECT 费用统计表
       USE 费用统计表 alia bmk
       SELECT ls
       GO top
       SCAN
         fymx=费用明细
         n=OCCURS([],fymx)
         k1=1
         FOR i=1 to n
           k2=AT([],fymx,i)
           y=AT([],fymx,i)
           zdm=SUBSTR(fymx,k1,k2-k1+2)
           n_rmb=VAL(SUBSTR(fymx,k2+2,y-k2-2))
           SELECT bmk
           LOCATE for bmk.日期=ls.日期
           IF FOUND()
             REPLACE ([bmk.]+zdm) with n_rmb
           ENDIF
           k1=y+2
         ENDFOR
         SELECT ls
       ENDSCAN      &&& 第四步完成
       SELECT bmk
       GO top
       SCAN
         sn=0
         FOR i=2 to FCOUNT()-1
           sn=sn+EVALUATE(FIELD(i))
         ENDFOR
         REPLACE 合计 with sn
         SELECT bmk
       ENDSCAN      &&& 第五步完成
       CLOSE DATABASES
       QUIT

#7
kangss2025-10-20 14:22
以下是引用王咸美在2025-10-19 23:09:26的发言:

由费用明细帐.dbf动态生成 费用统计表.dbf。要求:费用统计表.dbf中字段 “车费”、“餐费”、“住宿费”、“快递费”由 费用明细帐.dbf中的“费用明细”动态生成,不固定,随着记录的增加还可能出现 “交通费”、“通讯费”、……
请高手赐教,万分感谢!!!

原始表样式:

结果表样式

你这种不符合财务、编程规范,鉴于楼房不高,建议赶紧拆了重建,否则以后麻烦的事情更多

日期            科目/项目    金额    备注
2025.10.06    101 车费        0.68
2025.10.06    102 餐费        106
2025.10.06    103 住宿费      1600
...

这样建立表格,以后统计汇总都方便。你那种属于自己挖坑,以后的麻烦事情更多
#8
kangss2025-10-20 14:27
只有本站会员才能查看附件,请 登录

参考百度上的各种表格
#9
sxcl78992025-10-20 14:28
楼上说得对,最好采用主、子表方式,建立明细子表,不能把所有内容都放在主表的一个字段里面。
#10
王咸美2025-10-20 15:24
谢谢!能否将“合计”字段放在最后
#11
kangss2025-10-20 16:26
回复 10楼 王咸美
最简单的办法:用label做合计,放到grid的下边
1