业务背景:
公司间采购业务(STO)在公司间销售开票后通过IDOC(EDI)自动产生应付时,出现如下情景:
情景1:报错提示 message M8183 “Delivery note/service entry sheet xxxx does not exist。
情景2:报错提示message M8321 "Document contains same order item more than once"。
原因:
情景1:功能模块 IDOC_INPUT_INVOIC_MRM 是根据收货凭证抬头的交货单编号确定正确的收货,故在 IDoc 段 E1EDP02(限定符 016)中,字段 BELNR 必须填写与收货凭证中相同的交货单编号。因此,如果收货的物料凭证的参考字段显示的交货单号和我们销售发票对应的交货单号不相同,则系统无法匹配到应付的项目,就无法成功发送IDOC。
情景2:使用 MIRO 时,系统将根据EKBE-LFGJA、EKBE-LFBNR 和 EKBE-LFPOS三个字段去创建GR开票行项目。
IDOC 自动产生应付时,使用的是消息类型INVOIC 和功能模块IDOC_INPUT_INVOIC_MRM 。在这种情况下,供应商不知道 参考 / 收货凭证详细信息(EKBE-LFGJA、EKBE-LFBNR 和 EKBE-LFPOS)。因此,IDOC将根据交货单号 (EKBE-XBLNR) 、采购订单号(EKBE-EBELN) 和采购订单项目编号(EKBE-EBELP)(如果有)识别相应的收货项目(GR开票项目)。这是MRM_GR_ASSIGN (LMRMHF0Q) 实现的标准逻辑。
根据上述逻辑,如果IDOC 在其字段中填充了不正确的信息 (比如段 E1EDP02-ZEILE 未正确填充),导致无法确定正确的订单项目,则系统将引发错误M8321。因此,如果采购订单只有1行,交货单因为批次拆分变成了2行,那行项目的对应关系就会变成1对2,IDOC 就会认定项目重复。
解决方案:
情景1:
1、规范业务操作:公司间采购订单收货时,不允许多个交货单一起收货,产生一个物料凭证。
2、增强进行强控:限制多个交货单一起收货。
3、错误数据处理:用WE02修改段 E1EDP02(限定符 016)中的字段 BELNR 的值为正确的交货单号。
情景2:
1、配置限制:批次拆分行项目类型设为与主项目不同,主项目开票相关,拆分项目开票无关。
2、在用户出口 EXIT_SAPLMRMH_011 或 EXIT_SAPLMRMH_013 中把主项目相同的发票行项目合并,这样发票项目和采购订单项目就是1对1的关系了。具体可参考SAP note: 165659 - Documentation: Enhancement MRMH0002 (MM-IV)。