文本主要讨论了在使用星空系统时,即时库存正常但报表或核算中出现负结存的现象。负结存指报表或核算时显示库存为负,而实际库存正常。原因主要是库存单据日期错误,包括录入错误、补单不按顺序等。解决方法是调整单据日期,并可通过系统参数控制单据录入日期范围及负结存预警来预防。即时库存与结存库存的计算逻辑也进行了说明,即时库存实时更新,而结存库存基于日期计算。
即时库存正常,但是账面负结存原因分析之一---库存单据日期错误解决与预防方法
大家在使用星空时,经常碰到即时库存是正常的,但是去查询库存模块或者存货模块的物料收发明细表/汇总表,或者进行结账前检查时,提示有负结存的现象。我们把这种即时库存是正常的,但是报表或者关账,核算出现的负库存情况,叫做负结存(实际库存是正常的)。
这其实涉及到2个概念,一个是即时库存/实时库存,一个存货的结存库存。 即时库存是任何时候都是实时的,跟日期无关的。
结存库存本质上就是一个期间(一段时间,依赖于你报表选择的时间范围)的期末库存,是一个计算后得到的库存。
为让大家了解最根本的原理,有必要给大家说明下系统即时库存与结存库存的计算逻辑,以便更好的去理解和解决此种问题。
即时库存更新概念与逻辑:即时库存也叫实时库存,即库存单据按库存更新时点(启用库存系统时选择的保存更新或者审核更新时点)去实时更新库存表库存数量的方法。这种方式下,系统里面有个即时库存表,任何时候都是实时的库存结余数量。有任何库存单据发生时,按更新库存时刻(单据保存或者审核时点) (注意是库存单据保存或者审核时,与单据的日期无关)更新这个余额。例如,审核更新时刻下,加入当前某个物料的即时库存是100PCS,当前一笔20PCS出库单业务保存了,并提交审核,一旦审核的时点,系统即在当时这个时点的即时库存数量上,减去这个20PCS的数量,把实时的库存数量更新为80PCS,也即即时库存数量更新为80PCS。当然,这是比较简单的情况,如果是多用户情况下,出入库业务频繁,系统也是按照这个逻辑排队一笔笔的更新库存的。
理解了这个原理后,所以我们在单据保存或者审核的时候,如果选择了不允许负库存(即时库存),那么保存或者审核就会提示,出现负库存,更新库存不成功,禁止业务的发生。如上例中,如果出库单数量是120PCS,系统只有100PCS,出库单如更新,则会出现-20PCS的负实时库存,则这个单据就会不能审核成功,也就是不能审批通过。
这种实时库存的好处,就是用户任何去查库存,都是准确的实际库存,只要业务发生通过了,库存就更新了,这样实际与业务就完全一致了。
结存库存概念与逻辑:结存是指账面库存,相对于即时库存来说是基于日期的“历史”库存。因为即时库存是即时/实时库存,所以要查本月初的库存、上月末的库存、或者其他日期的库存,只能通过账面库存去查询。所以,这种库存的核心逻辑是基于日期去计算得到某个时点的结存库存。注意“基于日期”关键逻辑,这个是账面库存计算的就是基于这个日期去找出入库业务发生的日期的。比如库存台账,查上月末某个物料的历史库存结存数量,则选择一个起始日期,截止日期选择上月最后的一天,系统获得起始日期的起始库存数量之后,根据这个时间段内(报表选择的起始日期、截止日期)库存业务单据的单据日期是否处于这个时间段范围内,通过期初+本期入库-本期出库=结算数量的逻辑,通过计算得到截止日期的账面库存。物料收发明细表/汇总表,库存台账,存货收发明细表等都是基于这个逻辑,前述的关账、结账、核算判断是否有负结存也是基于这个逻辑。
解释完概念后,我们再回过来头来看看前面的账面负库存出现的问题,我们知道,即时库存不允许负库存情况下,出现负结存。
本质上,出现负结存是用户做单不规范所产生的一种后果。
这个不规范包括不限于:不按实际业务发生的日期录入单据、存在补单现象、手误录入了错误的单据日期、后台改了库存单据的库存属性信息、物料关键信息违法修改。
造成 账面负库存原因中其中最常见的原因是库存单据日期混乱或者错误。
我们用几个例子来解决问题出现的原因:
场景: 4月1日,某物料库存数量 100, 5日入库 80,6日需要出库/领料 120。
如果按业务发生的正常顺利,5日做入库单,更新库存,为180,6日领料出库120后,结存为 60,即时库存和账面库存都是没有问题的。
但是,实际情况下,存在各种情况,一种是业务不是实时录入系统的,存在补单,漏单、日期录入错误的情况,
情形1:入库日期录入错误的情况,5日录单员录入入库单,但是日期录入成5月5日,或者其他日期如 4月16日, 6日领料单正常做单。这种情况下,5日录入库单的情况下,即使库存更新是正常的180,6日做出库单也是正常的,即时库存扣减120更新为80。 但是,账面库存,如果入库单日期录错为5月5日,我们选择账面库存计算日期范围为4.1-4.30日,我们知道入库单的日期在5月份,则出现4.1日期初 100,入库没有记录(单据在5月份),6日出库120, 最后结存100-120=-20的账面负库存的情况。
情形2:漏单、补单情况,特别是补单不按出入库相对顺序补单的情况也会出现账面负库存。还是同样的例子,领料单如忘记做,4月10日发现后,去补单,补在入库单日期之前,大家去计算一下,一样会出现负库存。
这些情况在日常业务中其实经常发生,特别是一些情况造成漏单、补单的情况下是造成账面负库存的主要原因之一。
解决方案
明白了问题原因后,其实要避免这种情况,一个关键因素是管理上要跟上,尽可能按业务发生的日期录入单据,尽可能减少存在漏单补单的情形。第二是即使补单,按原始业务的发生日期补单,即补录时尽可能把单据日期录入正确。
明白了以上原理后,针对已经出现了这个问题,要解决,通过物料收发明细表、或者存货收发明细表、负结存预警方案,找到出现负结存的物料以及出现负结存的日期范围,分析有可能有误的出库单,入库类单据的业务日期,想办法把单据的业务日期调整为正常的时间即可。
预防方案
除了在管理上完善之外,星空考虑到这些现象,系统上也强化了这一块的功能,避免出现账面负库存。
第一个完善是库存系统对做单的日期进行完善,提供了库存业务单据可以录入的范围,规范随意补单和手误录入错误日期的概率。库存管理提供了参数“启用库存业务日期控制”。此参数可以设置事前、事后补录的范围,这样那种手误录入错误日期的、随意补录单据的情况可以避免。如设置为0,那么只能录入今天的单据,设置为前后各1天,则只能录入昨天今天、明天的业务日期,也避免手误录入了跨度很大日期(如2019-5-10手误录入了2029-5-10)的情况。参数设置如下图
另外一个改进点,帮助用户尽早发现账面负结存,就是及时发现负结存,不要等到月末结转时才发现负结存,这时候要解决,已经来不及了。因此系统提供了负结存预警。负结存预警,其实就是一个按照类似物料收发明细表的逻辑,根据系统关账日期到当前日期,后台去定时计算是否有账面负结存的任务列表。
后台可以定时执行可以设置方案,每天定时监测负的账面结存,并提供负结存报告,这样能够及时发现出现负账面结存,如果按每天晚上执行一次,用户第二天早上即可发现负结存,这样就很方便去通过反审核单据去修改单据日期即可解决负结存问题。
负结存预警在库存工作台-警示灯方案里面设置,在html5模式下可以查看负结存报告,报表中列出了出现负结存的物料,负结存业务信息。(V7.2版本功能)
库存工作台负结存预警,如看到红色警示灯,表示有负结存了,可以点击进去查看具体的负结存信息。
我们知道,库存单据更新库存时,系统是有强制校验即时库存是否为负数的,防止出现即时库存为负的情况。很多用户想,为何不考虑在库存单据保存或者审核时,再加上强制校验按单据日期来计算是否有有负结存的逻辑呢? 这个校验逻辑,只要用过收发明细表的用户就知道,需要按起始日期、加上这个期间的出入库,以及加上本单的数量,去判断这个日期下是否有负结存,这个过程是需要实时计算的,这个计算过程,跟日期、库存单据量、以及当前单据分录行数,都密切相关。性能上影响比较大。平常审批一个库存单据,大概的时间是几秒到十几秒,如果加上这个计算过程,审批一个单据的时间可能要成倍增加,用户的感受和体验非常糟糕的。
我们知道,出现负结存的概率其实还是比较低的,按实际的反馈来看,业务稍微规范的企业,一个月库存单据几千单,几万单,一般也就偶尔出现几单错漏日期的情况,如果为了偶尔几单可能出现的负结存,就要牺牲绝大部分的用户的体验,有点得不偿失。所以,如果做单不是太及时的企业,我们推进常用的控制方式就是上面的每天负结存检查即可。
推荐阅读