摘 要: SAP系统后勤和财务模块高度集成,后勤模块基于不同场景的价值串计算实现了自动记账功能,其中采购订单收货通过不同记账事务(如BSX-存货记帐、WRX-已收货物/已收发票清算科目、PRD-成本价格差额)的价值评估确定了会计分录的价值,同时也确定了库存原材料的价值更新。本文主要研究了采购订单收货中记账事务的价值评估算法,为国内进销存软件或者其他ERP产品的研发提供一种算法参考。

关键词: SAP;价值评估;自动记账;采购订单收货;

引言

SAP全称是Systems Applications and Products in Data Processing,SAP是一套标准而又全面的ERP软件,同时包含有销售、生产的计划、质量的管理、办公室及通信、项目系统、工厂的维修、资产的管理及控制、会计企业的管理等许多领域,在每个管理领域中,SAP又将这些领域进一步细分成单一的模块,例如财务会计中的模块包含有总账模块、应付款模块、应收款模块、金融投资模块、财务控制模块、报表模块及基金管理等许多子模块,这些子模块的结构保证了数据能够单独处理的特殊要求。SAP系统中的生产经营模型架构更是可以按企业的实际需要划分为订单生产、合同生产、复杂的生产、批量生产、库存生产。SAP目前应用于许多行业领域,主要分布在石油石化、汽车、航空、消费品、制造业、电器、电子、食品医疗等行业。截止到2018年,在中国使用SAP的企业已经超过300多家,其中不乏许多龙头行业,例如:中国石油、中国石化、海尔集团、联想集团、一汽大众、长虹、体育用品的李宁、万科、上海通用、大唐电信、富士康、保洁集团等许多知名企业[1]。

术语解释

采购订单(Purchasing order):企业根据产品的用料计划和实际能力以及相关的因素,所制定的切实可行的采购订单计划,并下达至供应商执行,在执行的过程中要注意对订单进行跟踪,以使企业能从采购环境中购买到企业所需的商品,为生产部门和需求部门输送合格的原材料和配件。

会计凭证(Accounting Documents):记录经济业务发生或者完成情况的书面证明,是登记账簿的依据。每个企业都必须按一定的程序填制和审核会计凭证,根据审核无误的会计凭证进行账簿登记,如实反映企业的经济业务。

物料凭证(Material Document):对物料活动的一个记录编号,比如收货、发料、移库等涉及物料移动的活动,都会有唯一对应的物料凭证号存在。

价值串(value string):定义了一系列的步骤优先顺序,每一个步骤都连接到不同的过账事务码,而这个顺序本身就称作价值串,在我们进行了物料移动或者发票校验后,并不是直接抛到某一具体的科目中去,而是根据移动类型或者发票校验,连接到相应的价值串,通过价值串,再连接到相应的事务码(账户组),移动类型对应的价值串无法修改,包含所有可能发生的事务码,是确定物料移动科目分配的关键点,如WE01等[2]。

记账事务(交易码 transaction code):指的是对应的科目类(即OBYC中的事务),SAP系统使用TE码来确定生成过帐行的科目,每个物料交易都涉及到交易码,比如发料,至少涉及存货记帐交易码BSX,表示材料的增减,另外至少涉及各种类型材料消耗科目,如果材料采用标准价格,多数情况下还涉及差异科目,这些都是通过交易码确定。BSX库存记账/存货记账原材料、库存商品等;PRD价差科目;KDM物料管理汇率差异有外币业务的时候,汇率变更差生的差异;UMB来自重估损益库存重估差异,当MR21修改过物料价格后,会将差异金额计入;GBB库存记账的冲销科目,使用移动类型261有关订单的发货时,库存减少;WRX 即GR/IR科目(已收货物/已收发票清算科目)[2]。

物料评估 (Material evaluation) :物料评估用于核算企业生产经营过程中采购、消耗及库存价值,主要通过评估范围(Valuation Area)、评估分类(Valuation Category)、评估类型(Valuation Class)等实现物料价值评估。

---------------------------------

作者简介:赵建涛(1985-),男,本科,主要研究SAP系统实施及二次开发

采购订单收货简介

