본문 바로가기

SAP_LOG남기기

[SAP-ABAP]BAPI_GOODSMVT_CREATE 처리

728x90

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.

//=============================

♥도움 되셨다면 ♥ 공감 부탁드려요~~

728x90