2015년 4월 10일 금요일

BAPI_PR_CREATE

FUNCTION ZMMK_BAPI_PR_CREATE.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(ACCTASSCAT) LIKE  BAPIMEREQITEMIMP-ACCTASSCAT
*"     REFERENCE(MATERIAL) LIKE  BAPIMEREQITEMIMP-MATERIAL
*"     REFERENCE(SHORT_TEXT) LIKE  BAPIMEREQITEMIMP-SHORT_TEXT
*"     REFERENCE(QUANTITY) LIKE  BAPIMEREQITEMIMP-QUANTITY
*"     REFERENCE(UNIT) LIKE  BAPIMEREQITEMIMP-UNIT
*"     REFERENCE(DELIV_DATE) LIKE  BAPIMEREQITEMIMP-DELIV_DATE
*"     REFERENCE(PLANT) LIKE  BAPIMEREQITEMIMP-PLANT
*"     REFERENCE(ORDERID) LIKE  BAPIMEREQACCOUNT-ORDERID
*"     REFERENCE(PREQ_PRICE) LIKE  BAPIMEREQITEMIMP-PREQ_PRICE
*"     REFERENCE(PREQ_ITEM) LIKE  BAPIMEREQITEMIMP-PREQ_ITEM
*"  EXPORTING
*"     VALUE(NUMBER) LIKE  BAPIMEREQHEADER-PREQ_NO
*"     REFERENCE(GV_RESULT) TYPE  CHAR1
*"     REFERENCE(GV_MESSAGE) TYPE  BAPI_MSG
*"  TABLES
*"      RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------


DATA : S_HEADER LIKE BAPIMEREQHEADER OCCURS 0 WITH HEADER LINE.
 S_HEADER-PR_TYPE = 'NB'.
* S_HEADER-CTRL_IND = 'X'.
* S_HEADER-GENERAL_RELEASE = 'X'.
* S_HEADER-CREATE_IND = 'B'.
APPEND S_HEADER. 

DATA : S_HEADERX LIKE BAPIMEREQHEADERX OCCURS 0 WITH HEADER LINE.
 S_HEADERX-PR_TYPE = 'X'.
* S_HEADER-CTRL_IND = 'X'.
* S_HEADER-GENERAL_RELEASE = 'X'.
*  S_HEADERX-CREATE_IND = 'X'.
APPEND S_HEADERX. 

DATA : S_ITEM LIKE BAPIMEREQITEMIMP OCCURS 0 WITH HEADER LINE.
 S_ITEM-PREQ_ITEM = PREQ_ITEM.
 S_ITEM-ACCTASSCAT = 'Z'.
 S_ITEM-MATERIAL = MATERIAL.
 S_ITEM-SHORT_TEXT = SHORT_TEXT.
 S_ITEM-QUANTITY = QUANTITY.
 S_ITEM-UNIT = UNIT.
 S_ITEM-DELIV_DATE = DELIV_DATE.
 S_ITEM-PLANT = PLANT.
 S_ITEM-PREQ_PRICE = PREQ_PRICE.
APPEND S_ITEM. 

DATA : S_ITEMX LIKE BAPIMEREQITEMX OCCURS 0 WITH HEADER LINE.
 S_ITEMX-PREQ_ITEM = PREQ_ITEM.
 S_ITEMX-PREQ_ITEMX = 'X'.
 S_ITEMX-ACCTASSCAT = 'X'.
 S_ITEMX-MATERIAL = 'X'.
 S_ITEMX-SHORT_TEXT = 'X'.
 S_ITEMX-QUANTITY = 'X'.
 S_ITEMX-UNIT = 'X'.
 S_ITEMX-DELIV_DATE = 'X'.
 S_ITEMX-PLANT = 'X'.
 S_ITEMX-PREQ_PRICE = 'X'.
APPEND S_ITEMX. 

DATA : S_ITEMEXP LIKE BAPIMEREQITEM OCCURS 0 WITH HEADER LINE.
S_ITEMEXP-PREQ_ITEM = PREQ_ITEM.
*S_ITEMEXP-DOC_TYPE = 'NB'.
APPEND S_ITEMEXP. 

DATA : S_ACCOUNT LIKE BAPIMEREQACCOUNT OCCURS 0 WITH HEADER LINE.
 S_ACCOUNT-PREQ_ITEM = PREQ_ITEM.
 S_ACCOUNT-SERIAL_NO = '01'.
 S_ACCOUNT-ORDERID = ORDERID.
 S_ACCOUNT-QUANTITY = QUANTITY.
APPEND S_ACCOUNT. 

DATA : S_ACCOUNTX LIKE BAPIMEREQACCOUNTX OCCURS 0 WITH HEADER LINE.
 S_ACCOUNTX-PREQ_ITEM = PREQ_ITEM.
 S_ACCOUNTX-SERIAL_NO = '01'.
 S_ACCOUNTX-PREQ_ITEMX = 'X'.
 S_ACCOUNTX-ORDERID = 'X'.
 S_ACCOUNTX-QUANTITY = 'X'.
APPEND S_ACCOUNTX. 

CALL FUNCTION 'BAPI_PR_CREATE'
  EXPORTING
    PRHEADER = S_HEADER
    PRHEADERX = S_HEADERX
*  VERSIONS =
*  TESTRUN =
  IMPORTING
    NUMBER = NUMBER
*  PRHEADEREXP =
  TABLES
    RETURN = RETURN
    PRITEM = S_ITEM
    PRITEMX = S_ITEMX
    PRITEMEXP = S_ITEMEXP
    PRACCOUNT = S_ACCOUNT
    PRACCOUNTX = S_ACCOUNTX . 

  IF RETURN[] IS INITIAL.
    CALL FUNCTION 'BALW_BAPIRETURN_GET2'
      EXPORTING
        TYPE   = SY-MSGTY
        CL     = SY-MSGID
        NUMBER = SY-MSGNO
        PAR1   = SY-MSGV1
        PAR2   = SY-MSGV2
        PAR3   = SY-MSGV3
        PAR4   = SY-MSGV4
      IMPORTING
        RETURN = RETURN
      EXCEPTIONS
        OTHERS = 1.
  ENDIF. 

  READ TABLE RETURN WITH KEY TYPE = 'S'.
  IF sy-subrc <> 0.
    READ TABLE return WITH KEY type = 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ENDIF.  

  GV_RESULT = RETURN-TYPE.
  GV_MESSAGE = RETURN-MESSAGE. 

ENDFUNCTION.