POSTING_INTERFACE_DOCUMENT - ooxxvv/MySAPnotes GitHub Wiki

PageOutline

POSTING_INTERFACE_DOCUMENT

Code

{{{#!abap REPORT ztest6. *============

  •           Include
    

*============ INCLUDE ole2incl.

*============

  •           Data Define
    

*============

CONSTANTS: batchinput(1) TYPE c VALUE 'B', calltrans(1) TYPE c VALUE 'C', mode(1) TYPE c VALUE 'N', xl_max_col TYPE i VALUE 256, xl_hdr_row TYPE i VALUE 8, xl_dtl_row TYPE i VALUE 15, xl_reservd TYPE i VALUE 2.

DATA: BEGIN OF ftpost OCCURS 100. INCLUDE STRUCTURE ftpost. DATA: END OF ftpost.

DATA: BEGIN OF fttax OCCURS 0. INCLUDE STRUCTURE fttax. DATA: END OF fttax.

DATA: BEGIN OF xblntab OCCURS 2. INCLUDE STRUCTURE blntab. DATA: END OF xblntab.

DATA: BEGIN OF hdr_flds OCCURS 5, fnam LIKE ftpost-fnam, END OF hdr_flds.

DATA: BEGIN OF flds OCCURS 200, fnam LIKE ftpost-fnam, END OF flds.

DATA: BEGIN OF out_line OCCURS 40, col_hdr(11) TYPE c, END OF out_line.

DATA: xl_appl TYPE ole2_object, xl_sheet TYPE ole2_object, xl_wkbks TYPE ole2_object.

DATA: open(1) TYPE c, fldlen TYPE i, docl(7) TYPE c, function LIKE rfipi-funct, xbdcc LIKE rfipi-xbdcc.

SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-000. PARAMETERS: p_xlfil LIKE rlgrap-filename OBLIGATORY, p_xlsht LIKE rlgrap-filename OBLIGATORY. SELECTION-SCREEN END OF BLOCK 1.

SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE text-001. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: p_post LIKE febpdo-xcall_ebck RADIOBUTTON GROUP 1. SELECTION-SCREEN COMMENT 03(29) text-002 FOR FIELD p_post. PARAMETERS: p_mode LIKE rfpdo-allgazmd NO-DISPLAY. SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: p_xbdc LIKE febpdo-xbinpt RADIOBUTTON GROUP 1. SELECTION-SCREEN COMMENT 03(29) text-003 FOR FIELD p_xbdc. SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN: BEGIN OF LINE. PARAMETERS: p_test LIKE rfpdo1-febtestl RADIOBUTTON GROUP 1. SELECTION-SCREEN COMMENT 03(29) text-004 FOR FIELD p_test. SELECTION-SCREEN: END OF LINE.

PARAMETERS: group LIKE apqi-groupid OBLIGATORY.

SELECTION-SCREEN END OF BLOCK 2.

*============

  •           Main Program
    

*============

-At Selection-Screen---------------------------------------------- AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_xlfil. PERFORM ws_get_filename.

-Start-Of-Selection-------------------------------------------- START-OF-SELECTION. CLEAR open.

IF p_post='X'. function=calltrans. xbdcc='X'. ENDIF.

IF p_xbdc='X'. function=batchinput. xbdcc=' '. ENDIF.

PERFORM excel_open_workbook CHANGING xl_appl xl_wkbks xl_sheet. PERFORM excel_read_sheet USING xl_sheet. PERFORM excel_save_sheet USING xl_appl xl_wkbks.

FREE OBJECT: xl_appl, xl_sheet, xl_wkbks.

-End-Of-Selection-----------------------------------------------------

END-OF-SELECTION. IF p_test NE 'X'. PERFORM posting_interface_start. PERFORM posting_interface_document. PERFORM posting_interface_close. DESCRIBE TABLE xblntab LINES fldlen. IF ( function=calltrans ) AND ( fldlen > 0 ). ULINE. FORMAT COLOR COL_NEGATIVE. LOOP AT xblntab. docl=text-106. REPLACE '$BELNR' WITH xblntab-belnr INTO docl. REPLACE '$BUKRS' WITH xblntab-bukrs INTO docl. REPLACE '$GJAHR' WITH xblntab-gjahr INTO docl. WRITE: /1(1) sy-vline, docl,80(10) sy-vline. ENDLOOP. ULINE. ENDIF. ENDIF.

LOOP AT ftpost. AT NEW stype. FORMAT COLOR COL_HEADING. IF ftpost-stype='K'. WRITE: /1(1) sy-vline,text-104,80(1) sy-vline. ELSE. ULINE. WRITE: /. ULINE. WRITE: /1(1) sy-vline,text-105,80(1) sy-vline. ENDIF. ULINE. ENDAT.

AT NEW count. ULINE. ENDAT.

FORMAT COLOR COL_KEY. COMPUTE fldlen=strlen( ftpost-fnam ). WRITE: /1(1) sy-vline. WRITE AT (fldlen) ftpost-fnam. WRITE 20(1) sy-vline. FORMAT COLOR COL_NORMAL. COMPUTE fldlen=strlen( ftpost-fval ). WRITE AT (fldlen) ftpost-fval. WRITE 80(1) sy-vline. ENDLOOP.

ULINE.

*============

  •           Form
    

*============

&---------------------------------------------------------------------

*& Form EXCEL_OPEN_WORKBOOK &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • <--P_XL_APPL text *

  • <--P_XL_WKBKS text *

  • <--P_XL_SHEET text * ----------------------------------------------------------------------

FORM excel_open_workbook CHANGING xlapp TYPE ole2_object xlwkbks TYPE ole2_object xlsheet TYPE ole2_object.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage=0 text =text-102.

CREATE OBJECT xlapp 'EXCEL.APPLICATION'. SET PROPERTY OF xlapp 'Visible'=0. CALL METHOD OF xlapp 'Workbooks'=xlwkbks. CALL METHOD OF xlwkbks 'Open' EXPORTING #1=p_xlfil. CALL METHOD OF xlapp 'Worksheets'=xlsheet EXPORTING #1=p_xlsht. CALL METHOD OF xlsheet 'Activate'. FREE OBJECT xlwkbks. GET PROPERTY OF xlapp 'ActiveWorkbook'=xlwkbks.

ENDFORM. " EXCEL_OPEN_WORKBOOK

&---------------------------------------------------------------------

*& Form EXCEL_READ_SHEET &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • -->P_XL_SHEET text * ----------------------------------------------------------------------

FORM excel_read_sheet USING xlsheet TYPE ole2_object. DATA: end_of_data TYPE i, xl_curr_row TYPE i, col_count TYPE i, indx TYPE i, fval(50) TYPE c, count TYPE i VALUE 1.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage=0 text =text-103.

CLEAR: end_of_data, col_count.

PERFORM excel_read_row USING xlsheet xl_dtl_row

CHANGING col_count.

WHILE end_of_data IS INITIAL. indx=xl_max_col * ( xl_dtl_row + sy-index + 1 ) + 1. DO col_count TIMES. PERFORM excel_read_cell USING xlsheet indx

CHANGING fval. IF sy-index <= xl_reservd. CASE sy-index. WHEN 1. IF fval IS INITIAL. end_of_data=1. EXIT. ENDIF. IF fval=1. PERFORM excel_read_header USING xlsheet xl_hdr_row. ENDIF. WHEN 2. IF NOT ( fval IS INITIAL ). EXIT. ENDIF. ENDCASE. ELSE. IF NOT ( fval IS INITIAL ). READ TABLE flds INDEX sy-index. PERFORM xl_convert CHANGING fval. ftpost-count=count. ftpost-stype='P'. MOVE-CORRESPONDING flds TO ftpost. MOVE fval TO ftpost-fval. APPEND ftpost. ENDIF. ENDIF. indx=indx + 1. ENDDO. xl_curr_row=xl_curr_row + 1. count=count + 1. ENDWHILE.

ENDFORM. " EXCEL_READ_SHEET

&---------------------------------------------------------------------

*& Form EXCEL_SAVE_SHEET &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • -->P_XL_APPL text *

  • -->P_XL_WKBK text * ----------------------------------------------------------------------

FORM excel_save_sheet USING xlapp TYPE ole2_object xlwkbks TYPE ole2_object.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage=0 text =text-107.

CALL METHOD OF xlwkbks 'Save'. CALL METHOD OF xlapp 'Quit'.

ENDFORM. " EXCEL_SAVE_SHEET

&---------------------------------------------------------------------

*& Form WS_GET_FILENAME &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • --> p1 text

  • <-- p2 text ----------------------------------------------------------------------

FORM ws_get_filename.

CALL FUNCTION 'WS_FILENAME_GET' EXPORTING def_path ='C:' mask =text-100 mode ='O' title =text-101 IMPORTING filename =p_xlfil EXCEPTIONS inv_winsys =1 no_batch =2 selection_cancel=3 selection_error=4 OTHERS =5.

IF sy-subrc NE 0. CLEAR p_xlfil. ENDIF.

ENDFORM. " WS_GET_FILENAME

&---------------------------------------------------------------------

*& Form EXCEL_READ_HEADER &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • -->XLS text *

  • <--CURR text *

  • <--COL text * ----------------------------------------------------------------------

FORM excel_read_header USING xls TYPE ole2_object curr TYPE i. DATA: cell TYPE ole2_object, indx TYPE i, fnam LIKE ftpost-fnam, col LIKE sy-index, fval(50) TYPE c.

CLEAR col. CLEAR ftpost.

ftpost-count=1. ftpost-stype='K'. REFRESH hdr_flds. indx=xl_max_col * ( curr - 1 ) + 1.

DO. CLEAR fnam. CALL METHOD OF xls 'Cells'=cell EXPORTING #1=indx. GET PROPERTY OF cell 'Value'=fnam. CONDENSE fnam NO-GAPS. IF NOT ( fnam IS INITIAL ). MOVE fnam TO hdr_flds-fnam. APPEND hdr_flds. indx=indx + 1. col=col + 1. ELSE. EXIT. ENDIF. ENDDO.

indx=xl_max_col * ( xl_hdr_row + 2 ) + 1.

DO col TIMES. PERFORM excel_read_cell USING xls indx CHANGING fval. IF NOT ( fval IS INITIAL ). READ TABLE hdr_flds INDEX sy-index. MOVE hdr_flds-fnam TO ftpost-fnam. MOVE fval TO ftpost-fval. APPEND ftpost. ENDIF. indx=indx + 1. ENDDO.

FREE: cell.

ENDFORM. " EXCEL_READ_ROW

&---------------------------------------------------------------------

*& Form EXCEL_READ_CELL &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • -->P_XLSHEET text *

  • -->P_INDX text *

  • <--P_FVAL text * ----------------------------------------------------------------------

FORM excel_read_cell USING xls TYPE ole2_object indx TYPE i CHANGING fval.

DATA: cell TYPE ole2_object.

CALL METHOD OF xls 'Cells'=cell EXPORTING #1=indx. GET PROPERTY OF cell 'Value'=fval.

ENDFORM. " EXCEL_READ_CELL

&---------------------------------------------------------------------

*& Form EXCEL_READ_ROW &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • -->P_XLSHEET text *

  • -->P_XL_DTL_ROW text *

  • <--P_COL_COUNT text * ----------------------------------------------------------------------

FORM excel_read_row USING xls TYPE ole2_object curr TYPE i CHANGING col TYPE i.

DATA: cell TYPE ole2_object, indx TYPE i, fnam LIKE ftpost-fnam.

REFRESH flds. indx=xl_max_col * ( curr - 1 ) + 1.

DO. CLEAR fnam. CALL METHOD OF xls 'Cells'=cell EXPORTING #1=indx. GET PROPERTY OF cell 'Value'=fnam. CONDENSE fnam NO-GAPS. IF NOT ( fnam IS INITIAL ). IF sy-index > xl_reservd. MOVE fnam TO flds-fnam. ELSE. MOVE 'RESERVED' TO flds-fnam. ENDIF. APPEND flds. indx=indx + 1. col=col + 1. ELSE. EXIT. ENDIF. ENDDO.

FREE: cell.

ENDFORM. " EXCEL_READ_ROW

&---------------------------------------------------------------------

*& Form XL_CONVERT &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • <--P_FVAL text * ----------------------------------------------------------------------

FORM xl_convert CHANGING val.

IF val CS '.'. WRITE val TO val RIGHT-JUSTIFIED. SHIFT val RIGHT DELETING TRAILING '0'. SHIFT val RIGHT DELETING TRAILING '.'. CONDENSE val NO-GAPS. ENDIF.

ENDFORM. " XL_CONVERT

&---------------------------------------------------------------------

*& Form POSTING_INTERFACE_START &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • --> p1 text

  • <-- p2 text ----------------------------------------------------------------------

FORM posting_interface_start.

DATA: groupname LIKE apqi-groupid.

IF function=calltrans. groupname=group. groupname+8(4)='-ERR'. CONDENSE groupname NO-GAPS. ELSE. groupname=group. groupname+8(3)='-OK'. CONDENSE groupname NO-GAPS. ENDIF.

CALL FUNCTION 'POSTING_INTERFACE_START' EXPORTING i_function=function i_mode =mode i_group =groupname i_user =sy-uname i_xbdcc =xbdcc keep ='X'.

ENDFORM. " POSTING_INTERFACE_START

&---------------------------------------------------------------------

*& Form POSTING_INTERFACE_DOCUMENT &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • --> p1 text

  • <-- p2 text ----------------------------------------------------------------------

FORM posting_interface_document.

DATA: subrc LIKE sy-subrc, msgid LIKE sy-msgid, msgty LIKE sy-msgty, msgno LIKE sy-msgno, msgv1 LIKE sy-msgv1, msgv2 LIKE sy-msgv2, msgv3 LIKE sy-msgv3, msgv4 LIKE sy-msgv4.

CALL FUNCTION 'POSTING_INTERFACE_DOCUMENT' EXPORTING i_tcode='FB01' IMPORTING e_subrc=subrc e_msgid=msgid e_msgty=msgty e_msgno=msgno e_msgv1=msgv1 e_msgv2=msgv2 e_msgv3=msgv3 e_msgv4=msgv4 TABLES t_ftpost=ftpost t_fttax=fttax t_blntab=xblntab.

ENDFORM. " POSTING_INTERFACE_DOCUMENT

&---------------------------------------------------------------------

*& Form POSTING_INTERFACE_CLOSE &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------

  • --> p1 text

  • <-- p2 text ----------------------------------------------------------------------

FORM posting_interface_close.

CALL FUNCTION 'POSTING_INTERFACE_END'.

ENDFORM. " POSTING_INTERFACE_CLOSE }}}

{{{#!comment -------------------- 以下的部份是固定的,不要變動 ----- }}}