ERP - 구매모듈

[ABAP] BAPI_PR_CRATE test

가시가되어 2021. 9. 24. 16:23

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.