Program :
Report Z_XML_SAMPLE.
*----------------------------------------------------------------------*
* data definition
*----------------------------------------------------------------------*
* Batchinputdata of single transaction
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: BEGIN OF IT_MESSTAB OCCURS 0 .
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: L_MSTRING(480) TYPE C.
DATA: END OF IT_MESSTAB.
DATA: E_GROUP_OPENED.
* message texts
TABLES: T100.
DATA : BEGIN OF t_output1 OCCURS 0,
col1(5) TYPE c,
col2(20) TYPE c,
col3(200) TYPE c,
col4(60) TYPE c,
col5(20) TYPE c,
col6(20) TYPE c,
col7(20) TYPE c,
col8(30) TYPE c,
col9(150) TYPE c,
col10(255) TYPE c,
col11(20) TYPE c,
col12(20) TYPE c,
col13(25) TYPE c,
col14(40) TYPE c,
col15(225) TYPE c,
col16(20) TYPE c,
col17(25) TYPE c,
col18(20) TYPE c,
col19(100) TYPE c,
col20(30) TYPE c, "ba+ jtjen02, 08.01.2022
col21(3),
no_urut(3) type n,
END OF t_output1.
Data : t_output2 like TABLE OF t_output1 WITH HEADER LINE.
DATA: it_folder LIKE STANDARD TABLE OF sdokpath,
it_file LIKE STANDARD TABLE OF sdokpath,
it_fol_fil LIKE STANDARD TABLE OF sdokpath,
wa_fol_fil LIKE sdokpath,
file_count TYPE i,
dir_count TYPE i.
DATA : CNTR_NO(4) TYPE N,
LINE_NO(4) TYPE N.
DATA : vf_start_col TYPE i, "start column
vf_start_row TYPE i, "start row
vf_end_col TYPE i, "maximum column
vf_end_row TYPE i, "maximum row
p_text(20).
DATA: itabb TYPE STANDARD TABLE OF kcde_cells WITH HEADER LINE,
vf_index TYPE i,
itabb2 TYPE STANDARD TABLE OF kcde_cells WITH HEADER LINE.
DATA: tab type table of itab,
wa_tab like itab.
* Check In Uplad File Have Same Component dan Date
DATA : DG_MATNR TYPE MATNR,
DG_DATUV TYPE DATUV,
DG_IDNRK TYPE IDNRK.
FIELD-SYMBOLS: <fs>.
DATA: DG_DATUVF TYPE SY-DATUM,
DG_DATUVL TYPE SY-DATUM.
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-003.
PARAMETERS : RB_UP RADIOBUTTON GROUP RB_1 DEFAULT 'X' USER-COMMAND ucom.
PARAMETERS : P_FNAME TYPE IBIPPARMS-PATH .
PARAMETERS : P_FNAME2 TYPE IBIPPARMS-PATH .
*SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_TMP RADIOBUTTON GROUP RB_1.
PARAMETER : pdirp TYPE pfeflnamel DEFAULT 'D:\',
p_psavep TYPE string DEFAULT 'Material Template.XLS'.
SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_DWN RADIOBUTTON GROUP RB_1.
SELECTION-SCREEN END OF BLOCK SEL1.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
DATA: PATH LIKE RLGRAP-FILENAME.
PATH = 'D:\'.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = SPACE
DEF_PATH = PATH
* MASK = ',.xls , .xlsx.'
* MASK = ', .txt , .txt.'
MODE = 'O'
TITLE = 'PC-File-Selection'
IMPORTING
FILENAME = p_fname
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pdirp.
DATA: fname TYPE string.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Select Directory'
CHANGING
selected_folder = fname
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
pdirp = fname.
INITIALIZATION.
START-OF-SELECTION.
* SPLIT data Form Excel
vf_start_col = '1'.
vf_start_row = '2'.
vf_end_col = '60'.
vf_end_row = '10000'.
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT' " Function to download data
" from excel
EXPORTING
filename = p_fname
i_begin_col = vf_start_col
i_begin_row = vf_start_row
i_end_col = vf_end_col
i_end_row = vf_end_row
TABLES
intern = itabb "B09
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE i454(0) WITH 'File not found'.
ENDIF.
CLEAR: itabb .
SORT itabb BY row col.
LOOP AT itabb.
MOVE : itabb-col TO vf_index.
ASSIGN COMPONENT vf_index OF STRUCTURE t_output1 TO <fs>.
MOVE : itabb-value TO <fs>.
AT END OF row.
APPEND t_output1.
ENDAT.
ENDLOOP.
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT' " Function to download data
" from excel
EXPORTING
filename = p_fname2
i_begin_col = vf_start_col
i_begin_row = vf_start_row
i_end_col = vf_end_col
i_end_row = vf_end_row
TABLES
intern = itabb2 "B09
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE i454(0) WITH 'File not found'.
ENDIF.
CLEAR: itabb2 .
SORT itabb2 BY row col.
LOOP AT itabb2.
MOVE : itabb2-col TO vf_index.
ASSIGN COMPONENT vf_index OF STRUCTURE t_output2 TO <fs>.
MOVE : itabb2-value TO <fs>.
AT END OF row.
APPEND t_output2.
ENDAT.
ENDLOOP.
data : gt_faktur_out type ztax_faktur_tt,
gs_faktur_out like line of gt_faktur_out,
lv_file TYPE string,
gv_xml_result type string.
Loop at t_output1.
gs_faktur_out-tax_header = t_output1.
Loop at t_output2 where col1 = t_output1-col1.
append t_output2 to gs_faktur_out-tax_item.
Endloop.
append gs_faktur_out to gt_faktur_out.
clear gs_faktur_out.
Endloop.
* Call the transformation
CALL TRANSFORMATION ZFAKTUR_TAX
SOURCE
FAKTUR = gt_faktur_out[]
RESULT XML
gv_xml_result.
DATA: lo_xml_doc TYPE ref TO CL_XML_DOCUMENT.
*File path
lv_file = 'D:\Dataku\Core Tax\Facktur.xml'.
CREATE OBJECT lo_xml_doc.
lo_xml_doc->parse_string( gv_xml_result ).
* Render To XML Table
data it_xml TYPE DCXMLLINES.
CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
document = lo_xml_doc->m_document
PRETTY_PRINT = 'X'
* IMPORTING
* XML_AS_STRING =
* SIZE =
TABLES
XML_AS_TABLE = it_xml
* EXCEPTIONS
* NO_DOCUMENT = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_file
filetype = 'BIN'
TABLES
data_tab = it_xml
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.