엑셀 업로드를 하면 데이터에 맞게 띄워진다

 

데이터는 헤더+아이템 구조로 받음.

그렇다면 그룹번호 별로 헤더내용은 중복이고 아이템 부분만 다르겟지?!

암튼 전체 데이터가 나오게된다면 생성하고 싶은 문서를 클릭 후 상단의 구매오더 생성을 클릭

그럼 PO 생성 BAPI 가 돌아감

내가 쓴 BAPI 는

'BAPI_PO_CREATE1'

입니다.

생성할 구매오더(=PO) 의 헤더와 아이템을 미리 채우고,

각각 파라미터의 x파라미터가 있는데 여기다가 X 값을 줘서 '해당 필드 내용에 적용 할게요 땅땅땅~' 하는 의미라고 생각하면 편하다.

아이템도 위와 같은 논리로 데이터 적용시켜주면 된다.

근데 !!!! 금액과 같은 경우는 통화키를 고려 안 하고 고대로 SAP 시스템에 저장되기 때문에 나중에 출력할 때 금액이 안 맞게 저장되는 경우가 있다. 그 부분만 고려해서 잘 변환해주면 됨여.

통화키에 맞춰서 금액 바꿔서 출력할때
맞춰진 금액을 도로 SAP 시스템에 저장할 때

이거슬. 쓰면. 되아요.

근데 지금과 같은 경우는

1400 & KRW 인데 통화 고려 안 하고 1400 & USD 로 저장해부려서, 나중에 나올때 14로 출력이 되는 슬픈 현상이 나오는 거임. 그라서. 이걸 통화키에 맞춰 한 번 더 변환을 해주았어요.

그럼 140000 인 채로 들어가니까 출력할 땐 1400이 되는 것.

 

아 그리고 생성할때 금액에 대한 조건도 설정해주어야한다잉

이 부분도 마찬가지.. 근데 의미를 잘 모르겠음... 음... 그렇다. 벌써 기억이 잘 안난다. 일단 기록

구매오더 생성이 완료 되었으면 바피는 문서번호를 뱉는다.

문서 처리 방법은 아래 로직을 확인해주세염

번호를 담는 변수의 상태에 따라서 처리를 하게 하는데

일단 저 BAPI_TRANSACTION_COMMIT 을 써야 실제 시스템에 문서 생성 결과가 적용 됨. 

더보기

FORM create_po  USING    pt_seldata LIKE gt_upload.

  DATAls_poheader LIKE bapimepoheader,
        ls_poheaderx LIKE bapimepoheaderx.

  DATAlv_po_number LIKE bapimepoheader-po_number.

  DATAlt_return TYPE TABLE OF bapiret2,
        ls_creturn TYPE bapiret2,
        ls_return LIKE LINE OF lt_return,

        lt_poitem LIKE TABLE OF bapimepoitem,
        lt_poitemx LIKE TABLE OF bapimepoitemx,

        lt_pocond   TYPE TABLE OF bapimepocond,
        ls_pocond   LIKE LINE OF lt_pocond,
        lt_pocondx TYPE TABLE OF bapimepocondx,
        ls_pocondx LIKE LINE OF lt_pocondx.

  DATAlv_stat TYPE char1,
        lv_err TYPE i.

  DATAls_seldata LIKE LINE OF pt_seldata,
        ls_savdata LIKE ls_seldata.

  " BAPI
  LOOP AT pt_seldata INTO ls_seldata.
    " PO HEADER 문서 설정
    IF ls_poheader IS INITIAL.
      PERFORM set_poheader USING ls_seldata CHANGING ls_poheader ls_poheaderx.
      MOVE-CORRESPONDING ls_seldata TO ls_savdata.
    ENDIF.

    " ITEM 문서 설정 - item & condition
    PERFORM set_po_item USING ls_seldata CHANGING lt_poitem lt_poitemx.
    PERFORM set_po_cond USING ls_seldata CHANGING lt_pocond lt_pocondx.

    CLEARls_seldata.

    AT END OF po_num.
      IF ls_poheader IS NOT INITIAL.
        " BAPI CREATE 실행
        PERFORM init_po_bapi USING     ls_poheader
                                       ls_poheaderx
                             CHANGING  lv_po_number
                                       lt_return
                                       lt_poitem
                                       lt_poitemx
                                       lt_pocond
                                       lt_pocondx.

        " 에러사항이 있다면 해당 내용으로 메세지 호출
        READ TABLE lt_return INTO ls_return WITH KEY type 'E' id '06'.
        IF ls_return-type 'E'.
          ls_savdata-exp_col icon_red_light.
          ls_savdata-msg ls_return-message.
          MODIFY gt_upload FROM ls_savdata TRANSPORTING exp_col msg WHERE po_num ls_savdata-po_num.
        ENDIF.

        " 만일 PO 번호가 생성되었다면 COMMIT
        IF lv_po_number IS NOT INITIAL.
          " COMMIT WORK
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait   'X'
            IMPORTING
              return ls_creturn.

          IF sy-subrc 0.
            ls_savdata-exp_col icon_green_light.
            ls_savdata-ebeln lv_po_number.
            ls_savdata-msg '구매오더를 정상적으로 생성하였습니다.'.
            MODIFY gt_upload FROM ls_savdata TRANSPORTING ebeln exp_col msg WHERE po_num ls_savdata-po_num.
          ENDIF.
        ENDIF.
      ENDIF.
      REFRESHlt_return,  lt_poitem,  lt_poitemxlt_pocondlt_pocondx.
      CLEARls_returnls_poheaderls_poheaderxlv_po_number.
    ENDAT.
  ENDLOOP.

ENDFORM.                    " CREATE_PO

 

+ Recent posts