很多人都知道发票校验时产生这个报错的原因是:发票校验时单价比收货时低,实时库存金额不够抵消产生的负差异
通过报表检查一下库存的移动价和收货时的移动价是否有差值
检查后发现,收货的移动平均价和miro时的移动平均价是相等的,说明不是这里的问题
之后又去研究官网note:
2711960 - 采购 IV:帮助分析和解决错误 M8783 - SAP ERP 和 SAP S/4HANA
参考:
https://me.sap.com/notes/0002711960
其中,“集团货币差异”引起了我的注意,想到采购单并不是外币结算的,那“集团货币差异”是怎么来的,突然想到了“集团评估”
就去检查物料主数据的集团评估和利润中心评估,发现集团评估和利润中心评估的移动价为177/PCS,如下图的地方,原数据已经被改,已经无法找到原始数据了
再仔细阅读了一下note里的解决方案,看到了”XSMBEW-CURTP“这个字段,想到了是集团评估和利润中心评估的字段,也证实了我的猜想
于是,按照解决方案的程序debug,发现一条行项目,循环3次,就正好是公司代码一次,集团评估一次,利润中心评估一次
基于debug的SALK3和LBKUM数据分析
miro时的物料数据
行项目 | 物料编号 | 入库数量 | 入库时的价值 | 入库时的单价 | 集团评估单价 | 发票校验时集团评估的差异(单价) | 发票校验时计算的总差异A |
10 | 302500015812 | 7,105.00 | 125,752.21 | 17.699 | 177 | 159.301 | 1,131,833.61 |
20 | 302500015812 | 5,900.00 | 104,424.78 | 17.699 | 177 | 159.301 | 939,875.90 |
30 | 302500015812 | 900 | 15,929.20 | 17.699 | 177 | 159.301 | 143,370.90 |
40 | 302500015812 | 9,520.00 | 168,495.58 | 17.699 | 177 | 159.301 | 1,516,545.52 |
50 | 302500015812 | 7,050.00 | 124,778.76 | 17.699 | 177 | 159.301 | 1,123,072.05 |
miro时点的库存数量为7900PCS,集团评估库存价值为7900*177=1398300
因为是一张miro多个行项目是同一个物料,按照物料号循环,第一笔计算实时库存与发票校验时计算的总差A---SALK3=1,398,300- 1,131,833.61=266,467.21,校验通过。
第二笔又是同一个物料,会继续循环计算,实时库存与发票校验时计算的总差A---SALK3=1,398,300-( 1,131,833.61 + 939,875.90)=-673408.01,到这一步,发票校验时计算的总差异已经在库存中无法承担,会使物料库存减为负数,所以报错。
第三笔,又是同一个物料,继续循环计算,因为第二笔计算出了负数,所以第三笔计算差异时,将第二笔的总差异A给值为0;第三笔计算的SALK3=1,398,300-( 1,131,833.61 + 0 + 143,370.90)=123,096.41,校验通过。
。。。。。。
依次计算,debug后(XSMBEW-CURTP=31)的SALK3和lbkum的数据如下,和测算数据一致:
循环的行项目 | SALK3 | LBKUM |
10 | 266467.21 | 7900 |
20 | -673408.01 | 7900 |
30 | 123096.41 | 7900 |
40 | -1135380.58 | 7900 |
50 | -999974.83 | 7900 |
因为是一个物料号多个行项目,所以用MR21调整即时库存时,需要考虑多个行项目的值,使每个行项目的SALK3减出来都要大于0.