这里不讨论代码写错的原因。主要讨论逻辑设计不够完善和用户实际操作顺序不当,引起的情况。并把它们归纳起来,在日后提高。
1、实际业务操作与系统流程的不同步。曾经遇到几次,用户在配送和调拨操作中,接收部门收货之后,没有在系统中登记审核验收数量。虽然延后几天登记,也可以把库存调整正确,但中间几天很容易造成负库存销售,使账面数据与实际库存出现极大误差。
2、仍然是上述情况,因为没有及时在系统中审核仓库的每一笔出入业务 ,而用盘点单做出了正确的库存。但在盘点完成之后,再补审核之前的业务。这样又造成了数量的重复计算。例如,用户当前库存为10,5月10号接收到5个商品,实际库存为15。这笔业务的草稿没有审核,在5月11日进行实时盘点,填写了正确的数量15并审核完成。这时候的数量是正确的。但用户在5月12号补审核之前的收货数量。使库存数量累加到了20(实际上,这笔业务是在盘点之前发生的。并已经反映到真实的库存数量了,但账面数量一直延迟)。
对于这个问题,除了对用户进行培训,提醒他们实际业务操作与系统登记要同步及时以外,在逻辑上,也可以更完善地处理——根据盘点时间,对每期库存进行结算。在每一次开始静态盘点的时候,检查相关商品是否存在需要审核而未审核的出入仓业务,并提醒客户(当然,这个过程有点繁琐)先审核业务。盘点完成以后,以完成时间作为新的业务期间,新增单据的业务时间,必须是在这以后。至于上期因某些原因未能录入系统的单据,都以补单形式出现,并不再更新库存。因此,盘点必须要求用户,以真实的库存数量录入系统。而不能单凭账面数据就审核盘点单。
3、由此想到另一个情况,就是静态盘点与动态盘点的选择。一个卖场、门店、仓库,往往有很多商品,成千上万种不足为奇。要做一次全场停业的盘点(即静态盘点)是非常困难的。因此,应该指导客户,多用分区盘点和动态盘点,即一边销售一边盘点,以盘点时的盈亏差额(账面与实际的差额)+ 实时账面库存 = 实际库存。特别是门店,他们的销售速度快,出入库频繁,首先推荐动态盘点。在算法逻辑上,如果客户选择了静态盘点,要完整地做好锁库(禁止本仓库一切出入库业务的审核)的操作。
4、在一些系统,存在离线与在线销售的模式。由于离线终端上传数据到总部,存在或长或短的延时(延时几分钟很正常,延时几天,十几天的都有) ,总部系统更新账面数据的时间可能会比实际延迟很多。这时就要记录更新实际时间(和业务日期可能不一样)。这里,我本人选择以实际业务发生的时间,作为出入库报表的统计标准,但这样就出现了出入库账面数据与账面不匹配的问题(因为库存账面是延后几天才更新的),所以应该同时记录账面更新的时间。如果是往期的销售数据上传,解决方案同2,账面库存不更新。
5、另外还有一些是多单位换算造成的误差。由于换算率不能整除,而出现四舍五入的情况。比如,一码=0.9144米,1米=1.0936132983377码。假设以米为基本单位,以码为辅助单位,出库2码的布,即1.8288米,再把它换算回码(假设系统是取6位小数,取1.093613)1.8288*1.093613=1.999999,误差了0.000001.长期积累,也有一定的误差,当然这个数量应该不太大。但是,如果我们把存储的小数位扩大,如果存储8位,1.09361329,在计算完成的时候取6位小数,结果就准确了。所以,设计时存储较长的小数位,在取结果时才截取较短的小数,并培训客户选择适当的基本单位,避免多次换算,也可以减少这种误差。
当然,库存误差还有很多的原因。即使是知名的软件,用友,金碟等,网上也有出现这样的问题。库存、成本、账款,业务流转等,都是ERP系统中比较复杂的逻辑。很多时候,一个参数的错误,或者统计方式的不一致,也是造成误差的重要因素。所以,综合几位朋友的说法,软件总有BUG,但编程要保持心情的平静。头脑的冷静,只有这样才能写出较正确完善的代码(注意,这里不是绝对。因为我觉得程序员是人不是机器,写错的概率是必然的。),同时也要重视单元测试的必要性。一小段代码,在完成时没有测试出来,到了系统测试甚至投入使用以后,可能要花几倍的时间才能找到“根源”。
以上纯属个人看法。总结出来,以提醒和激励未来的自己。
1、实际业务操作与系统流程的不同步。曾经遇到几次,用户在配送和调拨操作中,接收部门收货之后,没有在系统中登记审核验收数量。虽然延后几天登记,也可以把库存调整正确,但中间几天很容易造成负库存销售,使账面数据与实际库存出现极大误差。
2、仍然是上述情况,因为没有及时在系统中审核仓库的每一笔出入业务 ,而用盘点单做出了正确的库存。但在盘点完成之后,再补审核之前的业务。这样又造成了数量的重复计算。例如,用户当前库存为10,5月10号接收到5个商品,实际库存为15。这笔业务的草稿没有审核,在5月11日进行实时盘点,填写了正确的数量15并审核完成。这时候的数量是正确的。但用户在5月12号补审核之前的收货数量。使库存数量累加到了20(实际上,这笔业务是在盘点之前发生的。并已经反映到真实的库存数量了,但账面数量一直延迟)。
对于这个问题,除了对用户进行培训,提醒他们实际业务操作与系统登记要同步及时以外,在逻辑上,也可以更完善地处理——根据盘点时间,对每期库存进行结算。在每一次开始静态盘点的时候,检查相关商品是否存在需要审核而未审核的出入仓业务,并提醒客户(当然,这个过程有点繁琐)先审核业务。盘点完成以后,以完成时间作为新的业务期间,新增单据的业务时间,必须是在这以后。至于上期因某些原因未能录入系统的单据,都以补单形式出现,并不再更新库存。因此,盘点必须要求用户,以真实的库存数量录入系统。而不能单凭账面数据就审核盘点单。
3、由此想到另一个情况,就是静态盘点与动态盘点的选择。一个卖场、门店、仓库,往往有很多商品,成千上万种不足为奇。要做一次全场停业的盘点(即静态盘点)是非常困难的。因此,应该指导客户,多用分区盘点和动态盘点,即一边销售一边盘点,以盘点时的盈亏差额(账面与实际的差额)+ 实时账面库存 = 实际库存。特别是门店,他们的销售速度快,出入库频繁,首先推荐动态盘点。在算法逻辑上,如果客户选择了静态盘点,要完整地做好锁库(禁止本仓库一切出入库业务的审核)的操作。
4、在一些系统,存在离线与在线销售的模式。由于离线终端上传数据到总部,存在或长或短的延时(延时几分钟很正常,延时几天,十几天的都有) ,总部系统更新账面数据的时间可能会比实际延迟很多。这时就要记录更新实际时间(和业务日期可能不一样)。这里,我本人选择以实际业务发生的时间,作为出入库报表的统计标准,但这样就出现了出入库账面数据与账面不匹配的问题(因为库存账面是延后几天才更新的),所以应该同时记录账面更新的时间。如果是往期的销售数据上传,解决方案同2,账面库存不更新。
5、另外还有一些是多单位换算造成的误差。由于换算率不能整除,而出现四舍五入的情况。比如,一码=0.9144米,1米=1.0936132983377码。假设以米为基本单位,以码为辅助单位,出库2码的布,即1.8288米,再把它换算回码(假设系统是取6位小数,取1.093613)1.8288*1.093613=1.999999,误差了0.000001.长期积累,也有一定的误差,当然这个数量应该不太大。但是,如果我们把存储的小数位扩大,如果存储8位,1.09361329,在计算完成的时候取6位小数,结果就准确了。所以,设计时存储较长的小数位,在取结果时才截取较短的小数,并培训客户选择适当的基本单位,避免多次换算,也可以减少这种误差。
当然,库存误差还有很多的原因。即使是知名的软件,用友,金碟等,网上也有出现这样的问题。库存、成本、账款,业务流转等,都是ERP系统中比较复杂的逻辑。很多时候,一个参数的错误,或者统计方式的不一致,也是造成误差的重要因素。所以,综合几位朋友的说法,软件总有BUG,但编程要保持心情的平静。头脑的冷静,只有这样才能写出较正确完善的代码(注意,这里不是绝对。因为我觉得程序员是人不是机器,写错的概率是必然的。),同时也要重视单元测试的必要性。一小段代码,在完成时没有测试出来,到了系统测试甚至投入使用以后,可能要花几倍的时间才能找到“根源”。
以上纯属个人看法。总结出来,以提醒和激励未来的自己。