BAPI_PO_CREATE1 - 구매 오더 생성 (예제 코드 포함)

2023. 4. 12. 17:14ABAP/BAPI

728x90
반응형

안녕하세요 파피킴입니다.

오늘은 구매오더(Purchase Order 이하 PO) 를 생성하는 BAPI 를 알아보도록 하겠습니다~

WM 에서는 주로 재고 운송 오더 (Stock Transfer Order 이하 STO) 를 사용하기 때문에 STO 를 생성하는 코드로 예제를 구성해 보았습니다~!

DATA : ls_poheader      TYPE bapimepoheader,
            ls_poheaderx    TYPE bapimepoheaderx,
            lt_poitem           TYPE TABLE OF bapimepoitem WITH HEADER LINE,
            lt_poitemx         TYPE TABLE OF bapimepoitemx WITH HEADER LINE,
            lt_poschedule   TYPE TABLE OF bapimeposchedule WITH HEADER LINE,
            lt_poschedulex TYPE TABLE OF bapimeposchedulx WITH HEADER LINE,
            lv_po_number  TYPE bapimepoheader-po_number,
            lt_return            TYPE TABLE OF bapiret2 WITH HEADER LINE.

***<<< 헤더 세팅
ls_poheader-comp_code = '회사 코드'. " 회사 코드
ls_poheader-doc_type = 'UB'. " 오더 유형
ls_poheader-purch_org = '구매 조직'. " 구매 조직
ls_poheader-pur_group = '구매 그룹'. " 구매 그룹
ls_poheader-doc_date = sy-datum. " 구매 증빙일
ls_poheader-suppl_plnt = '플랜트'. " 공급 플랜트
ls_poheader-our_ref = '저장 위치'. " 출고 저장 위치

ls_poheaderx-comp_code = 'X'.
ls_poheaderx-doc_type = 'X'.
ls_poheaderx-purch_org = 'X'.
ls_poheaderx-pur_group = 'X'.
ls_poheaderx-doc_date = 'X'.
ls_poheaderx-suppl_plnt = 'X'.
ls_poheaderx-our_ref = 'X'.
***>>> 헤더 세팅

***<<< 아이템 세팅
lt_poitem-po_item = '10'. " 품목 번호
lt_poitem-material = '자재 번호'. " 자재 번호
lt_poitem-plant = '플랜트'. " 플랜트
*lt_poitem-batch = ''. " 배치 번호
lt_poitem-stge_loc = '저장 위치'. " 저장 위치
lt_poitem-quantity = '22'. " 수량
lt_poitem-po_unit = 'KG'. " 단위
lt_poitem-suppl_stloc = '저장 위치'. " 출고 저장 위치
APPEND lt_poitem.

lt_poitemx-po_item = '10'. " 품목 번호

lt_poitemx-material = 'X'. " 자재 번호
lt_poitemx-plant = 'X'. " 플랜트
*lt_poitemx-batch = 'X'. " 배치 번호
lt_poitemx-stge_loc = 'X'. " 저장 위치
lt_poitemx-quantity = 'X'. " 수량
lt_poitemx-po_unit = 'X'. " 단위
lt_poitemx-suppl_stloc = 'X'. " 출고 저장 위치
APPEND lt_poitemx.
***>>> 아이템 세팅

***<<< 납품 세팅
lt_poschedule-po_item = '10'.
lt_poschedule-sched_line = '0001'.
lt_poschedule-delivery_date = sy-datum. " 계획 출고일
APPEND lt_poschedule.

lt_poschedulex-po_item = '10'.
lt_poschedulex-sched_line = '0001'.
lt_poschedulex-delivery_date = sy-datum.
APPEND lt_poschedulex.
***>>> 납품 세팅

CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
        poheader                = ls_poheader
        poheaderx              = ls_poheaderx
    IMPORTING
        exppurchaseorder = lv_po_number
    TABLES
        return                      = lt_return
        poitem                     = lt_poitem
        poitemx                   = lt_poitemx
        poschedule             = lt_poschedule
        poschedulex           = lt_poschedulex.

IF lv_po_number IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
            wait = 'X'.
    MESSAGE s000 WITH 'SUCCESS' lv_po_number.
ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    READ TABLE lt_return WITH KEY type = 'E'.
    MESSAGE ID lt_return-id TYPE 'S' NUMBER lt_return-number
                       WITH lt_return-message_v1 lt_return-message_v2
                                  lt_return-message_v3 lt_return-message_v4
                       DISPLAY LIKE lt_return-type.
ENDIF.

 

코드가 길어 보여서 조금 놀라셨을 수도 있을 것 같아요~

막상 내용 보면 별거 없으니 걱정하지 않으셔도 됩니다~!

구매 조직 등 어떤 값을 넣어야 할지 잘 모르시겠다면 ME23N 에서 오더를 조회하셔서 똑같이 입력해보시는 것을 추천드립니다~

질문 있으시면 댓글 부탁드립니다!

이상 샙가능의 파피킴이었습니다.

728x90
반응형