BAPI 实例:GR with inbound delivery

   REPORT  z101_gr.
TABLES:ekpo, yindct, ymaret, zlocct.

DATA: mat_doc LIKE bapi2017_gm_head_ret-mat_doc.

DATA:save_code LIKE sy-ucomm,
      ok_code LIKE sy-ucomm,
      loc_msg(50),
      flag TYPE i,
      gmnga LIKE afru-gmnga,
      errflag.
DATA: w_textout LIKE t100-text.
DATA: it_itab  TYPE STANDARD TABLE OF yindct INITIAL SIZE 0,
      yt_itab  TYPE STANDARD TABLE OF ymaret INITIAL SIZE 0,
      et_itab  TYPE STANDARD TABLE OF ekpo INITIAL SIZE 0,
      wa_itab  TYPE yindct,
      ya_itab  TYPE ymaret,
      wa_success  TYPE yindct,
      wa_error TYPE yindct,
      wa_ztab TYPE zlocct.
DATA: s_vbeln LIKE yindct-vbeln.
DATA:save_ok LIKE sy-ucomm.

DATABEGIN OF sumtable,
  matnr LIKE ymaret-matnr,
  casno LIKE yindct-casno,
  lgort LIKE yindct-lgort,
  bwart LIKE zlocct-bwart,
  wemng LIKE ymaret-wemng,
  meins LIKE ymaret-meins,
  bstnr LIKE ymaret-bstnr,
  ebelp LIKE ymaret-ebelp,
*      LIFNR LIKE YINDCT-LIFNR,
END OF sumtable.
DATA: s_table LIKE sumtable OCCURS 0 WITH HEADER LINE,
      sa_table LIKE sumtable.

DATA:BEGIN OF gt_afpo OCCURS 0.
        INCLUDE STRUCTURE afpo.
DATA:END OF gt_afpo.

DATA:gmhead LIKE bapi2017_gm_head_01.

DATABEGIN OF gmcode.
        INCLUDE STRUCTURE bapi2017_gm_code.
DATAEND OF gmcode.

DATABEGIN OF mthead.
        INCLUDE STRUCTURE bapi2017_gm_head_ret.
DATAEND OF mthead.

DATABEGIN OF itab OCCURS 100.
        INCLUDE STRUCTURE bapi2017_gm_item_create.
DATAEND OF itab.

DATABEGIN OF errmsg OCCURS 10.
        INCLUDE STRUCTURE bapiret2.
DATAEND OF errmsg.

START-OF-SELECTION.
  CALL SCREEN 1000.

*----------------------------------------------------------------------*
*  MODULE user_command_1000 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_1000 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'TE'.
      LEAVE PROGRAM.
    WHEN OTHERS.
      IF s_vbeln IS INITIAL.
        MESSAGE 'NO INBOUND INPUT!' TYPE 'S'.
      ELSE.
        PERFORM add_zero.
*      PERFORM data.
        PERFORM get_data.
*      IF wa_itab-vbeln <> ''.
        PERFORM fun.
        CLEAR errflag.
        CLEAR: s_vbeln.
        CLEAR: wa_itab,wa_ztab,sumtable,s_table[].
      ENDIF.
  ENDCASE.
ENDMODULE.                    "user_command_1000 INPUT

*&---------------------------------------------------------------------*
*&      Form  add_zero
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM add_zero.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = s_vbeln
    IMPORTING
      output = s_vbeln.
ENDFORM.                    "add_zero

