1)获取内表结构
*&---------------------------------------------------------------------*
*& Report YTEST009
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YTEST009.
TYPES:BEGIN OF typ_mara,
matnr TYPE matnr,
meins TYPE meins,
maktx TYPE maktx,
END OF typ_mara.
* 保存内表的字段名称
TYPES:BEGIN OF typ_field,
fieldnm TYPE txt30,
END OF typ_field.
DATA:gt_mara TYPE TABLE OF typ_mara WITH HEADER LINE.
DATA:gt_field TYPE TABLE OF typ_field WITH HEADER LINE.
DATA:cl_descr TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS:<fs_comp> TYPE abap_compdescr.
FIELD-SYMBOLS <fs_name> TYPE ANY.
cl_descr ?= cl_abap_typedescr=>describe_by_data( gt_mara ).
LOOP AT cl_descr->components ASSIGNING <fs_comp>.
WRITE: / <fs_comp>-name, "字段名称
<fs_comp>-type_kind, "字段类型
<fs_comp>-length, "字段长度
<fs_comp>-decimals. "字段小数位
APPEND <fs_comp>-name TO gt_field.
ENDLOOP.
2)获取结构的字段
DEFINE mcr_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_s =
gs_fieldcat-scrtext_l =
gs_fieldcat-scrtext_m =
gs_fieldcat-reptext =
gs_fieldcat-coltext = &2.
gs_fieldcat-edit = &3.
gs_fieldcat-checkbox = &4.
gs_fieldcat-key = &5.
gs_fieldcat-f4availabl = &6.
gs_fieldcat-ref_table = &7.
gs_fieldcat-ref_field = &8.
gs_fieldcat-datatype = &9.
gs_fieldcat-no_zero = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
SELECT SINGLE * FROM zmmt0120b INTO @DATA(ls_120b) WHERE zflow = @zflow AND werks IN @s_werks1.
DATA: it_tab TYPE TABLE OF dfies WITH HEADER LINE.
CLEAR: it_tab[].
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = 'ZMMT0120B'
langu = sy-langu
TABLES
dfies_tab = it_tab
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
LOOP AT it_tab ASSIGNING FIELD-SYMBOL(<fs_comp>).
IF <fs_comp>-fieldname = 'ZXLBS' AND zflow = '5'.
<fs_comp>-fieldtext = '序列号管理'.
ENDIF.
DATA(field) = 'LS_120B-' && <fs_comp>-fieldname.
ASSIGN (field) TO FIELD-SYMBOL(<field>).
IF <field> = 'A'.
mcr_fieldcat <fs_comp>-fieldname <fs_comp>-fieldtext '' '' '' '' '' '' ''.
ELSEIF <field> = 'B'.
mcr_fieldcat <fs_comp>-fieldname <fs_comp>-fieldtext 'X' '' '' '' '' '' ''.
ENDIF.
ENDLOOP.