【ECC EWM实现外向交货单数量修改以及增加行项目-实现原理说明】

系列文章目录

第一章 实现原理介绍

第二章 实现代码说明


目录

系列文章目录

前言

一、系统环境说明

二、实现步骤

1.ECC中的开发

2.EWM中的开发

总结


前言

在ECC和EWM集成的时候,当外向交货单已经下发到EWM之后,则ECC中的交货单无法进行数量修改,或者新增新的行项目,这个对用户造成了非常大的困扰,对于部分客户来说创建一个新的交货单需要走比较复杂的审批流程,这样就会导致工作效率低下,影响用户体验。

为了解决这种情况,结合SAP ECC和EWM现有的集成特点和预留的一些增强,做一些增强开发实现这一业务诉求。


一、系统环境说明

本方案是基于ECC 6.0S/4 EWM 2020进行实现的,如果ERP用的是S/4并且是大于1809版本的,则这个功能已经具备了的,不需要再进行实现,直接配置下就可以。

二、实现步骤

1.ECC中的开发

1.1.修改交货单状态

实现目的:标准的VL02N在检查交货单已经下发的时候,则直接不给修改交货单,所以这个地方是需要进行调整,使得VL02N进来之后可修改交货单。

增强点:MV50AFDB,FORM likp_select。

处理逻辑:在以上form中做隐式增强,判断如果TCODE是VL02N并且LIKP-VLSTK=B,则临时将likp-vlstk修改成D状态。

1.2.获取EWM中的可修改的字段

实现目的:因为下发EWM的交货单不是所有的字段都可以进行修改的,需要考虑EWM中当前交货单的状态。

增强点:LE_SHP_DELIVERY_PROC- IF_EX_LE_SHP_DELIVERY_PROC~READ_DELIVERY。

处理逻辑:如果LIKP–VLSTK=B(此处需要从数据库表中读取),则调用EWM函数/SCWM/OUTB_DLV_GET_CHANGEABLE获取可以修改的字段以及是否可以增加行项目

1.3.修改交货单具体字段时的校验

实现目的:根据EWM函数/SCWM/OUTB_DLV_GET_CHANGEABLE返回的可修改的字段信息进行判断哪些字段是可以修改的,如果不在返回范围内的字段变更,则不允许修改,需要进行报错。

增强点:

LE_SHP_DELIVERY_PROC-IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER

LE_SHP_DELIVERY_PROC-IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_ITEM

处理逻辑:如果TCODE是VL02N、cs_likp-vlstk = 'D'以及LIKP–VLSTK=B,如果对应的抬头或者行项目的字段发生了变更,则需要判断发生变更的字段在不在EWM返回的可修改的字段范围内,如果不在,则需要进行报错,不允许修改。

ECC和EWM的字段映射关系如下:

mapping = VALUE #( ( bapi_field = 'DLV_PRIO'          delivery_fields = VALUE #( ( 'LIKP-LPRIO' ) ) )
             ( bapi_field = 'INCOTERMS1'        delivery_fields = VALUE #( ( 'LIKP-INCO1' ) ) )
             ( bapi_field = 'INCOTERMS2'        delivery_fields = VALUE #( ( 'LIKP-INCO2_L' ) ) )
              ( bapi_field = 'INCOTERMSV'        delivery_fields = VALUE #( ( 'LIKP-INCOV' ) ) )
             ( bapi_field = 'DLV_BLOCK'         delivery_fields = VALUE #( ( 'LIKP-LIFSK' ) ) )
             ( bapi_field = 'SHIP_COND'         delivery_fields = VALUE #( ( 'LIKP-VSBED' ) ) )
             ( bapi_field = 'ROUTE'             delivery_fields = VALUE #( ( 'LIKP-ROUTE' ) ) )
             ( bapi_field = 'ROUTESCHED'        delivery_fields = VALUE #( ( 'LIKP-AULWE' ) ) )
             ( bapi_field = 'TRANSP_ID'         delivery_fields = VALUE #( ( 'LIKP-TRAID' ) ) )
             ( bapi_field = 'TRANS_CAT'         delivery_fields = VALUE #( ( 'LIKP-TRATY' ) ) )
             ( bapi_field = 'WSHDRLFDAT'        delivery_fields = VALUE #( ( 'LIKP-LFDAT' )
                                                    ( 'LIKP-LFUHR' ) ) )
             ( bapi_field = 'WSHDRWADAT'        delivery_fields = VALUE #( ( 'LIKP-WADAT' )
                                                     ( 'LIKP-WAUHR' ) ) )
              ( bapi_field = 'WSHDRWADTI'        delivery_fields = VALUE #( ( 'LIKP-WADAT_IST' )
                                                ( 'LIKP-SPE_WAUHR_IST' ) ) )
              ( bapi_field = 'WSHDRLDDAT'        delivery_fields = VALUE #( ( 'LIKP-LDDAT' )
                                                    ( 'LIKP-LDUHR' ) ) )
              ( bapi_field = 'WSHDRTDDAT'        delivery_fields = VALUE #( ( 'LIKP-TDDAT' )
                                                    ( 'LIKP-TDUHR' ) ) )
              ( bapi_field = 'WSHDRKODAT'        delivery_fields = VALUE #( ( 'LIKP-KODAT' )
                                                    ( 'LIKP-KOUHR' ) ) )
              ( bapi_field = 'BATCH'             delivery_fields = VALUE #( ( 'LIPS-CHARG' ) ) )
              ( bapi_field = 'DLV_QTY'           delivery_fields = VALUE #( ( 'LIPS-LFIMG' ) ) )
              ( bapi_field = 'STGE_LOC'          delivery_fields = VALUE #( ( 'LIPS-LGORT' ) ) )
              ( bapi_field = 'SALES_QTY_DENOM'   delivery_fields = VALUE #( ( 'LIPS-UMVKN' ) ) )
              ( bapi_field = 'SALES_QTY_NUM'     delivery_fields = VALUE #( ( 'LIPS-UMVKZ' ) ) )
              ( bapi_field = 'SALES_UNIT'        delivery_fields = VALUE #( ( 'LIPS-VRKME' ) ) )
                     )

1.4.交货单保存前处理

主要目的:主要有以下两个目的:

(1)由于抬头的字段校验只检查一次,所以需要在保存的时候在校验一次;

(2)由于正式触发EWM修改是走队列模式的,所以在ECC保存交货单之前需要进行模拟修改一次,这样可以减少队列报错的几率,尽量保证ECC和EWM交货单一致。

增强点:LE_SHP_DELIVERY_PROC- IF_EX_LE_SHP_DELIVERY_PROC~DELIVERY_FINAL_CHECK

处理逻辑:

(1)针对抬头有修改值的字段与EWM可修改的字段再次进行比对,判断是否允许修改;

(2)调用EWM修改函数/SCWM/OUTB_DLV_CHANGE2进行模拟修改。

1.5.交货单保存时调用接口修改

主要目的:在ECC的交货单修改成功之后,通过对立的调用方式调用EWM的接口进行修改。

增强点:SHP_BAPI_DELIVERY_CHANGE。

               LV50KF09,FORM bapi_obdlv_chg_call_prepare

处理逻辑:如果IT_YLIKP –VLSTK=B,则直接调用函数/SCWM/OUTB_DLV_CHANGE2进行修改,这时需要获取一个tocken(可随便给一个值),IV_SIMULATE不给值,表示是正式修改。修改按照队列的方式进行,队列名称格式DLVS+原系统的逻辑系统+交货单号。

2.EWM中的开发

EWM中的增强开发为可选择项,这个主要看具体项目上是否有对应的修改需求。

2.1.重写是否可以增加行项目的逻辑

EWM标准的逻辑是只要仓库活动状态不为0,则就不能增加行项目,但是实际仓库需求可能是部分行项目已经拣配了或者已经创建了仓库任务,所以这部分逻辑需要重新确定,具体是否影响等后续程序测试的时候再检查。

增强点:/SCWM/ES_ERP_OD_CHANGE,如下图所示:

 2.2.重写数量是否可修改的逻辑

标准的检查逻辑是如果行项目的dwa(活动状态)状态为已开始,则不允许修改,可根据项目的实际需求再增加自己特殊的或者特定的校验。

增强点:/SCWM/ES_ERP_OD_CHANGE-MODIFY_CHANGEABLE。

2.3.修改交货单的MAPIN处理

如果在创建交货单的MAPIN里面有对应字段处理逻辑的增强,则需要将这部分逻辑也移到修改的MAPIN增强点。

增强点:/SCWM/IF_EX_MAPIN_OD_CHANGE~MAPIN


总结

使用上述增强方案,增强之后,即可实现从ECC已经下发到EWM的交货单,也可以在ECC中通过VL02N中进行修改以及新增新的行项目。

本章主要是说明了实现原理,下一章会着重说明具体代码是如何实现的。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈宸咨询

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值