在SAP系统中采购订单收货主要通过事物码MIGO来实现,用户前台输入采购订单号、过账日期、收货数量、库存地点,执行过账即可完成,系统会根据用户输入的内容生成相应的物料凭证和会计凭证,物料凭证记录物料的移动情况,会计凭证则是财务记账,会计凭证分录由记账事务(BSX-存货记帐、WRX-已收货物/已收发票清算科目、PRD-成本价格差额)的评估价值和运费项目组成,运费项目是固定的,不受业务操作及库存情况的影响,记账事务价值评估则因情况不同而变化较大,采购订单收货模型如图1所示,其核心就是本文主要研究记账事务的价值评估。

SAP采购订单价格变更解决方案(SAP系统采购订单收货价值评估的研究)(1)

图1采购订单收货简易模型

价值评估WRX价值评估

定义we_re_menge = 已收货数量 – 已发票校验数量;

定义we_re_wert = 已收货价值 – 已发票校验价值;

当系统在基于收货的发票校验情况下,we_re_menge = 0,we_re_wert = 0,反之则按照公式正常运算。

rewrt = 已发票校验的价值;

remng = 已发票校验的数量;

bsmng = 采购订单的数量;

betrag 中间变量,用于计算价值;

vwere 代表WRX评估金额的最终结果;

正向业务时(收货,移动类型101)

当we_re_menge 大于 0,

如果bsmng不等于0,即采购订单的数量不等于0时,

betrag = 本次录入的收货数量 * 采购订单净值 / 采购订单数量;

如果bsmng等于0,即采购订单的数量等于0时,

betrag = 0.

当we_re_menge小于等于0,

定义refe1 = 本次收货数量 we_re_menge;

如果refe1 大于0,代表本次收货评估来源于两部分,采购订单和已开发票,采购订单部分为:betrag = refe1 * 采购订单净值 / 采购订单数量;发票部分为:we_re_wert = 已收货价值 – 已发票校验价值;betrag = betrag - we_re_wert.(因为此种条件下,we_re_menge和we_re_wert均为负值,相减即绝对值相加的意思);

如果refe1小于等于0,代表本次收货评估来源于发票,

betrag = 本次录入的收货数量 *we_re_wert/we_re_menge

换句话说,就是评估金额等于本次录入的收货数量 *

发票上的单价;

以上情况完成后,将中间变量betrag赋值给最终评估结果,即 vwere = betrag。

反向业务时(收货冲销,移动类型102)

当we_re_menge 大于 0,

定义refe1 = we_re_menge – 本次录入的冲销数量。

如果refe1等于0,代表本次冲销评估完全来源于已收货未发票校验的部分,并且两者数量相同,betrag = we_re_wert;

如果refe1大于0,代表本次冲销评估完全来源于已收货未发票校验的部分,且冲销数量小于已收货未发票校验的数量,故betrag = 本次录入的冲销数量 * we_re_wert / we_re_menge;

如果refe1小于0,代表本次冲销评估来源于两部分,已收货未发票校验和已发票校验,前者数量小于本次冲销数量,不能完全支持本次冲销评估,故betrag = refe1 * 已发票校验的价值 / 已发票校验的数量 we_re_wert;

当we_re_menge小于等于0,代表本次冲销评估完全来源于发票,betrag = 本次录入的冲销数量 * 发票校验价值 / 发票校验数量;

以上情况完成后,将中间变量betrag赋值给最终评估结果,即 vwere = betrag。

BSX价值评估

前提步骤3.1已经计算出了WRX的价值vwere,

定义exwrt = vwere(WRX的计算金额) fracht(运费,交货费用) lbwert(委外加工费);

lbkum = 库存量

salk3 = 库存价值

betrag 中间变量,保存金额临时结果;

bestd 最终BSX的计算结果;

BSX价值计算分为移动平均价和标准价两种大情况,分别介绍如下:

移动平均价:

借贷标识为H时,即反向业务情况,

如果库存量小于0,即负库存的情况,则

betrag = 本次录入的冲销数量 * 库存价值 / 库存量

例如 库存量为 -5,库存价值为 -10,本次冲销数量为 3,则评估金额为 3*(-10) / (-5) = 6;

如果库存量等于0,则betrag = exwrt,即该种情况BSX与库存无关;

