BAPI_GOODSMVT_CREATE는 자재 입고/출고/이동을 처리하기 위한 function module이다.
보통이 경우 아래 처럼 노란색부분의 데이터만 추가하고 실행해주면 처리된다.
//===입력 데이터 선언================
DATA:
gm_head LIKE bapi2017_gm_head_01,
gm_code LIKE bapi2017_gm_code,
gm_item LIKE bapi2017_gm_item_create OCCURS 0 WITH HEADER LINE,
gm_headret LIKE bapi2017_gm_head_ret,
gt_ret2 LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
gm_head-doc_date = sy-datum.
gm_head-pstng_date = sy-datum.
gm_code = '01'. "//구매오더를 통한 입고처리시
// gm_code = '04'. "//재고이동
*1. GM_Code 01: Goods receipt for purchase order
*2. GM_Code 02: Goods receipt for production order
*3. GM_Code 03: Goods issue
*4. GM_Code 04: Transfer posting
*5. GM_Code 05: Other goods receipts
*6. GM_Code 06: Reversal of goods movements
*7. GM_Code 07: Subsequent adjustment to a subcontract order
GM_CODE
-T158G테이블에 GM_CODE에 해당하는 tcode가 등록되어 있음.
gm_item-po_number = l_pono.
gm_item-po_item = l_poitem.
gm_item-plant = 'Z001'.
gm_item-stge_loc = 'L100'
gm_item-move_type = '101'.
gm_item-item_text = 'bapi gr'.
gm_item-spec_stock = l_sobkz. ""// WBS의 경우 'Q'
gm_item-entry_qnt = l_menge.
gm_item-unload_pt = l_unloadpt.
gm_item-mvt_ind = 'B'. ""//goods movement for purchase order
APPEND gm_item.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = gm_head
goodsmvt_code = gm_code
* TESTRUN = ' ' "<--- testrun 일경우 'X'
* GOODSMVT_REF_EWM =
* IMPORTING
GOODSMVT_HEADRET = GT_HEADRET
* MATERIALDOCUMENT =
* MATDOCUMENTYEAR =
tables
goodsmvt_item = gm_item
* GOODSMVT_SERIALNUMBER = "<--- serial 관리가 있는 경우.
return = gt_ret2
* GOODSMVT_SERV_PART_DATA =
* EXTENSIONIN =
.
//처리후 리턴 코드를 체크하여 rollback, commit을 반드시 해줘야 함.
IF gt_headret IS INITIAL.
e_result = 'E'.
READ TABLE gt_ret2 WITH KEY type = 'E'.
CONCATENATE gt_ret2-type gt_ret2-number gt_ret2-message
INTO e_msg SEPARATED BY space.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
EXIT.
ELSE.
e_result = 'S'.
CONCATENATE gt_headret-doc_year gt_headret-mat_doc
INTO l_doc SEPARATED BY space.
CONCATENATE 'Material Document (' l_doc ')'
INTO e_msg SEPARATED BY space.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
//=============================
//================================
아래 예시는 transfer posting의 경우이며 여러가지 경우가 있으므로
적절한 movement type을 선택하여 처리할 것
//plant to plant
301 Transfer posting plant to plant (one-step)
301 E Transfer posting plant to plant (one-step)
301 O Transfer posting plant to plant (one-step)
301 Q Transfer posting plant to plant (one-step)
301 V Transfer posting plant to plant (one-step)
301 W Transfer posting plant to plant (one-step)
......
//to material
309 Transfer posting material to material
309 E Transfer posting sales order - material to material
309 O Transfer posting SC stock material to material
309 Q Transfer posting project material to material
309 V Transfer posting cust. return. packaging mat. to mat.
309 W Transfer posting cust. consgmt material to material
//to sales order
413 Transfer posting sales order in one step
413 E Transfer posting sales order to sales order
413 K Transfer posting consignment to sales order
413 Q Transfer posting project to own sales order
414 reversal
// to project
415 Transfer posting project in one step
415 E Transfer posting sales order to project
415 K Transfer posting consignment to project
415 Q Transfer posting project to project
416 reversal
gm_head-doc_date = sy-datum.
gm_head-pstng_date = sy-datum.
gm_code = '04'.
*4. GM_Code 04: Transfer posting
gm_item-material = l_matnr.
gm_item-plant = l_werks.
gm_item-stge_loc = l_lgort_f. " from storage location
gm_item-move_type = l_mvtype.
gm_item-entry_uom = l_meins.
gm_item-entry_uom_iso = l_meins.
gm_item-entry_qnt = l_menge.
IF l_specstock = ' '.
gm_item-spec_stock = ''.
gm_item-wbs_elem = l_posid_t. " // to_WBS
ELSEIF l_specstock = 'Q'. " project to project
gm_item-spec_stock = 'Q'.
gm_item-val_wbs_elem = l_posid_f. "// from WBS
gm_item-wbs_elem = l_posid_t. "// to WBS
ENDIF.
gm_item-move_mat = l_matnr.
gm_item-move_plant = l_movwerks.
gm_item-move_stloc = l_lgort_t. "// to storage location
APPEND gm_item.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = gm_head
goodsmvt_code = gm_code
* TESTRUN = ' ' "<--- testrun 일경우 'X'
* GOODSMVT_REF_EWM =
* IMPORTING
GOODSMVT_HEADRET = GT_HEADRET
* MATERIALDOCUMENT =
* MATDOCUMENTYEAR =
tables
goodsmvt_item = gm_item
* GOODSMVT_SERIALNUMBER = "<--- serial 관리가 있는 경우.
return = gt_ret2
* GOODSMVT_SERV_PART_DATA =
* EXTENSIONIN =
.
//처리후 리턴 코드를 체크하여 rollback, commit을 반드시 해줘야 함.
IF gt_headret IS INITIAL.
e_result = 'E'.
READ TABLE gt_ret2 WITH KEY type = 'E'.
CONCATENATE gt_ret2-type gt_ret2-number gt_ret2-message
INTO e_msg SEPARATED BY space.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
EXIT.
ELSE.
e_result = 'S'.
CONCATENATE gt_headret-doc_year gt_headret-mat_doc
INTO l_doc SEPARATED BY space.
CONCATENATE 'Material Document (' l_doc ')'
INTO e_msg SEPARATED BY space.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
//=============================
♥도움 되셨다면 ♥ 공감 부탁드려요~~
'SAP_LOG남기기' 카테고리의 다른 글
[SAP-MM] 재고실사 차이 처리(MI10 vs MI01>MI04>MI07) (1) | 2024.12.06 |
---|---|
[SAP] BAPI_NETWORK_COMP_ADD 일부필드 업데이트 안되는 경우 (0) | 2024.02.01 |
SAP - LSMW (Legacy System Migration Workbench) (0) | 2023.05.08 |
[SAP] System error in program SAPLCJDW (RC026) -> F1 (0) | 2020.05.06 |
SAPGUI Download (0) | 2020.04.16 |