REPORT z0304.
"定義需要使用的表
TABLES: afko,aufk,resb.
*生産訂單收貨的bapi所用結構
DATA: mat_doc LIKE bapi2017_gm_head_ret-mat_doc,"物料憑證号
itpt LIKE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,"明細表
gmhead LIKE bapi2017_gm_head_01,"頭結構
gmcode LIKE bapi2017_gm_code,"頭結構
mthead LIKE bapi2017_gm_head_ret,"輸出結構
berrmsg LIKE TABLE OF bapiret2 WITH HEADER LINE."輸出資訊
"定義需要使用的類型池
TYPE-POOLS:slis,truxs.
DATA: BEGIN OF it_display OCCURS 0,
aufnr LIKE afko-aufnr,"生産訂單編号
rsnum LIKE afko-rsnum,"預留
werks LIKE resb-werks,"工廠
lgort LIKE resb-lgort,"庫存地點
matnr LIKE resb-matnr,"物料号碼
bdmng LIKE resb-bdmng."數量
DATA: END OF it_display.
DATA:it_resb LIKE TABLE OF it_display WITH HEADER LINE.
"開始時候螢幕上顯示的 查詢條件的 輸入框
SELECT-OPTIONS:
"生産訂單号
aufnr FOR afko-aufnr OBLIGATORY NO INTERVALS NO-EXTENSION.
"設定螢幕事件
START-OF-SELECTION.
"查詢收貨所需要的字段
SELECT
a~aufnr
a~werks
b~gamng AS bdmng
b~rsnum
FROM aufk AS a
INNER JOIN afko AS b ON a~aufnr = b~aufnr
APPENDING CORRESPONDING FIELDS OF TABLE it_resb
WHERE a~aufnr IN aufnr.
"循環讀取表中資料添加到bapi的明細表中
LOOP AT it_resb.
CLEAR:itpt.
"查詢庫位
SELECT SINGLE *
FROM resb
WHERE rsnum = it_resb-rsnum.
itpt-plant = it_resb-werks."工廠
itpt-stge_loc = resb-lgort."庫位(根據自己所需要庫位進行調整)
itpt-material = it_resb-matnr."物料号
itpt-entry_qnt = it_resb-bdmng."數量(根據自己所需要數量進行調整)
itpt-orderid = it_resb-aufnr."生産訂單
itpt-item_text = '項目文本'."項目文本
itpt-move_type = '101'."移動類型
itpt-mvt_ind = 'F'. "移動辨別
itpt-stck_type = ''."庫存類型(根據自己所需要庫存類型進行調整)
itpt-order_itno = '1'. "行項目1,2,3
itpt-line_id = '1'. "憑證行的唯一辨別 1,2,3
APPEND itpt.
ENDLOOP.
"擡頭文本
gmhead-header_txt = '擡頭文本'."擡頭文本
gmhead-pstng_date = sy-datum.."憑證中的過帳日期
gmhead-doc_date = sy-datum.."憑證中的憑證日期
gmcode-gm_code = '02'."代碼
"調用bapi
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = gmhead
goodsmvt_code = gmcode
IMPORTING
goodsmvt_headret = mthead
materialdocument = mat_doc
TABLES
goodsmvt_item = itpt
return = berrmsg.
READ TABLE berrmsg WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
"物料憑證号
MESSAGE mat_doc TYPE 'S'.
ELSE.
MESSAGE berrmsg-message TYPE 'E'.
ENDIF.