*&---------------------------------------------------------------------*
*& Report ZTEST_RFC
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_rfc LINE-SIZE 255..
*&---------------------------------------------------------------------*
*& Report YLB011
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
INCLUDE yfunc_excel.
TYPE-POOLS : rmdi.
**********************************************************************
*Define Types
**********************************************************************
TYPES: BEGIN OF ts_func,
parameter TYPE fupararef-parameter, "参数名称
paramtype TYPE fupararef-paramtype, "参数类型
structure TYPE fupararef-structure, "接口参数的参考类型
defaultval TYPE fupararef-defaultval, "输入参数的缺省值
optional TYPE fupararef-optional, "可选参数
pposition TYPE fupararef-pposition, "表格行
stext TYPE funct-stext, "短文本
END OF ts_func,
tt_func TYPE TABLE OF ts_func.
**********************************************************************
*Global Data
**********************************************************************
DATA: gt_func TYPE tt_func,
gt_imp TYPE tt_func,
gt_exp TYPE tt_func,
gt_cha TYPE tt_func,
gt_tab TYPE tt_func,
gt_struc TYPE tt_func.
DATA: gt_dd07v TYPE TABLE OF dd07v.
DATA: go_excel TYPE REF TO lcl_excel.
**********************************************************************
* SELECTION-SCREEN
**********************************************************************
PARAMETERS: p_fname LIKE fupararef-funcname.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETER p_xls AS CHECKBOX.
PARAMETER p_dir TYPE string.
SELECTION-SCREEN SKIP 1.
PARAMETER p_yh AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION.
p_xls = 'X'.
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
CHANGING
desktop_directory = p_dir
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
CALL METHOD cl_gui_cfw=>update_view.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
CALL METHOD cl_gui_frontend_services=>directory_browse
* EXPORTING
* window_title =
* initial_folder =
CHANGING
selected_folder = p_dir
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
START-OF-SELECTION.
PERFORM get_ddic_datatype.
PERFORM get_func_para USING p_fname gt_func.
PERFORM classify_func USING gt_func
gt_imp
gt_exp
gt_cha
gt_tab.
PERFORM write_list.
IF p_xls = 'X'.
PERFORM download_template.
LEAVE LIST-PROCESSING.
ENDIF.
*&---------------------------------------------------------------------*
*& Form write_list
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write_list.
PERFORM write_head.
PERFORM write_para USING '输入' gt_imp gt_struc.
PERFORM write_para USING '输出' gt_exp gt_struc.
PERFORM write_para USING '修改' gt_cha gt_struc.
PERFORM write_para USING '表' gt_tab gt_struc.
PERFORM write_sturc USING gt_struc.
ENDFORM. "write_list
*&---------------------------------------------------------------------*
*& Form download_template
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM download_template.
DATA: ld_row TYPE i.
DATA: ld_xls_file TYPE string.
CONCATENATE p_dir '\' p_fname '_' sy-datum '.xls' INTO ld_xls_file.
CREATE OBJECT go_excel
EXPORTING
id_xlsfile = ld_xls_file.
PERFORM write_head_xls.
ld_row = 2.
PERFORM write_para_xls USING '输入' ld_row gt_imp.
PERFORM write_para_xls USING '输出' ld_row gt_exp.
PERFORM write_para_xls USING '修改' ld_row gt_cha.
PERFORM write_para_xls USING '表 ' ld_row gt_tab.
PERFORM write_sturc_xls USING ld_row gt_struc.
DO 8 TIMES.
go_excel->set_col_width( id_col_no = sy-index ).
ENDDO.
IF p_yh = 'X'.
go_excel->select_range( id_range = 'A:H' ).
go_excel->set_range_format( id_font_name = '微软雅黑' ).
ENDIF.
go_excel->frozen_window( id_row_no = 3 ).
go_excel->save( ).
ENDFORM. "download_template
*&---------------------------------------------------------------------*
*& Form write_head_xls
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write_head_xls.
go_excel->rename_sheet( id_pos = 1 id_sheetname = p_fname ).
go_excel->set_cell_data( id_col = 1 id_row = 1 id_value = '函数名' ).
go_excel->set_cell_format( id_col = 1 id_row = 1 id_bold = 1 id_bg_color = 37 ).
go_excel->set_cell_data( id_col = 2 id_row = 1 id_value = p_fname ).
DATA: ld_stext TYPE tftit-stext.
SELECT SINGLE stext INTO ld_stext FROM tftit WHERE funcname = p_fname.
IF sy-subrc = 0.
go_excel->set_cell_data( id_col = 5 id_row = 1 id_value = ld_stext ).
ENDIF.
DATA: ld_date TYPE char20,
ld_time TYPE char20.
WRITE sy-datum TO ld_date.
WRITE sy-uzeit TO ld_time.
CONCATENATE ld_date ld_time INTO ld_date SEPARATED BY space.
go_excel->set_cell_data( id_col = 8 id_row = 1 id_value = ld_date ).
go_excel->set_cell_data( id_col = 1 id_row = 2 id_value = '参数名' ).
go_excel->set_cell_data( id_col = 2 id_row = 2 id_value = '类型' ).
go_excel->set_cell_data( id_col = 3 id_row = 2 id_value = '长度' ).
go_excel->set_cell_data( id_col = 4 id_row = 2 id_value = '小数' ).
go_excel->set_cell_data( id_col = 5 id_row = 2 id_value = '描述文本' ).
go_excel->set_cell_data( id_col = 6 id_row = 2 id_value = '可选' ).
go_excel->set_cell_data( id_col = 7 id_row = 2 id_value = '默认值' ).
go_excel->set_cell_data( id_col = 8 id_row = 2 id_value = '备注' ).
go_excel->select_range( id_range = 'A2:H2' ).
go_excel->set_range_format( id_bg_color = 37 ).
ENDFORM. "write_head_xls
*&---------------------------------------------------------------------*
*& Form write_para_xls
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_PTYPE text
* -->CD_ROW text
* -->IT_PARA text
*----------------------------------------------------------------------*
FORM write_para_xls USING id_ptype
cd_row
it_para TYPE tt_func.
CHECK it_para IS NOT INITIAL.
cd_row = cd_row + 2.
go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = id_ptype ).
go_excel->set_cell_format( id_col = 1 id_row = cd_row id_bold = 1 id_bg_color = 37 ).
DATA: ls_para TYPE ts_func.
LOOP AT it_para INTO ls_para.
cd_row = cd_row + 1.
go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = ls_para-parameter ).
PERFORM write_ddic_info_xls USING cd_row ls_para-structure.
go_excel->set_cell_data( id_col = 5 id_row = cd_row id_value = ls_para-stext ).
go_excel->set_cell_data( id_col = 6 id_row = cd_row id_value = ls_para-optional ).
go_excel->set_cell_data( id_col = 7 id_row = cd_row id_value = ls_para-defaultval ).
ENDLOOP.
ENDFORM. "write_para_xls
*&---------------------------------------------------------------------*
*& Form get_ddic_datatype
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_ddic_datatype.
CALL FUNCTION 'DDUT_DOMVALUES_GET'
EXPORTING
name = 'DATATYPE'
* LANGU = SY-LANGU
* TEXTS_ONLY = ' '
TABLES
dd07v_tab = gt_dd07v
EXCEPTIONS
illegal_input = 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.
SORT gt_dd07v BY domvalue_l.
ENDFORM. "get_ddic_datatype
*&---------------------------------------------------------------------*
*& Form get_func_para
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_FUNCNAME text
* -->ET_FUNC text
*----------------------------------------------------------------------*
FORM get_func_para USING id_funcname
et_func TYPE tt_func.
SELECT
fupararef~parameter "参数名称
fupararef~paramtype "参数类型
fupararef~structure "接口参数的参考类型
fupararef~defaultval "输入参数的缺省值
fupararef~optional "可选参数
fupararef~pposition
funct~stext "短文本
FROM fupararef INNER JOIN funct
ON funct~funcname = fupararef~funcname AND
funct~parameter = fupararef~parameter AND
funct~spras = sy-langu
INTO TABLE et_func
WHERE fupararef~funcname = id_funcname AND
r3state = 'A'.
IF sy-subrc <> 0.
MESSAGE '无法识别的函数名' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. "get_func_para
*&---------------------------------------------------------------------*
*& Form classify_func
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IT_FUNC text
* -->ET_IMP text
* -->ET_EXP text
* -->ET_CHA text
* -->ET_TAB text
*----------------------------------------------------------------------*
FORM classify_func USING it_func TYPE tt_func
et_imp TYPE tt_func
et_exp TYPE tt_func
et_cha TYPE tt_func
et_tab TYPE tt_func.
DATA: ls_func TYPE ts_func.
LOOP AT it_func INTO ls_func.
CASE ls_func-paramtype .
WHEN 'I'.
APPEND ls_func TO et_imp.
WHEN 'E'.
APPEND ls_func TO et_exp.
WHEN 'C'.
APPEND ls_func TO et_cha.
WHEN 'T'.
APPEND ls_func TO et_tab.
ENDCASE.
ENDLOOP.
SORT et_imp BY pposition.
SORT et_exp BY pposition.
SORT et_cha BY pposition.
SORT et_tab BY pposition.
ENDFORM. "classify_func
*&---------------------------------------------------------------------*
*& Form write_head
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_PTYPE text
* -->IT_PARA text
* -->CT_STRUC text
*----------------------------------------------------------------------*
FORM write_head .
WRITE: /(30) '函数名',
(40) p_fname ,
(10) '' ,
(10) '',
(40) '',
(5) '',
(20) '',
(20) ''.
SKIP 1.
WRITE: /(30) '参数名',
(20) '类型' ,
(10) '长度' ,
(10) '小数' ,
(40) '描述文本',
(5) '可选',
(20) '默认值',
(20) '备注'.
WRITE sy-uline.
ENDFORM. "write_head
*&---------------------------------------------------------------------*
*& Form write_para
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_PTYPE text
* -->IT_PARA text
* -->CT_STRUC text
*----------------------------------------------------------------------*
FORM write_para USING id_ptype
it_para TYPE tt_func
ct_struc TYPE tt_func.
CHECK it_para IS NOT INITIAL.
FORMAT INTENSIFIED COLOR = 5.
WRITE :/(30) id_ptype.
FORMAT INTENSIFIED COLOR = 0.
DATA: ls_para TYPE ts_func,
ld_x_struc(1).
LOOP AT it_para INTO ls_para.
WRITE: /(30) ls_para-parameter .
CLEAR ld_x_struc.
PERFORM write_ddic_info USING ls_para-structure
ld_x_struc.
IF ld_x_struc = 'X'.
APPEND ls_para TO ct_struc.
ENDIF.
WRITE : (40) ls_para-stext ,
(5) ls_para-optional ,
(20) ls_para-defaultval .
ENDLOOP.
SKIP 2 .
ENDFORM. "write_para
*&---------------------------------------------------------------------*
*& Form write_ddic_info
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_DATA text
* -->ED_X_STRUC text
*----------------------------------------------------------------------*
FORM write_ddic_info USING id_data
ed_x_struc.
DATA: ld_match(1).
CHECK id_data IS NOT INITIAL.
IF id_data CS '-'.
"参考字段
PERFORM get_ddic_ref_field USING id_data.
ELSE.
"按照数据元素处理
PERFORM get_ddic_data_element USING id_data ld_match.
"不是field 默认按照structure 处理
CHECK ld_match = ''.
ed_x_struc = 'X'.
WRITE: (20) id_data,
(10) '',
(10) ''.
ENDIF.
ENDFORM. "write_ddic_info
*&---------------------------------------------------------------------*
*& Form write_ddic_info_xls
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_ROW text
* -->ID_DATA text
*----------------------------------------------------------------------*
FORM write_ddic_info_xls USING id_row TYPE i
id_data.
DATA: ld_match(1).
CHECK id_data IS NOT INITIAL.
IF id_data CS '-'.
"参考字段
PERFORM get_ddic_ref_field_xls USING id_row
id_data.
ELSE.
"按照数据元素处理
PERFORM get_ddic_data_element_xls USING id_row id_data ld_match.
"不是field 默认按照structure 处理
CHECK ld_match = ''.
go_excel->set_cell_data( id_col = 2 id_row = id_row id_value = id_data ).
ENDIF.
ENDFORM. "write_ddic_info_xls
*&---------------------------------------------------------------------*
*& Form get_ddic_ref_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_DATA text
*----------------------------------------------------------------------*
FORM get_ddic_ref_field USING id_data.
DATA: ld_tabname TYPE rmdi_name,
ld_fieldname TYPE rmdi_fienm,
ls_field TYPE rmdi_tabfld.
SPLIT id_data AT '-' INTO ld_tabname ld_fieldname.
CALL FUNCTION 'RM_TABLE_INFO_GET'
EXPORTING
i_tabname = ld_tabname
i_fieldname = ld_fieldname
i_langu = sy-langu
i_read_texts = 'X'
IMPORTING
* E_TABHEADER =
e_tabfield_w = ls_field
* E_TABFIELDS_T =
EXCEPTIONS
not_found = 1
ddic_error = 2
OTHERS = 3.
IF sy-subrc = 0.
WRITE:
(20) ls_field-datatype,
(10) ls_field-leng.
IF ls_field-decimals IS INITIAL.
WRITE (10) ''.
ELSE.
WRITE (10) ls_field-decimals.
ENDIF.
ENDIF.
ENDFORM. "get_ddic_ref_field
*&---------------------------------------------------------------------*
*& Form get_ddic_ref_field_xls
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_ROW text
* -->ID_DATA text
*----------------------------------------------------------------------*
FORM get_ddic_ref_field_xls USING id_row id_data.
DATA: ld_tabname TYPE rmdi_name,
ld_fieldname TYPE rmdi_fienm,
ls_field TYPE rmdi_tabfld.
SPLIT id_data AT '-' INTO ld_tabname ld_fieldname.
CALL FUNCTION 'RM_TABLE_INFO_GET'
EXPORTING
i_tabname = ld_tabname
i_fieldname = ld_fieldname
i_langu = sy-langu
i_read_texts = 'X'
IMPORTING
* E_TABHEADER =
e_tabfield_w = ls_field
* E_TABFIELDS_T =
EXCEPTIONS
not_found = 1
ddic_error = 2
OTHERS = 3.
IF sy-subrc = 0.
go_excel->set_cell_data( id_col = 2 id_row = id_row id_value = ls_field-datatype ).
go_excel->set_cell_data( id_col = 3 id_row = id_row id_value = ls_field-leng ).
IF ls_field-decimals IS NOT INITIAL.
go_excel->set_cell_data( id_col = 4 id_row = id_row id_value = ls_field-decimals ).
ENDIF.
ENDIF.
ENDFORM. "get_ddic_ref_field_xls
*&---------------------------------------------------------------------*
*& Form get_ddic_data_element
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_DATA text
* -->ED_MATCH text
*----------------------------------------------------------------------*
FORM get_ddic_data_element USING id_data
ed_match.
DATA: ls_dd04v TYPE dd04v.
DATA: ld_name TYPE ddobjname.
ld_name = id_data.
CALL FUNCTION 'DDIF_DTEL_GET'
EXPORTING
name = ld_name
* STATE = 'A'
* LANGU = ' '
IMPORTING
* GOTSTATE =
dd04v_wa = ls_dd04v
* TPARA_WA =
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF ls_dd04v-datatype IS NOT INITIAL.
WRITE:
(20) ls_dd04v-datatype,
(10) ls_dd04v-leng.
IF ls_dd04v-decimals IS INITIAL.
WRITE (10) ''.
ELSE.
WRITE (10) ls_dd04v-decimals.
ENDIF.
ed_match = 'X'.
ELSE.
READ TABLE gt_dd07v TRANSPORTING NO FIELDS WITH KEY domvalue_l = id_data
BINARY SEARCH.
IF sy-subrc = 0.
ed_match = 'X'.
ENDIF.
ENDIF.
ENDFORM. "get_ddic_data_element
*&---------------------------------------------------------------------*
*& Form get_ddic_data_element_xls
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ID_ROW text
* -->ID_DATA text
* -->ED_MATCH text
*----------------------------------------------------------------------*
FORM get_ddic_data_element_xls USING id_row TYPE i
id_data
ed_match.
DATA: ls_dd04v TYPE dd04v.
DATA: ld_name TYPE ddobjname.
ld_name = id_data.
CALL FUNCTION 'DDIF_DTEL_GET'
EXPORTING
name = ld_name
* STATE = 'A'
* LANGU = ' '
IMPORTING
* GOTSTATE =
dd04v_wa = ls_dd04v
* TPARA_WA =
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF ls_dd04v-datatype IS NOT INITIAL.
go_excel->set_cell_data( id_col = 2 id_row = id_row id_value = ls_dd04v-datatype ).
go_excel->set_cell_data( id_col = 3 id_row = id_row id_value = ls_dd04v-leng ).
IF ls_dd04v-decimals IS NOT INITIAL.
go_excel->set_cell_data( id_col = 4 id_row = id_row id_value = ls_dd04v-decimals ).
ENDIF.
ed_match = 'X'.
ELSE.
READ TABLE gt_dd07v TRANSPORTING NO FIELDS WITH KEY domvalue_l = id_data
BINARY SEARCH.
IF sy-subrc = 0.
ed_match = 'X'.
ENDIF.
ENDIF.
ENDFORM. "get_ddic_data_element_xls
*&---------------------------------------------------------------------*
*& Form write_sturc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IT_STRUC text
*----------------------------------------------------------------------*
FORM write_sturc USING it_struc TYPE tt_func.
DATA: ls_struc TYPE ts_func,
ld_tabname TYPE rmdi_name,
lt_field TYPE rmdi_tabfld_t,
ls_field TYPE rmdi_tabfld.
CHECK it_struc IS NOT INITIAL.
SORT it_struc BY structure.
DELETE ADJACENT DUPLICATES FROM it_struc COMPARING structure.
WRITE /(30) '数据结构定义'.
SKIP 1.
LOOP AT it_struc INTO ls_struc.
* 校验是否是表类型
DATA: ls_dd40l TYPE dd40l.
SELECT SINGLE * FROM dd40l INTO ls_dd40l
WHERE typename = ls_struc-structure.
IF sy-subrc = 0.
ld_tabname = ls_dd40l-rowtype.
ELSE.
ld_tabname = ls_struc-structure.
ENDIF.
FORMAT INTENSIFIED COLOR = 4.
WRITE :/(30) ls_struc-structure.
"获取描述
DATA: ld_ddtext TYPE dd02t-ddtext.
SELECT SINGLE ddtext FROM dd02t INTO ld_ddtext
WHERE tabname = ld_tabname.
IF sy-subrc = 0.
WRITE (40) ld_ddtext.
ENDIF.
FORMAT INTENSIFIED COLOR = 0.
* WRITE sy-uline.
CALL FUNCTION 'RM_TABLE_INFO_GET'
EXPORTING
i_tabname = ld_tabname
* I_FIELDNAME =
* I_LANGU =
i_read_texts = 'X'
IMPORTING
* E_TABHEADER =
* E_TABFIELD_W =
e_tabfields_t = lt_field
EXCEPTIONS
not_found = 1
ddic_error = 2
OTHERS = 3.
IF sy-subrc = 0.
LOOP AT lt_field INTO ls_field.
WRITE: /(30) ls_field-fieldname ,
(20) ls_field-datatype,
(10) ls_field-leng.
IF ls_field-decimals IS INITIAL.
WRITE (10) ''.
ELSE.
WRITE (10) ls_field-decimals.
ENDIF.
WRITE : (40) ls_field-fieldtext.
ENDLOOP.
ENDIF.
SKIP 2.
ENDLOOP.
ENDFORM. "write_sturc
*&---------------------------------------------------------------------*
*& Form write_sturc_xls
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->CD_ROW text
* -->IT_STRUC text
*----------------------------------------------------------------------*
FORM write_sturc_xls USING cd_row TYPE i
it_struc TYPE tt_func.
DATA: ls_struc TYPE ts_func,
ld_tabname TYPE rmdi_name,
lt_field TYPE rmdi_tabfld_t,
ls_field TYPE rmdi_tabfld.
CHECK it_struc IS NOT INITIAL.
SORT it_struc BY structure.
DELETE ADJACENT DUPLICATES FROM it_struc COMPARING structure.
cd_row = cd_row + 2.
go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = '数据结构定义' ).
go_excel->set_cell_format( id_col = 1 id_row = cd_row id_bold = 1 id_bg_color = 36 ).
LOOP AT it_struc INTO ls_struc.
cd_row = cd_row + 2.
* 校验是否是表类型
DATA: ls_dd40l TYPE dd40l.
SELECT SINGLE * FROM dd40l INTO ls_dd40l
WHERE typename = ls_struc-structure.
IF sy-subrc = 0.
ld_tabname = ls_dd40l-rowtype.
ELSE.
ld_tabname = ls_struc-structure.
ENDIF.
go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = ls_struc-structure ).
go_excel->set_cell_format( id_col = 1 id_row = cd_row id_bold = 1 id_bg_color = 36 ).
"获取描述
DATA: ld_ddtext TYPE dd02t-ddtext.
SELECT SINGLE ddtext FROM dd02t INTO ld_ddtext
WHERE tabname = ld_tabname.
IF sy-subrc = 0.
go_excel->set_cell_data( id_col = 5 id_row = cd_row id_value = ld_ddtext ).
ENDIF.
CALL FUNCTION 'RM_TABLE_INFO_GET'
EXPORTING
i_tabname = ld_tabname
* I_FIELDNAME =
* I_LANGU =
i_read_texts = 'X'
IMPORTING
* E_TABHEADER =
* E_TABFIELD_W =
e_tabfields_t = lt_field
EXCEPTIONS
not_found = 1
ddic_error = 2
OTHERS = 3.
IF sy-subrc = 0.
LOOP AT lt_field INTO ls_field.
cd_row = cd_row + 1.
go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = ls_field-fieldname ).
go_excel->set_cell_data( id_col = 2 id_row = cd_row id_value = ls_field-datatype ).
go_excel->set_cell_data( id_col = 3 id_row = cd_row id_value = ls_field-leng ).
IF ls_field-decimals IS NOT INITIAL.
go_excel->set_cell_data( id_col = 4 id_row = cd_row id_value = ls_field-decimals ).
ENDIF.
go_excel->set_cell_data( id_col = 5 id_row = cd_row id_value = ls_field-fieldtext ).
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. "write_sturc_xls