财务每天都要跟会计凭证打交道,对于刚入门的财务而言,编制会计凭证是必修课!
对于一般的交易,会计或总账财务人员收到单据后,会按照单据上的金额录入核算系统形成会计凭证,但是当遇到交易数量庞大的时候,财务手工录入凭证难免会出现录错、遗漏的情况。
昨晚,小秘书刷到了学员几米的朋友圈,发现她每月初都要通宵加班做会计凭证。
唉~财务人真的太不容易了,我看完朋友圈之后就找几米聊了一下,会计凭证这类复制粘贴的工作其实可以用Python去完成。
如果你也有跟几米同样的困惑,那快来学习如何用Python编制会计凭证吧!
几米就职于一家名叫Yummy的经营连锁餐厅,在中国有多家门店,主要售卖汉堡、薯条、炸鸡等快餐食品。
Yummy公司目前通过“采购业务系统”实现原材料采购的下单、请款、支付、验收全过程管理。这些数据最终会汇总到财务部进行采购及应付会计核算。
2019年1月底,Yummy公司收到来自“采购业务系统”传送的数据,我们需要根据这些数据去编写Python程序,实现用Python编制会计凭证的功能。
接下来,我们结合案例看如何用Python编制会计凭证!
1
分析凭证处理要求
观察数据库,这就是用户在核算系统前台看到的凭证在数据库里存储的样子,下图是数据库字段:
要求:从采购业务的每一笔交易数据,分析科目代码、科目名称、交易币种、借贷方金额等信息,并将门店和供应商关键信息作为凭证的辅助核算字段,最后赋予每笔凭证各自的编号、凭证日期、行号。
2
梳理业务与准则依据
从上述数据中,我们可以看到公司存在两种付款模式,对于一般的采购,Yummy公司在下单时先预付供应商款项。可以就个别合同向供应商申请信用期付款,也就是验收货物后一段时间再支付货款。
因此,对于预付模式,在下单时间确认预付账款:
- 借:预付账款
- 贷:银行存款
在入库时确认原材料
- 借:原材料
- 应交税费-进项税额
- 贷:预付账款
对于应付模式,在入库时确认原材料:
- 借:原材料
- 应交税费-进项税额
- 贷:应付账款
在付款时核销应付
- 借:应付账款
- 贷:银行存款
3
两种付款模式的凭证处理
预付模式:
1)第一个预付模式会计分录,在下单时间确认预付账款:
- 借:1123-预付账款
- 贷:1002-银行存款
a.在采购数据中,筛选预付模式交易,以下单时间为凭证日期,借:预付账款,编制凭证第一行。
#筛选数据
df02_1=d[df01['预付应付']=='预付',['下单时间','门店','供应商','含税金额','不含税金额','进项税额','交易币种']].rename(columns={'下单时间':'凭证日期','门店':'辅助核算1','供应商':'辅助核算2'})
#凭证编号这里设置为:两组随机数相加后转换成16进制进行存储
df02_1['凭证编号'] = np.random.randint(10000,99999,df02_1['凭证日期'].shape) + np.random.randint(1000,9999,df02_1['凭证日期'].shape)
#hex函数转换成16进制,upper将字母转换成大写
df02_1['凭证编号'] = df02_1['凭证编号'].map(lambda x: hex(x).upper())
df02_1['行号'] = 1
df02_1['科目代码'] = '1123'
df02_1['科目名称'] = '预付账款'
df02_1['交易币借方'] = df02_1['含税金额']
df02_1['交易币贷方'] = np.nan #np.nan代表数组中的缺失值(空值)
d()
b.复制第一行凭证,科目修改为银行存款,金额修改为贷:含税金额
df02_2 = d()
df02_2['行号'] = 2
df02_2['科目代码'] = '1002'
df02_2['科目名称'] = '银行存款'
df02_2['交易币借方'] = np.nan
df02_2['交易币贷方'] = df02_2['含税金额']
d()
2)第二个分录,在入库时确认原材料
- 借:1403-原材料
- 22210102-应交税费-进项税额
- 贷:1123-预付账款
a.筛选预付模式下的已入库交易,以入库时间为凭证日期,借记原材料,金额为不含税
#筛选数据
df02_3 = d[(df01['预付应付']=='预付')&(df01['是否入库']=='是'),['入库时间','门店','供应商','含税金额','不含税金额','进项税额','交易币种']].rename(columns={'入库时间':'凭证日期','门店':'辅助核算1','供应商':'辅助核算2'})
#随机生成凭证编号
df02_3['凭证编号'] = np.random.randint(10000,99999,df02_3['凭证日期'].shape) + np.random.randint(1000,9999,df02_3['凭证日期'].shape)
df02_3['凭证编号'] = df02_3['凭证编号'].map(lambda x: hex(x).upper())
df02_3['行号'] = 1
df02_3['科目代码'] = '1403'
df02_3['科目名称'] = '原材料'
df02_3['交易币借方'] = df02_3['不含税金额']
df02_3['交易币贷方'] = np.nan
d()
b.复制第一行凭证,借进项税额
df02_4 = d()
df02_4['行号'] = 2
df02_4['科目代码'] = '22210102'
df02_4['科目名称'] = '增值税-进项税额'
df02_4['交易币借方'] = df02_4['进项税额']
df02_4['交易币贷方'] = np.nan
d()
c.复制第一行凭证,贷方冲减预付账款,含税金额
df02_5 = d()
df02_5['行号'] = 3
df02_5['科目代码'] = '1123'
df02_5['科目名称'] = '预付账款'
df02_5['交易币借方'] = np.nan
df02_5['交易币贷方'] = df02_3['含税金额']
d()
3)将上述两笔凭证数据拼成一个完整的dataframe
df02=([df02_1,df02_2,df02_3,df02_4,df02_5],sort=False).sort_values(['凭证日期','凭证编号','行号']).rest_index(drop=Ture)
d()
【应付模式】参考【预付模式】的写法,形成不同的分录即可。
b.最后一步,我们再核对一下会计凭证要求的信息,做最后的加工处理,补充如下字段信息。
到这里,所有凭证相关的数据都处理完了~我们将生成的会计凭证存储到数据库中去!
用Python编制会计凭证可以避免手工输入带来的错漏,而且用时短,效率高可以说是财务工作中不可缺少的工具了。
END
©图片版权归财码Python所有,如对版权有异议,请联系后台议定处理。
本文由财码Python整理发布,如需转载请务必注明以上信息。