如果库存量大于本次冲销量,库存价值大于等于本次冲销评估价值,则betrag = exwrt,该种情况BSX计算与库存无关,以评估为准;

如果库存量大于等于本次冲销量,库存价值小于本次冲销评估价值,则betrag = salk3,该种情况BSX的价值等于当前库存价值;

如果同时不满足上述4种情况,说明冲销BSX计算来源于两部分,采购订单WRX评估结果和库存,此种情况下定义rmenge = 本次录入冲销数量 – 库存量;

差值rmenge来源于评估,其他来源于库存,即

betrag = rmenge * exwrt(本次冲销数量的价值评估) / 本次录入的冲销数量 salk3(库存价值)。

以上情况完成后,将中间变量betrag赋值给最终评估结果,即 bestd = betrag。

借贷标识为S时,即正向业务情况

定义rmenge = 本次收货数量 lbkum(当前库存量);

定义rexwrt = exwrt(本次评估金额) salk3(当前库存价值);

当前库存量lbkum小于0,rmenge小于0时,即负库存量的绝对值大于收货数量,betrag = 本次收货数量 * 库存价值 / 库存数量;

当前库存量lbkum小于0,rmenge等于0时,即负库存量的绝对值等于收货数量,betrag = 0 - 库存价值 ;

当前库存量lbkum小于0,rmenge大于0时,即负库存量的绝对值小于收货数量,betrag = rmenge * exwrt(评估金额)/ 本次收货数量 ( 0 – 库存价值);

当前库存量lbkum大于等于0时,betrag = exwrt(评估金额);

以上情况完成后,将中间变量betrag赋值给最终评估结果,即 bestd = betrag。

标准价:

借贷标识为H时,即反向业务情况

如果库存量lbkum大于等于本次冲销数量,betrag = 本次冲销数量 * 当前库存价值/ 当前库存量;

如果库存量lbkum小于0,即负库存时,betrag = 本次冲销数量 * 物料的标准价;

如果上述两个条件都不满足,即库存量lbkum大于等于0且库存量lbkum小于本次冲销数量,该情况冲销来源于两部分:定义rmenge = 本次冲销数量 – 当前库存量;betrag = rmenge * 物料的标准价 当前库存价值;

以上情况完成后,将中间变量betrag赋值给最终评估结果,即 bestd = betrag。

借贷标识为S时,即正向业务情况

定义rmenge = 本次收货数量 当前库存量,

如果当前库存量大于等于0,则betrag = 本次收货数量 * 物料的标准价;

如果rmenge小于等于0,即当前库存量为负且库存量绝对值大于等于本次收货数,则betrag = 本次收货数量 * 当前库存价值 / 当前库存量;

如果不满足上面两种情况,说明库存量为负且库存量绝对值小于本次收货数量,BSX的价值计算来源于两部分,则

betrag = rmenge * 物料的标准价 – salk3(当前库存价值为负,相减表示绝对值相加);

以上情况完成后,将中间变量betrag赋值给最终评估结果,即 bestd = betrag

PRD价值评估

前提是WRX的价值vwere 和 BSX的价值bestd已经计算完毕,prdif表示差异PRD的计算结果,则 prdif = fracht(交货费用)- vwere – bestd -kudif -kudif_bnk;计算结果如果为正,则说明借贷标识为S,如果为负则借贷标识为H且反记账,其中kudif、kudif_bnk与汇率差异有关,如果不存在汇率转换,可以忽略;

结束语

SAP系统采购订单收货场景的价值评估方法是一套严谨的逻辑算法,适合于各行业并且在实践中得到验证,通用进销存软件或者其他ERP产品研发均可借鉴,对软件研发具有很高的参考价值,后续将继续对SAP系统自动记账原理进行剖析,进一步研究SAP其他业务场景的核心算法。

参考文献:

[1] 段大为. SAP实施大全[M].2012

[2] Kerwin-G. SAP-MM自动记账解析之功能实现.2017, CSDN:https://blog.csdn.net/qq_33641781/article/details/78029041

另外,此文所涉及的课题,是笔者和一位才华横溢的ABAP高级顾问-刘嘉琦共同完成,期间刘老师给予了大量的指导,在此表示感谢,如果本文对阁下有用,请默默的感谢下我们的高级ABAP顾问 刘嘉琦老师!!

,