会计用Python只需简单四步就能将会计凭证“过账”到科目余额表了!

会计用Python只需简单四步就能将会计凭证“过账”到科目余额表了!

科目余额表对会计来说就像是老朋友,几乎每周都要见一次。

上周跟几米聊完之后,她说如果能早点接触到Python就不用每天都加班了,Python对财务人太友好了,除了能编会计凭证之外还能模拟ERP将凭证上的数据放到财务报表里。几米说她才学一周就把Python的基础语法过一遍了,现在已经进入到实战阶段!

其实Python跟财务结合的场景还有很多很多,今天就来跟大家介绍会计都爱用的Python自动计算科目余额表的功能

我们知道会计凭证“过账”之后,在ERP系统就可以查询到科目余额表了。

那么科目余额表是怎么来的呢?

一般来讲,科目余额表分为两组数据列,分别为交易币和本位币的期初余额、本期借方、本期贷方、期末余额。科目余额表的行展示的是科目+交易币种的组合。

对于金额列的取数逻辑:

  • 期初金额一般是从上期结转而来。
  • 一月份的期初数据是从上年结转而来,在我们今天的案例中,将年初数据作为一笔特殊的凭证存储在201900会计期间。
  • 本期借方金额和本期贷方金额其实就是凭证明细表按科目+币种+账套+会计期间汇总而来
  • 期末金额=期初金额+借方金额-贷方金额

一般的科目余额表长这样:

掌握了这些规律后,我们用Python写一段程序模拟ERP中的“过账”(将凭证过到科目余额表)操作

在开始之前,我们先观察科目余额表字段,分析数据处理需求,输入代码:

#读数据库以观察数据处理要求
sql_6=r''select*fromE03_TrialBalance"
df04=pd.read_sql(sql_6,engine)
df04.head()


接下来进入到用Python计算科目余额表的阶段~


1、汇总期初数

#传参:过账期间:201901
Period='201901'

#计算期初
if Period[-2:]=='01':
    #如果是1月份,取0期间作为期初数
    # a.按照账套币编码,科目代码,科目名称,币种 汇总金额
    df04_1 = df00[df00['会计期间']==Period[0:4]+'00'].groupby(['账套编码','科目代码','科目名称','交易币种'],as_index=False)['交易币借方','交易币贷方','本位币借方','本位币贷方'].sum()
    # b .计算期初交易币
    df04_1['期初交易币'] = df04_1['交易币借方'].fillna(0) - df04_1['交易币贷方'].fillna(0)
    #fillna(value):检测数据表中缺失值并替换成插入的value。
    df04_1['期初本位币'] = df04_1['本位币借方'].fillna(0) - df04_1['本位币贷方'].fillna(0)
    # c. 把不要的信息删除
    df04_1 = df04_1.drop(['交易币借方','交易币贷方','本位币借方','本位币贷方'],axis=1)
else:
    #如果非1月份,取上期期末数作为期初数
    df04_1['期初交易币'] = df04.loc[(df04['会计期间']==Period[0:4]+str(int(Period[-2:])-1).zfill(2)),['期末交易币']]
    df04_1['期初本位币'] = df04.loc[(df04['会计期间']==Period[0:4]+str(int(Period[-2:])-1).zfill(2)),['期末本位币']]
    #zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
df04_1.head()


2、汇总当月数

# 按照 账套编码,科目代码,科目名称,币种汇总金额并重命名列
df04_2 = df00[df00['会计期间']==Period].groupby(
    ['账套编码','科目代码','科目名称','交易币种'],as_index=False)['交易币借方','交易币贷方','本位币借方','本位币贷方'].sum().rename(
    columns={'交易币借方':'本期借方交易币','交易币贷方':'本期贷方交易币',
             '本位币借方':'本期借方本位币','本位币贷方':'本期贷方本位币'})
#rename()函数:重定义字段名
df04_2.head()


3、计算期末值

# 将期初数和本月数拼成一张表并计算期末值
df04 = pd.merge(df04_1,df04_2,on=['科目代码','科目名称','账套编码','交易币种'],how='outer')
df04.insert(1,'会计期间',Period)
df04['期末交易币'] = df04['期初交易币'].fillna(0)+df04['本期借方交易币'].fillna(0)-df04['本期贷方交易币'].fillna(0)
df04['期末本位币'] = df04['期初本位币'].fillna(0)+df04['本期借方本位币'].fillna(0)-df04['本期贷方本位币'].fillna(0)
df04.head()


4、将数据写入数据表:E03_TrialBalance

#a.先按账簿、期间删除表中数据
sql_5 = "DELETE FROM E03_TrialBalance WHERE 会计期间='201901'"
engine.execute(sql_5)

# b. 用to_sql()将df04 写入数据库
df04.to_sql(name='E03_TrialBalance',con=engine,if_exists='append',index=False)

# c.再重新读数据库以验证是否插入成功
sql_6=r"select * from E03_TrialBalance"
df04=pd.read_sql(sql_6,engine)
df04.head()

再打开数据库看一下,数据表里面的数据也生成了呢~到这一步,科目余额表生成完毕,从凭证到过账的步骤,借助代码就可以完成了!

能让财务解放双手“万能”的Python你还不赶紧来了解一下吗?


END
©图片版权归财码Python所有,如对版权有异议,请联系后台议定处理。
本文由财码Python整理发布,如需转载请务必注明以上信息。
发布于 2021-11-15 11:53