SAP对接WMS消息提醒优化

发布于:2025-07-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

提供WMS调用的接口函数:ZSD_I001_SD001_WMS

用户名:WEB_IF_860

调用BAPI时没有消息提醒,程序直接就跳掉了

    CALL FUNCTION 'WS_DELIVERY_UPDATE'
      EXPORTING
        vbkok_wa                  = ls_vbkok
        commit                    = 'X'
        delivery                  = ps_vbeln
        update_picking            = 'X'
      IMPORTING
        ef_error_in_goods_issue_0 = v_error
      TABLES
        vbpok_tab                 = lt_vbpok
        prot                      = lt_prot.
    IF v_error IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.

 PERFORM prepare_data."批次拆分前的数据准备

PERFORM automatic_posting."外向交货单自动填入拣配数量和自动过账

 把关键的信息提取出来,建个新程序

*&---------------------------------------------------------------------*
*& Report ZHF_TEST2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zhf_test2.

DATA: lv_vbeln TYPE likp-vbeln.

lv_vbeln = '8913003268'.

DATA: ls_vbkok        TYPE vbkok.
DATA: lt_vbkok        TYPE STANDARD TABLE OF vbkok.
DATA: lt_vbpok        TYPE STANDARD TABLE OF vbpok.
DATA: ls_vbpok        TYPE vbpok.
DATA: lt_prot         TYPE TABLE OF prott.
DATA: v_error.
DATA: lt_lips     TYPE TABLE OF lips.
DATA: ls_lips     TYPE lips.
DATA: lt_lips1    TYPE TABLE OF lips.


DATA: ps_vbeln TYPE likp-vbeln.
"根据交货单号查出需要更改的交货单
SELECT * FROM lips INTO TABLE @lt_lips1 WHERE vbeln = @lv_vbeln.

ls_vbkok-vbeln_vl = lv_vbeln.
ps_vbeln = lv_vbeln.
LOOP AT lt_lips1 INTO DATA(ls_lips1).
  CLEAR:ls_vbpok.
  ls_vbpok-vbeln_vl  = ls_lips1-vbeln.
  ls_vbpok-posnr_vl  = ls_lips1-posnr.
  ls_vbpok-vbeln     = ls_lips1-vgbel.
  ls_vbpok-posnn     = ls_lips1-vgpos.
  ls_vbpok-pikmg     = ls_lips1-lfimg.
  ls_vbpok-matnr     = ls_lips1-matnr.
  ls_vbpok-charg     = ls_lips1-charg.
  ls_vbpok-vrkme     = ls_lips1-vrkme.
  ls_vbpok-meins     = ls_lips1-meins.
  ls_vbpok-umvkz     = ls_lips1-umvkz.
  ls_vbpok-umvkn     = ls_lips1-umvkn.
  ls_vbpok-lgort     = ls_lips1-lgort.
  APPEND ls_vbpok TO lt_vbpok.
ENDLOOP.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
  EXPORTING
    vbkok_wa                  = ls_vbkok
    commit                    = 'X'
    delivery                  = ps_vbeln
    update_picking            = 'X'
    "if_error_messages_send_0  = ''
  IMPORTING
    ef_error_in_goods_issue_0 = v_error
  TABLES
    vbpok_tab                 = lt_vbpok
    prot                      = lt_prot.
IF v_error IS INITIAL.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = abap_true.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.

 会有消息提示

 SAPLV50S >> LV50LF02

 修改SY-MSGTY成S,不然的话会跳掉

 然后可以看是哪个步骤调用的

之所以会有屏幕的消息提醒,是IF_ERROR_MESSAGES_SEND设置成了X

把 if_error_messages_send_0 设置从'X'改成''即可。

 修改代码后捕抓对应的消息提醒

    CALL FUNCTION 'WS_DELIVERY_UPDATE'
      EXPORTING
        vbkok_wa                  = ls_vbkok
        commit                    = 'X'
        delivery                  = ps_vbeln
        update_picking            = 'X'
        if_error_messages_send_0  = '' "ZHF-250001 选择否后不会有屏幕的消息提醒
      IMPORTING
        ef_error_in_goods_issue_0 = v_error
      TABLES
        vbpok_tab                 = lt_vbpok
        prot                      = lt_prot.
    IF v_error IS INITIAL.
      IF sy-msgty = 'E'.                                    "ZHF-250001
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        ls_json_out1-vbeln     = ls_json_in-vbeln.
        ls_json_out1-zzmsgtype = 'E'.
        MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno INTO e_mess
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ls_json_out1-zzmsg     = e_mess.

        RETURN.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.
      ENDIF.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.

 查看对应的日志,可以发现一直有反复调用,但是没有返回消息

在SE37测试

 DEBUG调试,修改变量的值

 回写出了消息

 


网站公告

今日签到

点亮在社区的每一天
去签到