二维码

[BAPI] 冲销物料凭证--完全冲销:BAPI_GOODSMVT_CANCEL

Twilight发表于 2018-09-30 16:02Twilight 最后回复于 2018-09-30 16:02 [复制链接] 4856 0

程序代码:
  1. FUNCTION zmmfm005.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口
  4. *"  IMPORTING
  5. *"     VALUE(I_INPUT) TYPE  ZMMS005 OPTIONAL
  6. *"  EXPORTING
  7. *"     VALUE(E_MESSAGE) TYPE  ZOTS001
  8. *"     VALUE(E_MBLNR) TYPE  MBLNR
  9. *"     VALUE(E_MJAHR) TYPE  MJAHR
  10. *"----------------------------------------------------------------------
  11.   DATA:BEGIN OF ls_mkpf,
  12.          mblnr TYPE mseg-mblnr,
  13.          mjahr TYPE mseg-mjahr,
  14.        END OF ls_mkpf.
  15.   DATA:lt_mkpf LIKE TABLE OF ls_mkpf WITH HEADER LINE.
  16.   DATA:lv_line  TYPE i.
  17.   DATA:lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
  18.   DATA:ls_goodsmvt_headret TYPE bapi2017_gm_head_ret.

  19.   IF i_input-mblnr IS NOT INITIAL AND i_input-mjahr IS NOT INITIAL.
  20.     SELECT SINGLE mblnr mjahr INTO ls_mkpf
  21.     FROM mseg
  22.     WHERE mseg~mblnr = i_input-mblnr
  23.       AND mseg~mjahr = i_input-mjahr
  24.       AND mseg~sjahr = ''
  25.       AND NOT EXISTS ( SELECT * FROM m_mbmps
  26.                         WHERE m_mbmps~smbln = mseg~mblnr
  27.                           AND m_mbmps~sjahr = mseg~mjahr
  28.                           AND m_mbmps~smblp = mseg~zeile ).
  29.     IF sy-subrc NE 0.
  30.       e_message-type = 'S'.
  31.       e_message-message = '没有符合条件数据'.
  32.       EXIT.
  33.     ENDIF.
  34.   ELSEIF i_input-bktxt IS NOT INITIAL.
  35.     SELECT mkpf~mblnr mkpf~mjahr INTO TABLE lt_mkpf
  36.     FROM mkpf
  37.     INNER JOIN mseg ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
  38.     WHERE mkpf~bktxt = i_input-bktxt
  39.       AND mseg~sjahr = ''
  40.       AND NOT EXISTS ( SELECT * FROM m_mbmps
  41.                         WHERE m_mbmps~smbln = mseg~mblnr
  42.                           AND m_mbmps~sjahr = mseg~mjahr
  43.                           AND m_mbmps~smblp = mseg~zeile ).
  44.     IF sy-subrc = 0.
  45.       SORT lt_mkpf.
  46.       DELETE ADJACENT DUPLICATES FROM lt_mkpf COMPARING ALL FIELDS.
  47.       DESCRIBE TABLE lt_mkpf LINES lv_line.
  48.       IF lv_line = 1.
  49.         READ TABLE lt_mkpf INTO ls_mkpf INDEX 1.
  50.       ELSE.
  51.         e_message-type = 'E'.
  52.         e_message-message = '数据异常:多条'.
  53.         EXIT.
  54.       ENDIF.
  55.     ELSE.
  56.       e_message-type = 'S'.
  57.       e_message-message = '没有符合条件数据'.
  58.       EXIT.
  59.     ENDIF.
  60.   ELSE.
  61.     e_message-type = 'E'.
  62.     e_message-message = '输入条件不能全为空'.
  63.     EXIT.
  64.   ENDIF.

  65.   CHECK e_message-type NE 'E'.

  66.   CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
  67.     EXPORTING
  68.       materialdocument    = i_input-mblnr
  69.       matdocumentyear     = i_input-mjahr
  70.       goodsmvt_pstng_date = sy-datum
  71.       goodsmvt_pr_uname   = sy-uname
  72.     IMPORTING
  73.       goodsmvt_headret    = ls_goodsmvt_headret
  74.     TABLES
  75.       return              = lt_return.

  76.   LOOP AT lt_return WHERE type CA 'AEX'.
  77.     "消息类型包含:A、E、X任何一种
  78.     IF e_message-message IS INITIAL.
  79.       e_message-message   = lt_return-message.
  80.     ELSE.
  81.       CONCATENATE e_message-message lt_return-message INTO e_message-message SEPARATED BY '/'.
  82.     ENDIF.
  83.   ENDLOOP.
  84.   IF sy-subrc = 0.
  85.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

  86.     e_message-type = 'E'.
  87.     EXIT.
  88.   ELSE.
  89.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  90.       EXPORTING
  91.         wait = 'X'.
  92.     e_message-type = 'S'.
  93.     e_message-message  = '冲销物料凭证成功'.
  94.     e_mblnr  = ls_goodsmvt_headret-mat_doc.
  95.     e_mjahr  = ls_goodsmvt_headret-doc_year.
  96.   ENDIF.

  97. ENDFUNCTION.
复制代码


回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表