沈阳XX商场推行O2O营销模式,信息化系统包括:线下零售系统、线上电商系统、网上支付系统,财务核算系统,为了实现线上线下系统互动、财务核算一体化,需要对各系统进行数据集成、系统对接。由于涉及的集成业务点较多、而且相对复杂,同时为了满足后续业务方面灵活多变销售策略,引入统一集成平台AEAI ESB来做为企业信息化集成的“龙骨”,实现各系统的业务串联。
本文主要对线下零售系统(长益商友)跟财务财务系统(金蝶K3)的凭证对接技术实现进行介绍,这个集成点的主要内容是通过AEAI ESB将长益的商友系统中业务单据以凭证方式导入金蝶K3财务软件。
1.凭证:财务系统中财务核算单据。凭证包括凭证头、凭证分录、辅助核算。凭证头跟凭证分录是一对多的关系,凭证分录跟辅助核算也是一对多的关系。凭证分录关联会计科目,会计科目是树形结构的,凭证分录关联的会计科目是科目体系中叶子节点。会计科目对应不同的核算项目类型,凭证分录中具体有哪些辅助核算是由凭证分录关联的会计科目决定的。通常核算项目类型包括客户、供应商、部门、人员、商品/产品、其他收入项目等。
2.凭证头:凭证主表,一般有凭证号、记账人、制单人、审批人、单据类型、等、业务日期、是否过账、贷方金额总计、借方金额总计等字段。
3.凭证分录:凭证从表,一般有摘要、科目内码、原币金额、汇率、现金流量、余额方向等字段。
4.会计科目:按照不同经济业务的经济特征分门别类定义的树形结构。
5.辅助核算:是针对会计科目对凭证分录的财务处理方式,一般通过核算项目实现。
6.核算项目:财务系统涉及的基础数据专有名词,一般包括客户、部门、供应商、品牌、其他收入项目等。
对接过程中金蝶K3财务系统涉及到以下内容,对应表数据字典参见附件中的“凭证表数据字典.xls”。对凭证涉及的基础数据(核算项目),金蝶K3财务供应提供中间表和存储过程,通过AEAI ESB把凭证涉及的基础数据导入至中间件表,然后再调用对应的存储过程把中间表中的数据转存至实际核算项目数据表中,相关的存储过程和中间件表参见附件。
1.凭证表(t_Voucher):凭证头,记录不同类型凭证,通过主键关联分录表
2.分录表(t_VoucherEntry):记录每个类型凭证下借贷数据,通过FDetailID(核算项目编码)关联辅助核算横表
3.辅助核算横表(t_ItemDetail):记录每条分录下挂的辅助核算个数和挂哪些辅助核算
4.辅助核算纵表(t_ItemDetailV):可以认为跟t_itemDtail是同构的。
5.核算项目类别表(t_itemClass):核算项目类别定义,没有直接用到,编码定义(没有直接用到)。
6.核算项目表(t_item):核算项目定义表,核算项目均导入此表(没有直接用到)。
商友系统按照不同类型凭证提供相对应的视图,每类视图包括以下基本属性:日期、金额、核算项目编码、核算项目名称。
1. ESB每天(24:00)定时读取ERP提供的视图,查询财务凭证相关数据。
2. 分析查询数据,抽取财务分录相关联的核算项目。
3. 将凭证头信息、分录、关联表信息同步至K3数据库。
4. ESB每天(03:00)定时读取ERP提供视图,部门与供应商导入K3数据库
集成架构图如下:
1.客户提供测试帐套、凭证导入模板,在功能联测过程中协作配合联调
2.K3提供数据库的数据字典,存储过程
3.长益提供ERP财务凭证相关数据(视图)
4.ESB负责查询视图进行数据封装导入至K3财务系统
在ESB封装数据前,需要通过K3数据字典详细了解涉及到的表的每一个字段意义,这个字段是需要从商友提供的视图获取,或者需要查询K3数据库或得字段值,还是需要ESB根据财务提供的模板进行封装处理等。例如:凭证表的凭证内码、会计年度,分录表的分录号,辅助核算横表的核算项目内码等都需要通过查询K3数据库某个表获取值。这一个阶段的需求了解对后续的开发以及凭证能否在K3系统正确显示将起到重要作用。
下面介绍主要的功能设计流程:
u TimerRequest:设置定时,设置每天00:05
u 封装入参:封装查询流程入参数据
u 调用主流程:调用主流程,传入数据参数
u 线上线下分支:判断查询数据来源,线上/线上
u 查询线下视图:查询线下数据
u 查询线上视图:查询线上数据
u 合并路由:配合分支路由
u 查询收款方式编码表:由于不同的收款方式要对应不同的科目,通过此编码表确认收款方式对应哪个科目
u 数据转换:将从长益获取的数据进行封装处理,提取辅助核算
u 封装日志:封装执行日志信息
u 更新日志:更新执行日志信息
注意:K3财务分录表存在科目代码、对方科目代码属性,若凭证一借一贷,借方的对方科目代码就是贷方的科目代码;若多借多贷会存在对方科目代码具体指代哪一个不确定。
由于分录表中还有一个借贷属性,区分此分录是借还是贷,针对以上多借多贷对方科目指代问题,只需要标识清楚此分录是借还是贷,入借方的对方科目代码可以随意指代一个贷方科目代码即可。
u 判断数据是否为空:判断辅助核算数据是否为空
u 分支路由:判断数据是否为空
u 遍历辅助核算:遍历数据,按照不同的核算项目进行分类
u 部门同步子流程:调用同步部门基础数据子流程
u 客户同步子流程:调用同步客户基础数据子流程
u 品牌同步子流程:调用同步品牌基础数据子流程
u 供应商同步子流程:调用同步供应商基础数据子流程
u 其他业务收入同步子流程:调用同步其他业务收入基础数据子流程
u 合并路由:配合分支路由使用
u 接收数据:判断核算项目是否为空
u 分支判断:判断数据是否为空
u 循环合并:配合循环分支路由使用
u 循环内容:数据处理,或得核算项目
u 线上线下分支路由:判断是线上数据还是线下数据
u 调用判断存储过程:判断该核算项目在K3库中是否存在,通过核算项目编码、名称、核算项目类型判断,分三种情况:
1.该核算项目编码不存在,对应数据存储过程做插入操作
2.该核算项目编码存在,名称不同,对应数据存储过程做更新操作
3.该核算项目编码存在,名称相同,不需要做基础数据同步操作
u 分支判断:判断判断存储过程返回值
u 插入临时表:将核算项目基础数据插入临时表
u 调用存储过程:基础数据同步存储过程查询临时表将数据导入K3库
u 线上线下合并路由:配合分支路由使用
u 循环分支:循环或得的基础数据
u 分支合并配合分支路由使用
u 查询部门视图:查询部门基础数据,包括部门代码、部门名称
u 查询临时表:查询部门临时表,此表为了判断数据源发生更改或新增的数据
u 数据转换:视图查询出的数据与临时表查询出来的数据进行比对,或得做修改和新增的数据,去除没有变化数据
u 调用基础数据同步流程:调用基础数据同步流程
u 更新临时表:更新部门临时表
部门在商友系统录入后,由于仍未产生数据部门未导入财务系统,而此部门又到财务交钱会查询不到此部门,此流程的目的便是为了解决以上状况的发生。
供应商与部门一样都需要定时传送至K3财务,与部门流程一致,这里就不做具体说明,参考部门定时同步子流程即可。
u 判断查询数据是否为空:判断是否查询到数据
u 分支路由:判断数据是否为空
u 数据转换:判断辅助核算数据是否为空
u 封装获取主键SQL:封装获取表主键最大值SQL
u 封装查询K3t_item表查询参数:封装获取核算项目FItemID
u 查询K3t_item表:查询核算项目FItemID
u 获取表主键最大值:调用获取获取表主键最大值流程
u 封装成辅助核算横表:将数据封装成K3财务辅助核算横表格式
u 封装成辅助核算纵表:将数据封装成K3财务辅助核算纵表格式
u 封装成K3分录表:将数据封装成K3财务分录表格式
u 封装成K3凭证表:将数据封装成K3财务凭证表格式
u 封装日志:封装日志出参
u 更新日志:更新执行日志信息
u 导入K3库:调用导入K3库流程
u 合并路由:配合分支路由使用
在财务对接中,此流程起到至关重要的作用,将从视图查询的数据封装成K3数据库表的格式导入K3数据库。前期的了解表结构以及每一个字段的含义在此起到了重要性,每一个字段设置哪些默认值、或者从视图获取、查询K3库等。
u 线上线下;判断数据来源线上线下
u 插入辅助核算横表:插入K3辅助核算横表
u 插入辅助核算纵表:插入K3辅助核算纵表
u 插入分录表:插入K3分录表
u 插入凭证表:插入K3凭证表
u 封装日志:设置日志信息
u 更新日志:更新数据库log日志
在财务对接过程中,笔者也学习了很多、成长了很多,也更加的认识到沟通的重要性,通过沟通深入了解整个业务流程,了解客户需求,否则很容易走入误区。
基于AEAI ESB实现业务系统跟财务凭证对接也是笔者第一次工作实战,对于AEAI ESB集成平台掌握相对容易,但对财务的一些专业名词以及一些具体业务不甚了解,在需求调研阶段与后续开发过程中遇到了很多困难,走了很多弯路,基于此原因,写出该文档希望对同样是第一次接触财务凭证对接的朋友有所帮助,更希望有经验朋友能够提出更多宝贵的经验。
基于ESB实现商友与K3财务凭证集成文档及附件 下载