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.
DATA: gt_spfli TYPE TABLE OF spfli, gs_spfli TYPE spfli.
DATA: gt_fields TYPE TABLE OF dd03m, gs_fields TYPE dd03m.
DATA: gv_txt TYPE string.
SELECT-OPTIONS: so_carr FOR gs_spfli-carrid.
INITIALIZATION. PERFORM get_fieldinfo.
START-OF-SELECTION. SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_spfli FROM spfli WHERE carrid IN so_carr.
IF gt_spfli IS NOT INITIAL. gv_txt = |총 { lines( gt_spfli ) }건의 데이터를 내보냈습니다.|. PERFORM export_excel_simple. " 간단! WRITE : gv_txt. ENDIF. *&---------------------------------------------------------------------* *& Form ERROR_HANDLE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_SY_SUBRC text *----------------------------------------------------------------------* FORM error_handle USING pv_subrc TYPE sy-subrc. IF pv_subrc <> 0. MESSAGE 'OLE 자동화 에러' TYPE 'W'. STOP. ENDIF. ENDFORM. " ERROR_HANDLE *&---------------------------------------------------------------------* *& Form GET_FIELDINFO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM get_fieldinfo . SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_fields FROM dd03m WHERE tabname = 'SPFLI' AND ddlanguage = 3. ENDFORM. " GET_FIELDINFO *&---------------------------------------------------------------------* *& Form EXPORT_EXCEL_SIMPLE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM export_excel_simple . ***********************클립보드용 데이터 만들기 *********************** DATA: ls_clip TYPE c LENGTH 1000, lt_clip LIKE TABLE OF ls_clip.
DATA: deli TYPE c. deli = cl_abap_char_utilities=>horizontal_tab.
FIELD-SYMBOLS: <fs_field> .
* header LOOP AT gt_fields INTO gs_fields. IF gs_fields-fieldname = 'MANDT'. CONTINUE. ENDIF.
IF ls_clip IS INITIAL. ls_clip = gs_fields-scrtext_l. ELSE. ls_clip = ls_clip && deli && gs_fields-scrtext_l. ENDIF. ENDLOOP. APPEND ls_clip TO lt_clip.
CLEAR ls_clip. * Body LOOP AT gt_spfli INTO gs_spfli. LOOP AT gt_fields INTO gs_fields. IF gs_fields-fieldname = 'MANDT'. CONTINUE. ENDIF.
ASSIGN COMPONENT gs_fields-position OF STRUCTURE gs_spfli TO <fs_field>. IF ls_clip IS INITIAL. ls_clip = <fs_field>. ELSE. ls_clip = ls_clip && deli && <fs_field>. ENDIF. ENDLOOP.
APPEND ls_clip TO lt_clip. CLEAR ls_clip. ENDLOOP.
DATA: lo_excel TYPE ole2_object, lo_cell TYPE ole2_object, " 셀 객체 변수 lo_books TYPE ole2_object, lo_book TYPE ole2_object.
* 엑셀 실행 CREATE OBJECT lo_excel 'EXCEL.APPLICATION'. PERFORM error_handle USING sy-subrc.
CALL METHOD OF lo_excel 'WORKBOOKS' = lo_books. PERFORM error_handle USING sy-subrc.
* add a new workbook CALL METHOD OF lo_books 'ADD' = lo_books. PERFORM error_handle USING sy-subrc.
* 화면 DISPLAY 설정 (1을 설정하면 DISPLAY) SET PROPERTY OF lo_excel 'VISIBLE' = 1. PERFORM error_handle USING sy-subrc.
GET PROPERTY OF lo_excel 'ACTIVESHEET' = lo_books.
* 엑셀 셀 선택 CALL METHOD OF lo_books 'CELLS' = lo_cell EXPORTING #1 = 1 " 행 #2 = 1. " 열
DATA: gt_spfli TYPE TABLE OF spfli, gs_spfli TYPE spfli.
DATA: gt_fields TYPE TABLE OF dd03m, gs_fields TYPE dd03m.
DATA: gv_txt TYPE string.
SELECT-OPTIONS: so_carr FOR gs_spfli-carrid.
INITIALIZATION. PERFORM get_fieldinfo.
START-OF-SELECTION. SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_spfli FROM spfli WHERE carrid IN so_carr.
IF gt_spfli IS NOT INITIAL. gv_txt = |총 { lines( gt_spfli ) }건의 데이터를 내보냈습니다.|. PERFORM export_excel. WRITE : gv_txt. ENDIF. *&---------------------------------------------------------------------* *& Form EXPORT_EXCEL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM export_excel . DATA: lv_col TYPE i, " 선택 열 정보 lv_row TYPE i. " 선택 행 정보
DATA: lo_excel TYPE ole2_object, lo_cell TYPE ole2_object, " 셀 객체 변수 lo_books TYPE ole2_object, lo_book TYPE ole2_object.
FIELD-SYMBOLS: <fs_field>. " 동적할당을 위한 필드심볼
* 엑셀 실행 CREATE OBJECT lo_excel 'EXCEL.APPLICATION'. PERFORM error_handle USING sy-subrc.
* 화면 DISPLAY 설정 (1을 설정하면 DISPLAY) SET PROPERTY OF lo_excel 'VISIBLE' = 1. PERFORM error_handle USING sy-subrc.
CALL METHOD OF lo_excel 'WORKBOOKS' = lo_books. PERFORM error_handle USING sy-subrc.
* add a new workbook CALL METHOD OF lo_books 'ADD' = lo_book. PERFORM error_handle USING sy-subrc.
******************엑셀 값 넣어주기************************* " HEADER LOOP AT gt_fields INTO gs_fields. IF gs_fields-fieldname = 'MANDT'. CONTINUE. " MANDT 생략 ENDIF. lv_col = gs_fields-position. SUBTRACT 1 FROM lv_col.
* 엑셀 셀 선택 CALL METHOD OF lo_excel 'CELLS' = lo_cell EXPORTING #1 = 1 " 행 #2 = lv_col. " 열
SET PROPERTY OF lo_cell 'VALUE' = gs_fields-scrtext_l. ENDLOOP.
LOOP AT gt_spfli INTO gs_spfli. lv_row = sy-tabix + 1. LOOP AT gt_fields INTO gs_fields. IF gs_fields-fieldname = 'MANDT'. CONTINUE. " MANDT 생략 ENDIF.
lv_col = gs_fields-position. SUBTRACT 1 FROM lv_col.
* 엑셀 셀 선택 CALL METHOD OF lo_excel 'CELLS' = lo_cell EXPORTING #1 = lv_row " 행 #2 = lv_col. " 열
* 해당 셀에 값 넣기 ASSIGN COMPONENT gs_fields-position OF STRUCTURE gs_spfli TO <fs_field>. SET PROPERTY OF lo_cell 'VALUE' = <fs_field>. ENDLOOP. ENDLOOP.
FREE OBJECT lo_excel. FREE OBJECT lo_book. FREE OBJECT lo_books. FREE OBJECT lo_cell. ENDFORM. " EXPORT_EXCEL *&---------------------------------------------------------------------* *& Form ERROR_HANDLE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_SY_SUBRC text *----------------------------------------------------------------------* FORM error_handle USING pv_subrc TYPE sy-subrc. IF pv_subrc <> 0. MESSAGE 'OLE 자동화 에러' TYPE 'W'. STOP. ENDIF. ENDFORM. " ERROR_HANDLE *&---------------------------------------------------------------------* *& Form GET_FIELDINFO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM get_fieldinfo . SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_fields FROM dd03m WHERE tabname = 'SPFLI' AND ddlanguage = 3. ENDFORM. " GET_FIELDINFO