网站首页 > 技术文章 正文
对于应收账款,作为财务的你是否在关心:谁欠钱?谁欠的多?谁欠的久?
当应收账款未能按时收回时,就会降低企业资金的使用效率,使企业效益下降。
在赊销业务中,企业发出商品并开票确认收入后,货款却不能同步到账,这种没有货款回笼的销售收入,势必会形成没有现金流入的会计利润,企业还需垫支由此产生的相关税款。
对于应收账款的管理成本、清欠过程中的中介费用等都会增加企业的现金流出,这不仅占用了大量的流动资金,还将影响企业现金流的正常运转。
在今天的案例中,为规避应收账款变成坏账的风险,小秘书将与大家分享跟应收账款账龄分析相关的实用工具,教大家如何借助数字化技术Python依据应收账款数据的“凭证日期”统计账龄。
在案例中,我们将运用先进先出的原则:
- 如果应收账款借方发生额已经实现回款,那么,这部分交易不影响我们对应收账龄的统计;
- 倒序统计应收账款余额分布在哪几笔借方发生里(定义为“实际应收”),即可按实际应收借方发生的日期统计应收账款账龄。
(在本次案例中,我们暂不考虑应收账款借方红字的情况)
一般来说,应收账款清账操作需要在核算系统中找到对应的应收账款借方凭证,然后对该笔凭证进行冲销。在这种情况下,统计应收账款账龄只需要找到未冲销的应收账款,计算凭证日期/交易日期至统计日期的间隔时长就可以了。
我们使用先进先出的方法统计截止2020/9/30的应收账龄,账龄分段格式如下:
1
数据准备
引入应收账款凭证数据:
import pandas as pd
from datetime import datetime, date
import warnings
warnings.filterwarnings("ignore")
pd.options.display.float_format = '{:,.2f}'.format
file = '财会实验数据.xlsx'
df = pd.read_excel(file, sheet_name='客户往来账')
df.fillna(0,inplace=True)
df
2
数据处理
根据实验要求,按每个客户先进先出的原则统计账龄。因此先对应收账款数据按客groupby,再在每个group中进行账龄计算,group内的账龄计算逻辑我们命名为AR函数。
def AR(x):
# 计算客户应收款余额
total = x['本币金额'].sum()
# 统计应收账款借方
df_dr = x[x['本币金额']>0]
# 按过账日期降序
df_dr = df_dr.sort_values(by=['过帐日期'],ascending=False).reset_index(drop=True)
# 应收账款先进先出,因此将余额分摊在最后几笔借方交易,一旦分摊完则停止
for index, row in df_dr.iterrows():
if total-row['本币金额']>0:
df_dr.loc[index,'实际应收'] = row['本币金额']
else:
df_dr.loc[index,'实际应收'] = total
break
total = total-row['本币金额']
return df_dr
df2 = df.groupby('客户编号',as_index=False).apply(AR)
# 找一个客户验证计算结果
df2.loc[df2['客户编号']==23500000]
过滤实际应收为空或者为0的数据(代表已清账)
df3=df2[(pd.isna(df2['实际应收'])
==False)&(df2['实际应收']!=0)
df3.loc[df3['客户编号']==23500000]
3
数据计算
计算每笔实际应收账款截止2020/9/30的账龄,账龄以月份数据表示,不足一月的按照天数/30计算小数。
enddate = date(2020, 9, 30)
def totalmonth(startdate):
return round((enddate.year-startdate.year)*12 + (enddate.month-startdate.month) + (enddate.day-startdate.day)/30,2)
df3['账龄']=df3['过帐日期'].map(totalmonth)
df3.loc[df3['客户编号']==23500000]
计算账龄区间:使用条件判断
? 当账龄小于等于3个月时,落入账龄区间 1-3月;
? 当账龄大于3个月小于等于12个月时,落入账龄区间 3月-1年;
? 当账龄大于12个月小于等于24个月时,落入账龄区间 1-2年;
? 当账龄大于36个月时,落入账龄区间 3年以上。
def age(totalmonth):
if totalmonth<=3:
age='1-3月'
elif totalmonth<=12:
age='3月-1年'
elif totalmonth<=24:
age='1-2年'
else:
age='3年以上'
return age
df3['账龄区间']=df3['账龄'].map(age)
df3.loc[df3['客户编号']==23500000]
账龄统计:
pd.pivot_table(df3,index['客户编号'],
columns=['账龄区间'],
values=['实际应收'],aggfunc=
sum,fill_value=0)
以上就是用Python自动计算应收账款账龄的操作步骤了。公司的应收账款在流动资产中具有举足轻重的地位,如果公司的应收账款能及时收回,那么公司的资金使用效率将能大幅提高!
?图片版权归财码数字化所有,如对版权有异议,请联系后台议定处理。
本文由财码数字化整理发布,如需转载请务必注明以上信息。
猜你喜欢
- 2024-09-23 【Tidyverse优雅编程】办公自动化:Excel考勤表清洗与两种汇总
- 2024-09-23 技术分享:Python数据分析学习(python数据分析入门课程)
- 2024-09-23 50.根据日期计算星期几(通过日期计算星期几奥数)
- 2024-09-23 如何成为Python的数据操作库Pandas的专家?
- 2024-09-23 如何在Flutter中读取和写入文件(flutter text)
- 2024-09-23 二十九、UiPathExcel写入操作(转)
- 2024-09-23 在Vue项目中使用xlsx模块读写Excel文档内容
- 2024-09-23 01.读取Excel文件数据[文心一言+Python+Excel]
- 2024-09-23 Python数据分析基础入门(一):获取数据源
- 2024-09-23 Pandas中使用read_excel()函数读取Excel文件
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 571℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 512℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 468℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 448℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 445℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)