SAP EWM&ERP 中ERP交货单重复过账,需要只冲销ERP的物料凭证

2 篇文章 0 订阅

根据SAP 提供的解决方案,创建一个程序zzmbstor 可以直接冲销ERP中凭证。

SAP Note 3350383

程序代码:

REPORT zzmbstor.

*********************************************************************
* Inconsistency between EWM and S/4/ERP
* Report to post in S/4/ERP only, without EWM and without           *
* distributed delivery                                              *
*                                                                   *
* Report to cancel material documents coming from EWM, posted       *
* without delivery, but in Trx MIGO, a material document            *
* cancellation would create a delivery (distributed to EWM)         *
*                                                                   *
*                                                                   *
* LF_BUDAT  =>  Posting date for the reversal                       *
* LF_MJAHR  =>  Posting year of the material document to reverse    *
* LF_MBLNR  =>  Goods issue document (with leading zeroes)          *
* LF_TEST   =>  When 'X' it is test mode only, otherwise GI will be *
*               cancelled                                           *
*********************************************************************

TABLES: mkpf, imkpf, emkpf, likp.

DATA:   BEGIN OF imseg OCCURS 0.
  INCLUDE STRUCTURE imseg.
DATA:   END OF imseg.

DATA:   BEGIN OF emseg OCCURS 0.
  INCLUDE STRUCTURE emseg.
DATA:   END OF emseg.

DATA:   g_flag_answer(01)     TYPE  C.

PARAMETERS: lf_budat LIKE sy-datlo DEFAULT sy-datlo OBLIGATORY,
lf_mjahr LIKE mkpf-mjahr DEFAULT sy-datlo(4) OBLIGATORY,
lf_mblnr LIKE mkpf-mblnr OBLIGATORY,
lf_test  TYPE C DEFAULT 'X'.

START-OF-SELECTION.

SELECT SINGLE * FROM mkpf WHERE mblnr = lf_mblnr
AND   mjahr = lf_mjahr.

IF sy-subrc IS INITIAL.

  IF NOT ( mkpf-tcode2(2) = 'MB' OR mkpf-tcode2(2) = 'VL' ) OR
  mkpf-spe_logsys IS INITIAL OR
  mkpf-spe_mdnum_ewm IS INITIAL.
    WRITE: / 'Goods movement cannot be reverted with this report, use other transaction!'.
    EXIT.
  ENDIF.

  IF mkpf-tcode2(2) = 'VL'.
    mkpf-tcode2 = 'VL09'.
  ENDIF.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
    TITLEBAR              = 'Cancel document without EWM update'
    text_question         = 'Do you really want to proceed?'
    text_button_1         = 'Go on'
    icon_button_1         = 'ICON_OKAY'
    text_button_2         = 'Go back'
    icon_button_2         = 'ICON_CANCEL'
    default_button        = '2'
    display_cancel_button = ' '
  IMPORTING
    answer                = g_flag_answer
  EXCEPTIONS
    OTHERS                = 1.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty
    NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2
    sy-msgv3 sy-msgv4.
  ENDIF.

  IF  g_flag_answer = '2'.
*     the user answered with "no" : stop
    EXIT.
  ENDIF.

  CALL FUNCTION 'MB_CANCEL_GOODS_MOVEMENT'
  EXPORTING
    budat  = lf_budat
    mblnr  = lf_mblnr
    mjahr  = lf_mjahr
    tcode  = mkpf-tcode2
    bfwms  = '2'
  IMPORTING
    emkpf  = emkpf
  TABLES
    emseg  = emseg
    imseg  = imseg
  EXCEPTIONS
    OTHERS = 1.

*... No error found, then it will be posted
  IF emkpf-subrc EQ 1.
    IF lf_test IS INITIAL.
      CALL FUNCTION 'MB_POST_GOODS_MOVEMENT'
      IMPORTING
        emkpf  = emkpf
      EXCEPTIONS
        OTHERS = 0.

      IF emkpf-subrc = 0.
        COMMIT WORK.
        WRITE: / 'Goods movement was cancelled successfully with document:',
        emkpf-mblnr.
      ELSE.
        ROLLBACK WORK.
        WRITE: / 'Error in posting'.
        WRITE: / emkpf-msgid,
        emkpf-msgno,
        emkpf-msgty,
        emkpf-msgv1,
        emkpf-msgv2,
        emkpf-msgv3,
        emkpf-msgv4.
      ENDIF.
    ELSE.
      WRITE: / 'Testmode: Goods movement could be cancelled !'.
    ENDIF.
  ELSE.
*... otherwise write an error-log
    LOOP AT emseg.
      WRITE: /
      emseg-msgid,
      emseg-msgno,
      emseg-msgty,
      emseg-msgv1,
      emseg-msgv2,
      emseg-msgv3,
      emseg-msgv4.
    ENDLOOP.
    WRITE: / emkpf-msgid,
    emkpf-msgno,
    emkpf-msgty,
    emkpf-msgv1,
    emkpf-msgv2,
    emkpf-msgv3,
    emkpf-msgv4.

  ENDIF.
ELSE.
  WRITE: / 'Material document to reverse does not exsist'.
ENDIF.

AT SELECTION-SCREEN.

* the user needs authorization for debugging
* authorization check can be replaced with custom check if required
AUTHORITY-CHECK OBJECT 'S_DEVELOP'
ID 'DEVCLASS' DUMMY
ID 'OBJTYPE'  FIELD 'DEBUG'
ID 'OBJNAME'  DUMMY
ID 'P_GROUP'  DUMMY
ID 'ACTVT'    FIELD '03'.

IF  sy-subrc <> 0.
*   You have no authorization for this trans./event
  MESSAGE e858(m7).
ENDIF.

MESSAGE i895(m7)
WITH 'CAUTION: Only for double posted EWM documents!'.
MESSAGE w895(m7)
WITH 'Otherwise it causes discrepancies between ERP/EWM!'.

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SAP ERPSAP EWM都是SAP系统的两个重要模块。RFC(Remote Function Call)是SAP系统用于实现不同模块之间通信和数据交互的一种技术。 首先,SAP ERP(Enterprise Resource Planning)是一个集成的业务管理软件,用于管理企业的各个方面,包括财务、物料管理、销售和分销、人力资源等等。在SAP ERP,RFC设置用于实现与其他模块的通信,比如FI(财务)、MM(物料管理)、SD(销售和分销)等。通过RFC设置,可以在不同模块之间传输数据,比如将销售订单数据传输到财务模块进行发票开具。 而SAP EWM(Extended Warehouse Management)是一个专注于仓储管理的模块,用于优化仓库运作和物流流程。在SAP EWM,RFC设置用于与其他模块的集成,如SAP ERPSAP TM(Transportation Management)等。通过RFC设置,可以实现与其他模块的实时数据交互,例如将入库单数据从SAP ERP传输到SAP EWM,以便进行库存管理和出库操作。 对于RFC设置,需要SAP系统进行相应的配置和参数设置。首先,需要定义RFC目的地(Destination)以指定与哪个系统或模块进行通信。然后,需要创建RFC函数(Function Module)以定义需要传输的数据和操作。接下来,需要创建RFC接口(Interface)以定义数据的格式和字段。最后,在相关模块进行RFC调用和数据传输的具体实现。 总结而言,SAP ERPSAP EWM都可以通过RFC设置来实现与其他模块的通信和数据交互。在配置RFC设置时,需要定义RFC目的地、创建RFC函数和接口,并在相关模块进行调用和数据传输的具体实现。这样可以实现系统之间的协调和集成,提高企业的业务效率和管理水平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值