使用BAPI一定要提交和回滚(错误)

本文记录了一次SAP交货单过账失败的经历,并分享了解决方案。作者最初怀疑是BADI增强的问题,经过排查发现是由于BDC测试中删除了提交代码导致。文中提供了具体的ABAP代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      今天瞎了眼,交货单过账,提交半天没成功, 一直出现在SM12的锁定里,以为是做的BADI增强出了问题,DEBUG半天没毛病。

后来看代码才发现居然没提交(本来有提交代码的,但是做了个BDC测试,把那段代码给删了)。

  CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'
    EXPORTING
      HEADER_DATA    = L_HEADER
      HEADER_CONTROL = L_CONTROL
      DELIVERY       = DLV_NUMBER
    TABLES
      RETURN         = L_RETURN.

  READ TABLE L_RETURN WITH KEY TYPE 'E'  .
  IF SY-SUBRC .
    T_FLAG 'X' .

    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LOOP AT L_RETURN.
      I_MESSAGE_TAB-MSGID = L_RETURN-ID .
      I_MESSAGE_TAB-MSGTY =  L_RETURN-TYPE.
      I_MESSAGE_TAB-MSGNO = L_RETURN-NUMBER.
      I_MESSAGE_TAB-MSGV1 = L_RETURN-MESSAGE_V1.
      I_MESSAGE_TAB-MSGV2 = L_RETURN-MESSAGE_V2.
      I_MESSAGE_TAB-MSGV3 = L_RETURN-MESSAGE_V3.
      APPEND I_MESSAGE_TAB.
      CLEAR I_MESSAGE_TAB.
    ENDLOOP.

    CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
      EXPORTING
        I_MSGID       = I_MESSAGE_TAB-MSGID
        I_MSGTY       = I_MESSAGE_TAB-MSGTY
        I_MSGNO       = I_MESSAGE_TAB-MSGNO
        I_MSGV1       = I_MESSAGE_TAB-MSGV1
        I_MSGV2       = I_MESSAGE_TAB-MSGV2
        I_MSGV3       = I_MESSAGE_TAB-MSGV3
        I_MSGV4       = I_MESSAGE_TAB-MSGV4
*       I_LINENO      =
      TABLES
        I_MESSAGE_TAB = I_MESSAGE_TAB.
  ELSE.
    MESSAGE '过账成功' TYPE 'S'  .

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT 'X'.


    WAIT UP TO 1 SECONDS .
  ENDIF.

转载于:https://www.cnblogs.com/hdchen/p/7919334.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值