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.
DATA: BEGIN 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.
DATA: BEGIN OF gmcode.
INCLUDE STRUCTURE bapi2017_gm_code.
DATA: END OF gmcode.
DATA: BEGIN OF mthead.
INCLUDE STRUCTURE bapi2017_gm_head_ret.
DATA: END OF mthead.
DATA: BEGIN OF itab OCCURS 100.
INCLUDE STRUCTURE bapi2017_gm_item_create.
DATA: END OF itab.
DATA: BEGIN OF errmsg OCCURS 10.
INCLUDE STRUCTURE bapiret2.
DATA: END 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.