上周事务所进场审计。带队的合伙人老张跟我认识很多年了。
他翻了我给的科目余额表和序时账,看了大概十分钟,抬头问我:你们是不是换系统了?这数据质量比去年强太多了。
我说没换,还是那套ERP。
他又翻了几页:那你们凭证交叉比对的底稿呢?
我把一个Excel丢给他。他看了两分钟,说了句让我挺爽的话——这个我们自己都不一定做得这么干净。
其实不是我厉害了。是Python帮我干了这个活。
凭证交叉比对是什么
干过审计或者接过审计的都知道,他们进场之后一定会做一件事:把总账和明细账交叉比对。
总账科目余额,应该等于该科目下所有明细科目余额之和。不等于,就是有问题。
但一个中型企业,一年下来少说几千张凭证。用Excel手工对,至少三天。如果你用VLOOKUP一个一个对,对到后面眼睛都花了,漏一两笔是常事。
审计发现不一致,你就得解释。解释不了就得调账。调账就要调报表,调报表就要一堆人陪你加班。
凭证交叉比对这件事,财务自己提前做了,审计进场你就体面。
Python三分钟做完
先看代码。别慌,我会一句一句解释。零基础也没事,最后给你一个直接能跑的模板。
import pandas as pdimport numpy as np# 第一步:读总账和明细账gl = pd.read_excel('总账.xlsx')sl = pd.read_excel('明细账.xlsx')# 第二步:按科目汇总明细账余额sl_summary = sl.groupby('科目代码')['期末余额'].sum().reset_index()sl_summary.columns = ['科目代码', '明细账余额']# 第三步:合并总账和明细账comparison = gl[['科目代码', '科目名称', '期末余额']].merge( sl_summary, on='科目代码', how='outer')comparison.columns = ['科目代码', '科目名称', '总账余额', '明细账余额']# 第四步:算差异comparison['差异'] = comparison['总账余额'] - comparison['明细账余额']comparison['差异率%'] = (comparison['差异'] / comparison['总账余额'].abs() * 100).round(2)# 第五步:筛出有差异的diff = comparison[comparison['差异'].abs() > 0.01]# 第六步:输出print(f'总科目数:{len(comparison)}')print(f'有差异科目数:{len(diff)}')print(f'差异率:{len(diff)/len(comparison)*100:.1f}%')with pd.ExcelWriter('凭证交叉比对结果.xlsx') as writer: comparison.to_excel(writer, sheet_name='全量比对', index=False) diff.to_excel(writer, sheet_name='差异明细', index=False)
从读数据到出报告,三分钟跑完。
关键点
groupby就是你手工的按科目汇总
你手工做的时候:打开明细账,找到科目代码1001(库存现金),把所有明细行余额加起来。然后去总账找1001的余额,对一下。
groupby就干这个。但它一秒种把所有科目全部分类汇总完了。
差异阈值设0.01
为什么不直接 != 0?
Excel浮点数有精度问题。有时候你看着两个数字都是1000.00,计算机里一个是1000.000000001,一个是1000.000000002。就差不到1分钱。
但你设 > 0,它会把这种也标出来。你就白费时间去查一个不存在的差异。
输出给审计看
生成的Excel有两个sheet:
把这个文件往审计面前一丢,对方的第一反应:你们财务部还挺专业的。
审计不是来查你的,是来查你账的。你把账做干净了,审计就是你最好的背书。
零基础怎么跑
装Python。 去python.org下载,安装时勾选"Add Python to PATH",必须勾。
装依赖。 Win+R输入cmd,输入 pip install pandas openpyxl,回车等装完。
准备数据。 把ERP里的总账和明细账导出Excel,分别命名为总账.xlsx和明细账.xlsx,放同一个文件夹。
跑代码。 把上面代码复制到记事本,另存为compare.py。文件夹里按住Shift右键,在此处打开PowerShell,输入 python compare.py。回车。
三分钟后文件夹里多了一个"凭证交叉比对结果.xlsx"。搞定了。
这套代码还能干什么
银行余额调节表。 把银行对账单导出来,跟银行日记账对一遍。银行那边多的、你这边没记的,一眼看出来。
进项税发票对账。 把税务局发票认证清单导出来,跟账面进项税额比。金税四期越来越严,提前对一遍能救命。
工资表对银行代发。 应付总额和实际代发必须一分不差。有差就是社保或个税基数录错了。
我犯过一个错
去年年底审计进场,我急着导出序时账。导出的时候选错了期间,从1月选到11月,漏了12月。
审计对账发现差异,让我解释。我来回查了四个小时,一直以为12月有笔调整凭证做重了。
最后发现——不是凭证错了,是数据漏导出了。
四个小时。就因为一个导出选错。
从那以后,每次给审计数据之前,我必跑一遍这个脚本。先确认数据是完整的、一致的,再交出去。
少被审计问一句,就少加一个小时的班。
明天早上的《AI财务工具大横评 EP02》,用上市公司真实年报数据测DeepSeek做财务分析。结果翻车了——翻在一个所有财务人都该警惕的地方。
你们公司审计进场,最怕被问到什么问题?评论区说说,我挑点赞最多的,下周专门写一篇"审计高频八问"的应对模板。