*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data.
  " check duplicate scan
  CLEAR flag.
  SELECT COUNT(*) INTO flag FROM yindct WHERE yindct~statg IN ('101S','102E'AND yindct~vbeln = s_vbeln.
  IF flag > 0.
    CLEAR sumtable.
    SELECT SINGLE yindct~bstnr yindct~casno INTO (sumtable-bstnr,sumtable-casno) FROM yindct WHERE yindct~vbeln = s_vbeln.
    CLEAR w_textout.
    CONCATENATE 'PO-' sumtable-bstnr' Case' sumtable-casno' have been GR' INTO w_textout.
    MESSAGE w_textout TYPE 'S'.
    CLEAR s_vbeln.
    CALL SCREEN 1000.
  ELSE.
    SELECT * INTO wa_itab
    FROM yindct
    WHERE yindct~vbeln = s_vbeln.
    ENDSELECT.
    SELECT yindct~bstnr yindct~casno yindct~lgort INTO (sumtable-bstnr,sumtable-casno,sumtable-lgort)
    FROM yindct
    WHERE yindct~vbeln = s_vbeln.

      SELECT ymaret~matnr ymaret~wemng ymaret~meins ymaret~ebelp INTO (sumtable-matnr,sumtable-wemng,sumtable-meins,sumtable-ebelp)
      FROM ymaret
      WHERE ymaret~bstnr = sumtable-bstnr AND ymaret~casno = sumtable-casno.
        APPEND sumtable TO s_table.
      ENDSELECT.
    ENDSELECT.

  ENDIF.
ENDFORM.                    "get_data

*&---------------------------------------------------------------------*
*&      Form  fun
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fun.
  gmcode-gm_code = '01'.
  gmhead-ref_doc_no = '3'.
  gmhead-pstng_date = sy-datum ."mkpf-bldat.sy-datum
  gmhead-doc_date = sy-datum ."mkpf-budat.
  gmhead-pr_uname = sy-uname.
  CLEAR itab[].
  LOOP AT s_table INTO sa_table.
    itab-material = sa_table-matnr.
    itab-plant = 'LMWC'.
    itab-stge_loc = sa_table-lgort.
    itab-move_type = '101'.
*  itab-spec_stock = 'wlog'..
    itab-entry_qnt = sa_table-wemng.
    itab-entry_uom = sa_table-meins.
    itab-po_number = sa_table-bstnr.
    itab-po_item = sa_table-ebelp.
    itab-mvt_ind = 'B'.
*  itab-move_mat = '409031751'.
    itab-move_plant = 'LMWC'.
    itab-move_stloc = sa_table-lgort.
    itab-nb_slips = 1.
    APPEND itab.
    CLEAR:sa_table,itab.
  ENDLOOP.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = gmhead
      goodsmvt_code    = gmcode
    IMPORTING
      goodsmvt_headret = mthead
      materialdocument = mat_doc
    TABLES
      goodsmvt_item    = itab
      return           = errmsg.

  LOOP AT errmsg.
    CLEAR loc_msg.
    IF errmsg-type EQ 'E'.
      IF wa_itab-statg <> 'S'.
        wa_error = wa_itab.
        wa_error-bedat1 = sy-datum.
        wa_error-lzeit1 = sy-uzeit.
        wa_error-ernam1 = sy-uname.
        wa_error-statg = '101E'.
        wa_error-text = errmsg-message.
        MODIFY yindct FROM wa_error.
        CLEAR: wa_error.
        CLEAR: wa_itab.
        MESSAGE errmsg-message TYPE 'S'.
        errflag = 'X'.
      ELSE.
        MESSAGE errmsg-message TYPE 'S'.
        errflag = 'X'.
      ENDIF.
    ENDIF.
  ENDLOOP.


  IF errflag IS INITIAL.
    COMMIT WORK AND WAIT.
    CLEAR loc_msg.
    IF sy-subrc NE 0.
      MESSAGE 'error! please try again.' TYPE 'S'.
      EXIT.
    ELSE.
      CONCATENATE 'Material document  '  mat_doc ' posted' INTO loc_msg.
      wa_success = wa_itab.
      wa_success-bedat1 = sy-datum.
      wa_success-lzeit1 = sy-uzeit.
      wa_success-ernam1 = sy-uname.
      wa_success-statg = '101S'.
      wa_success-mblnr = mat_doc.
      wa_success-text = loc_msg.
      wa_success-locst = wa_success-lgort.
      MODIFY yindct FROM wa_success.
      CLEAR: wa_success.
      CLEAR: wa_itab.
      MESSAGE  loc_msg TYPE 'S'.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
ENDFORM.                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值