BAPI(API는 독립된 컴포넌트에서 개발사가 제공해 주는 외부 인터페이스인데, BAPI는 비즈니스업무를 위한 API)를 이용한 PR CREATE Function TEST
FUNCTION YMM_PR_CREATE_TEST.
*"----------------------------------------------------------------------
*"*"Local interface:
*" EXPORTING
*" VALUE(EV_BANFN) TYPE BANFN
*" VALUE(EV_FLAG) TYPE CHAR1
*" VALUE(EV_MSG) TYPE BAPI_MSG
*" TABLES
*" IT_PRDATA STRUCTURE PR_DATA(PR 정보)
*" ET_RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
DATA: LV_BANFN TYPE BANFN,
LV_ITEM_NO TYPE ooooo-BNFPO,
LV_MSG(220).
DATA: LS_HEADER LIKE BAPIMEREQHEADER,
LS_HEADERX LIKE BAPIMEREQHEADERX.
DATA: LT_ITEM LIKE TABLE OF BAPIMEREQITEMIMP WITH HEADER LINE,
LT_ITEMX LIKE TABLE OF BAPIMEREQITEMX WITH HEADER LINE.
DATA: LS_RETURN TYPE BAPIRET2,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2.
CLEAR : LV_BANFN,LS_HEADER,LS_HEADERX,EV_FLAG,EV_MSG.
_CLEAR_TAB: LT_ITEM,LT_ITEMX.
" LT_ACCOUNT,LT_ACCOUNTX, LT_PRHEADERTEXT,LT_PRITEMTEXT,LT_EXTENSIONIN.
* Header
LS_HEADER-PR_TYPE = 'NB'.
LS_HEADERX-PR_TYPE = C_X. "문서유형
CLEAR LV_ITEM_NO.
* Item Make
LOOP AT IT_PRDATA.
ADD 10 TO LV_ITEM_NO.
* LT_ITEM-REF_REQ = IT_PRDATA-BANFN. "구매 요청 번호
LT_ITEM-PREQ_ITEM = LV_ITEM_NO. "구매 요청 품목 번호
LT_ITEM-MATERIAL = IT_PRDATA-MATNR. "자재코드
* LT_ITEM-SHORT_TEXT = IT_PRDATA-TXZ01. "내역
LT_ITEM-PLANT = IT_PRDATA-WERKS. "플랜트
LT_ITEM-PREQ_NAME = IT_PRDATA-AFNAM. "요청자 이름
LT_ITEM-QUANTITY = IT_PRDATA-MENGE. "구매요청수량
* LT_ITEM-UNIT = IT_PRDATA-MEINS. "기본 단위
* LT_ITEM-DELIV_DATE = IT_PRDATA-LFDAT. "납품일
* LT_ITEM-DEL_DATCAT_EXT = IT_PRDATA-LPEIN. "납품일 범주
* LT_ITEM-PREQ_PRICE = IT_PRDATA-PREIS. "구매 요청 가격
* LT_ITEM-PRICE_UNIT = IT_PRDATA-PEINH. "가격단위
* LT_ITEM-PREQ_DATE = IT_PRDATA-BADAT. "요청일
LT_ITEM-TRACKINGNO = IT_PRDATA-BEDNR. "요청 추적 번호
* LT_ITEM-PURCH_ORG = IT_PRDATA-EKORG. "구매 조직
* LT_ITEM-DES_VENDOR = IT_PRDATA-LIFNR. "공급업체 또는 채권자의 계정 번호
LT_ITEM-PUR_GROUP = IT_PRDATA-EKGRP. "구매 그룹
APPEND LT_ITEM. CLEAR LT_ITEM.
LT_ITEMX-PREQ_ITEM = LV_ITEM_NO.
LT_ITEMX-PREQ_ITEMX = C_X.
LT_ITEMX-MATERIAL = C_X.
* LT_ITEMX-SHORT_TEXT = C_X.
LT_ITEMX-PLANT = C_X.
LT_ITEMX-PREQ_NAME = C_X.
LT_ITEMX-QUANTITY = C_X.
* LT_ITEMX-UNIT = C_X.
* LT_ITEMX-DELIV_DATE = C_X.
* LT_ITEMX-DEL_DATCAT_EXT = C_X.
* LT_ITEMX-PREQ_PRICE = C_X.
* LT_ITEMX-PRICE_UNIT = C_X.
* LT_ITEMX-PREQ_DATE = C_X.
LT_ITEMX-TRACKINGNO = C_X.
* LT_ITEMX-PURCH_ORG = C_X.
* LT_ITEMX-DES_VENDOR = C_X.
LT_ITEMX-PUR_GROUP = C_X.
APPEND LT_ITEMX. CLEAR LT_ITEMX.
ENDLOOP.
* PR 생성
CALL FUNCTION 'BAPI_PR_CREATE'
EXPORTING
PRHEADER = LS_HEADER
PRHEADERX = LS_HEADERX
* TESTRUN = TESTRUN
IMPORTING
NUMBER = LV_BANFN
* PRHEADEREXP = PRHEADEREXP
TABLES
RETURN = LT_RETURN
PRITEM = LT_ITEM
PRITEMX = LT_ITEMX.
CLEAR LS_RETURN.
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = C_E.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
DELETE LT_RETURN WHERE ID = 'BAPI' AND TYPE ='E'.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = C_E.
IF LS_RETURN-TYPE = C_E.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_RETURN-ID
MSGNR = LS_RETURN-NUMBER
MSGV1 = LS_RETURN-MESSAGE_V1
MSGV2 = LS_RETURN-MESSAGE_V2
MSGV3 = LS_RETURN-MESSAGE_V3
MSGV4 = LS_RETURN-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MSG.
CONCATENATE LS_RETURN-ID LS_RETURN-NUMBER LV_MSG
INTO LV_MSG.
IF EV_MSG IS INITIAL.
EV_MSG = LV_MSG.
ELSE.
CONCATENATE EV_MSG LV_MSG INTO EV_MSG SEPARATED BY '|'.
ENDIF.
ENDIF.
CLEAR LS_RETURN.
ENDLOOP.
EV_FLAG = C_E.
* EV_MSG = LT_RETURN-MESSAGE.
ET_RETURN[] = LT_RETURN[].
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
WAIT UP TO '0.5' SECONDS.
CLEAR LS_RETURN.
READ TABLE LT_RETURN INTO LS_RETURN INDEX 1.
EV_BANFN = LV_BANFN.
EV_FLAG = C_S.
EV_MSG = LS_RETURN-MESSAGE.
ET_RETURN[] = LT_RETURN[].
** PR 릴리즈
* PERFORM BAPI_RELEASE_FUNCTION TABLES LT_RETURN
* USING LV_BANFN.
ENDIF.
ENDFUNCTION.
'ERP(SAP)' 카테고리의 다른 글
덤프 SAP ts452 2021 Sourcing and Procurement 정리 (1) (0) | 2023.12.08 |
---|---|
[MM] SAP 번호 범위 관리 (0) | 2023.06.23 |
SAP T-code 정리(MM위주) (0) | 2023.01.06 |
[ERP-MM모듈] 수입 시스템 (0) | 2023.01.05 |
SAP MM - 자재마스터 관리 (0) | 2021.09.09 |