Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]请教如何找出连号的发票?

阿四  发表于:2016-06-10 20:58:42  
复制

    假设有一张表,其中有一个字段为发票号码,字段值比如说 是 001;020;030;002;010;003;011; 030;012;013等等,问题是:如何将连号发票一组:001;002;003  另一组010;011;012;013过滤出来,并显示统计结果,3张连号发票为1组,4张连号为1组。

    为啥要过滤连号发票,因为出现多张连号发票并且金额为整数,有可能是虚开发票,从而确定审计重点。连号的张数不确定的。
    目的是将3张以上的连号发票查询并统计出来

 

Top
竹笛 发表于:2016-06-10 21:04:27

这个用查询并不能实现,需要去编写VBA代码实现。

思路是:

第1步根据明细表生成一个新的表,生成时按发票号从小到大排序,假定表名为 tbl发票号明细,具体字段有“序号”、“ 发票号”、“是否连号”

第2步对 tbl发票号明细 表用DAO或ADO代码进地循环统计,用下一条记录减上一条记录的值,如果值为1,则视为连号。



在水一方 发表于:2016-06-10 21:28:59

假设为纯数字的发票号,这里以三位数为例: 


SELECT 表1.发票号, DCount("id","表1","发票号='" & Format([发票号]+1,"000") & "'")+DCount("id","表1","发票号='" & Format([发票号]-1,"000") & "'") AS 连号

FROM 表1;


如果后面加上

WHERE (((DCount("id","表1","发票号='" & Format([发票号]+1,"000") & "'")+DCount("id","表1","发票号='" & Format([发票号]-1,"000") & "'"))>0));

则只显示连号的发票。




阿四 发表于:2016-06-10 22:57:46

谢谢解答,方案很巧妙。能否再加一个字段,姑且称之为“组号”,001、002 组号皆为1,  010、011、012组号皆为2,这样就知道共有2组连号的,不知道用函数能否实现?



在水一方 发表于:2016-06-11 16:29:01
SELECT 表1.发票号, DCount("id","表1","发票号='" & Format([发票号]+1,"000") & "'")+DCount("id","表1","发票号='" & Format([发票号]-1,"000") & "'") AS 连号, IIf(IsNull(DLookUp("发票号","表1","发票号='" & Format([发票号]-1,"000") & "'")),[发票号],"") AS 分组
FROM 表1

WHERE (((DCount("id","表1","发票号='" & Format([发票号]+1,"000") & "'")+DCount("id","表1","发票号='" & Format([发票号]-1,"000") & "'"))>0));

点击下载此附件



朱先生 发表于:2016-06-12 13:40:59

有认可吗?右图代码比左图简单



阿四 发表于:2016-06-14 18:31:28

朱先生:左图、右图均可,问题是如何实现呢,能给一个示例吗?谢谢



总记录:6篇  页次:1/1 9 1 :