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

데이터는 헤더+아이템 구조로 받음.
그렇다면 그룹번호 별로 헤더내용은 중복이고 아이템 부분만 다르겟지?!
암튼 전체 데이터가 나오게된다면 생성하고 싶은 문서를 클릭 후 상단의 구매오더 생성을 클릭
그럼 PO 생성 BAPI 가 돌아감

내가 쓴 BAPI 는
'BAPI_PO_CREATE1'
입니다.

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

각각 파라미터의 x파라미터가 있는데 여기다가 X 값을 줘서 '해당 필드 내용에 적용 할게요 땅땅땅~' 하는 의미라고 생각하면 편하다.
아이템도 위와 같은 논리로 데이터 적용시켜주면 된다.
근데 !!!! 금액과 같은 경우는 통화키를 고려 안 하고 고대로 SAP 시스템에 저장되기 때문에 나중에 출력할 때 금액이 안 맞게 저장되는 경우가 있다. 그 부분만 고려해서 잘 변환해주면 됨여.


이거슬. 쓰면. 되아요.
근데 지금과 같은 경우는
1400 & KRW 인데 통화 고려 안 하고 1400 & USD 로 저장해부려서, 나중에 나올때 14로 출력이 되는 슬픈 현상이 나오는 거임. 그라서. 이걸 통화키에 맞춰 한 번 더 변환을 해주았어요.
그럼 140000 인 채로 들어가니까 출력할 땐 1400이 되는 것.
아 그리고 생성할때 금액에 대한 조건도 설정해주어야한다잉

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


구매오더 생성이 완료 되었으면 바피는 문서번호를 뱉는다.
문서 처리 방법은 아래 로직을 확인해주세염
번호를 담는 변수의 상태에 따라서 처리를 하게 하는데
일단 저 BAPI_TRANSACTION_COMMIT 을 써야 실제 시스템에 문서 생성 결과가 적용 됨.
FORM create_po USING pt_seldata LIKE gt_upload.
DATA: ls_poheader LIKE bapimepoheader,
ls_poheaderx LIKE bapimepoheaderx.
DATA: lv_po_number LIKE bapimepoheader-po_number.
DATA: lt_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.
DATA: lv_stat TYPE char1,
lv_err TYPE i.
DATA: ls_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.
CLEAR: ls_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.
REFRESH: lt_return, lt_poitem, lt_poitemx, lt_pocond, lt_pocondx.
CLEAR: ls_return, ls_poheader, ls_poheaderx, lv_po_number.
ENDAT.
ENDLOOP.
ENDFORM. " CREATE_PO
'SAP > ABAP' 카테고리의 다른 글
| [BAPI][MM] 'BAPI_INCOMINGINVOICE_CREATE' - 송장 전기 수행 (0) | 2024.11.28 |
|---|---|
| [ABAP] OLE로 엑셀 다운로드 만들어보기 (간단 ver.) (0) | 2024.11.26 |
| [ABAP] OLE 로 엑셀 다운로드 만들어보기(복잡 ver.) (4) | 2024.11.14 |
| [ABAP] OLE로 엑셀 업로드 기능 구현해보기 (0) | 2024.11.13 |
| [ABAP] 소수점 맨끝자리 0 안 보이게 만들기 (0) | 2024.11.12 |