发票 分为表头和表体, 认款也是发票也是表头和表体
一个头对应多个表体,
然后 就出问题了,因为公司财务想统计发票的认款,但是 认款和发票的关联关系不是 表体和表体的关联,故而导致没办法使用正常的sql进行统计
认款的表体 一个字段记录发票单据号
认款表体 ----多对多----发票表体 ,想要统计发票表体的认款情况变得有点困难
一个认款只能记录一个发票头,但是一个发票可以有多个认款
比如发票金额100, 可以分两次或者三次认款完成,一次50.一次20,一次30,
当100 发票金额=100认款金额, 这个发票认款完成
但是 财务的美女们偶尔会出现胸大无脑的情况,于是可能100认款了200,然后这个单据错误,做红冲,做一个--200的认款,这样抵消那次200的情况,而且这种情况不止一次,也许在做以300,然后再来-300, 我在记录中看到有四到五次的这样情况。可能还做两次负认款的情况
提到上面种种情况, 没办法 ,我思考设计了一种方案,通过定时认款将数据记录到中间表中,然后使用中间表做数据统计
决定使用中间表,
记录几个重要的字段
pk_dktzd_b 认款表体行pk(id), mun 认款金额, billno 认款单据号,rowno认款行号,notax_cr认款剩余金额
vbillcode发票单据号,csaleinvoicebid 发票行pk(id)
vdef1 发票头金额
然后 思路 是这样处理
1、查询有认款没有认完的发票,也就是 如果发票号对应认款统计中,认款有有剩余的,就将发票查出来sql:
2、然后 查询出 认款没有认款完成的认款数据
3、通过 然后通过以认款为主的 匹配发票一次一次匹配记录 数据
举例如
发票 100 认款(1)120,(2)-120
发票 认款 已经认款 剩余认款 发票剩余
100 (1)120 100 20 0
0 (2)-120 -100 -20 100
100 (1) 20(120剩余认款) 20 0 80
80 ( 2 ) -20 (-120剩余认款) -20 0 100
此时 发票发票还有100 剩余, 已经认款0,已经认款完成的认款单据将不再查询出来了,
当有新认款来了后,该发票依然能查询出来进行匹配
当然 此处经过 都是 认款总金额和发票总金额进行统计实际上是认款对应发票行进行循环匹配
此处 做一下笔记 以防止到时候忘记具体实现思路了