• 透明表、内表字段描述取法 石头


    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_datagt_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简单的说就是在传进来的参数外面加括号,就可以了

  • 相关阅读:
    The Fifth Week Lucklyzpp
    The Fourth Week Lucklyzpp
    The Third Week Lucklyzpp
    The Second Week lucklyzpp
    快10年没怎么过来了,一切如常
    男女诗篇
    ubuntu安装mysql
    ubuntu配置tomcat和jdk
    ubuntu常用操作命令以及它的通道模式简解
    Ubuntu操作异常汇总
  • 原文地址:https://www.cnblogs.com/rockyzjut/p/3169465.html
Copyright © 2020-2023  润新知