1、透明表取法:
*** 取字段名称
DATA: DDTEXT LIKE DD03T-DDTEXT,EDDTEXT LIKE DD04T-DDTEXT,DDDTEXT LIKE DD01T-DDTEXT.
SELECT SINGLE dd04t~DDTEXT dd03t~ddtext dd01t~ddtext
into (ddtext,eddtext,dddtext)
FROM DD03L LEFT JOIN DD03T
ON DD03L~TABNAME = DD03T~TABNAME
AND DD03L~FIELDNAME = DD03T~FIELDNAME
AND DD03T~DDLANGUAGE = SY-LANGU
LEFT JOIN DD04T
ON DD03L~ROLLNAME = DD04T~ROLLNAME
AND DD04T~DDLANGUAGE = SY-LANGU
LEFT JOIN DD01T
ON DD03L~DOMNAME = DD01T~DOMNAME
AND DD01T~DDLANGUAGE = SY-LANGU
WHERE DD03L~TABNAME = tab_werks-tabname and "表名
DD03L~FIELDNAME = tab_g_mail-FNAME. "字段名
IF DDTEXT = SPACE.
IF EDDTEXT = SPACE.
tab_g_mail-ddtext = DDDTEXT. "域文本
ELSE.
tab_g_mail-ddtext = EDDTEXT. "字段文本(语言依赖)
ENDIF.
else.
tab_g_mail-ddtext = ddtext. "数据单元文本
ENDIF.
2、内表取法
ABAP-如何读取内表的字段名称
转自http://blog.sina.com.cn/s/blog_4d1570de0100txvv.html
*&---------------------------------------------------------------------*
*& Report ZTRAINING29 如何得到内表的字段名称与字段类型 *
*& T-code *
*&---------------------------------------------------------------------*
*& Created by Xavery hsueh(薛现军) on 2011-06-08 *
*& Last edited date: *
*&---------------------------------------------------------------------*
REPORT ztraining29 NO STANDARD PAGE HEADING .
************************************************************************
** 声明数据库表 Declaration of database **
************************************************************************
TABLES:mara,
makt. "
************************************************************************
** 定义结构类型 Define the structure's type **
************************************************************************
* 物料编号的内表
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.
************************************************************************
** 定义变量与内表 Define the variants and Internal tables **
************************************************************************
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.
************************************************************************
** 宏定义 Define the macro **
************************************************************************
DEFINE mcr_range.
clear &1.
&1-sign = 'I'.
&1-option = &2.
&1-low = &3.
&1-high = &4.
append &1.
END-OF-DEFINITION.
************************************************************************
** 选择屏幕 Customize the selection-screen **
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLE text_001.
PARAMETERS: p_erdat TYPE erdat DEFAULT sy-datum. "统计日期
SELECT-OPTIONS s_matnr FOR mara-matnr. "物料编号
SELECTION-SCREEN END OF BLOCK xavery.
************************************************************************
** 执行程序事件 Executing the program's events **
************************************************************************
INITIALIZATION.
PERFORM sub_init_cond.
START-OF-SELECTION.
PERFORM sub_process_fieldname.
END-OF-SELECTION.
*@---------------------------------------------------------------------*
*@ Form SUB_INIT_COND
*@---------------------------------------------------------------------*
* 初始化选择条件
*----------------------------------------------------------------------*
FORM sub_init_cond .
text_001 = '选择屏幕'.
ENDFORM. " SUB_INIT_COND
*&---------------------------------------------------------------------*
*& Form sub_process_fieldname
*&---------------------------------------------------------------------*
* 取得内表字段名称与类型
*----------------------------------------------------------------------*
FORM sub_process_fieldname .
DATA:g_fieldnm TYPE txt30.
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.
LOOP AT gt_field.
CONCATENATE 'GT_MARA-' gt_field-fieldnm INTO gt_field.
MODIFY gt_field.
ENDLOOP.
SELECT * FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mara
WHERE matnr IN s_matnr.
* 使用得到的字段名称,输出字段结果
LOOP AT gt_mara.
WRITE /.
LOOP AT gt_field.
ASSIGN (gt_field-fieldnm) TO <fs_name>.
WRITE: <fs_name>.
ENDLOOP.
ENDLOOP.
ENDFORM. " sub_process_fieldname
http://www.itpub.net/thread-1039193-1-1.html
rockwl2001:获得内表中的字段名,然后取VKORG、VTWEG、SPART三个字段的值,再做些操作,所有过程都是动态的。
*&---------------------------------------------------------------------*
*& Form sd_itab_check_vkorg
*&---------------------------------------------------------------------*
* 根据销售范围的权限删去内表中没有权限的值
*----------------------------------------------------------------------*
* -->I_ITAB text
*----------------------------------------------------------------------*
FORM sd_itab_check_vkorg CHANGING i_itab TYPE INDEX TABLE.
DATA: l_tabcount TYPE i,
l_tabledescr_ref TYPE REF TO cl_abap_tabledescr,
l_descr_ref TYPE REF TO cl_abap_structdescr,
l_indexof_vkorg TYPE i,
l_indexof_vtweg TYPE i,
l_indexof_spart TYPE i.
FIELD-SYMBOLS: <fs_wa> TYPE ANY,
<fs_comp_wa> TYPE abap_compdescr,
<fs_vkorg> TYPE ANY,
<fs_vtweg> TYPE ANY,
<fs_spart> TYPE ANY.
DESCRIBE TABLE i_itab LINES l_tabcount.
IF l_tabcount <= 0.
EXIT.
ENDIF.
l_tabledescr_ref ?= cl_abap_typedescr=>describe_by_data( i_itab ).
l_descr_ref ?= l_tabledescr_ref->get_table_line_type( ).
LOOP AT l_descr_ref->components ASSIGNING <fs_comp_wa>.
IF <fs_comp_wa>-name = 'VKORG'.
l_indexof_vkorg = sy-tabix.
ELSEIF <fs_comp_wa>-name = 'VTWEG'.
l_indexof_vtweg = sy-tabix.
ELSEIF <fs_comp_wa>-name = 'SPART'.
l_indexof_spart = sy-tabix.
ENDIF.
IF l_indexof_vkorg IS NOT INITIAL AND l_indexof_vtweg IS NOT INITIAL AND
l_indexof_spart IS NOT INITIAL.
EXIT.
ENDIF.
ENDLOOP.
IF l_indexof_vkorg IS INITIAL OR l_indexof_vtweg IS INITIAL OR
l_indexof_spart IS INITIAL.
RAISE EXCEPTION TYPE cx_sy_table_attributes.
ENDIF.
LOOP AT i_itab ASSIGNING <fs_wa>.
ASSIGN COMPONENT l_indexof_vkorg OF STRUCTURE <fs_wa> TO <fs_vkorg>.
ASSIGN COMPONENT l_indexof_vtweg OF STRUCTURE <fs_wa> TO <fs_vtweg>.
ASSIGN COMPONENT l_indexof_spart OF STRUCTURE <fs_wa> TO <fs_spart>.
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
ID 'VKORG' FIELD <fs_vkorg>
ID 'VTWEG' FIELD <fs_vtweg>
ID 'SPART' FIELD <fs_spart>
ID 'ACTVT' FIELD '03'.
IF sy-subrc NE 0.
DELETE i_itab INDEX sy-tabix.
ENDIF.
ENDLOOP.
ENDFORM. "sd_itab_check_vkorg
dreamgift:在做ALV中有个 REUSE_ALV_FIELDCATALOG_MERGE 可以得到内表中的项目名.
xiner418:简单的说就是在传进来的参数外面加括号,就可以了