咖啡日语论坛

 找回密码
 注~册
搜索
查看: 3317|回复: 2

两种方式动态创建内表

[复制链接]
发表于 2010-2-1 16:54:57 | 显示全部楼层 |阅读模式
动态创建内表一共有两种:
一种是:“cl_alv_table_create=>create_dynamic_table”来创建
另外一种是:“RTTI”来创建
以下分别是各自的SAMPLE
回复

使用道具 举报

 楼主| 发表于 2010-2-1 16:55:07 | 显示全部楼层
本帖最后由 bgx5810 于 2010-2-1 17:51 编辑

CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE创建内表


REPORT  GREAT_TABLE1.

  FIELD-SYMBOLS:
    <DYNAMIC_TAB> TYPE STANDARD TABLE,
    <DYNAMIC_WA>,
    <DYNAMIC_FIELD>.

  DATA:
    REF_OUT    TYPE REF TO DATA,
    REF_OUT_WA TYPE REF TO DATA,
    FCAT_S TYPE LVC_S_FCAT,
    FCAT_T TYPE LVC_T_FCAT.

  CLEAR:
    FCAT_S.
   
  REFRESH:
    FCAT_T.
        
  FCAT_S-FIELDNAME = '编号'.
  FCAT_S-DATATYPE = 'C'.
  FCAT_S-INTLEN = 18.
  APPEND FCAT_S TO FCAT_T.
  CLEAR:
    FCAT_S.
   
  FCAT_S-FIELDNAME = '商品'.
  FCAT_S-REF_TABLE = 'MAKT'.
  FCAT_S-REF_FIELD = 'MAKTX'.
  APPEND FCAT_S TO FCAT_T.
   
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG = FCAT_T
    IMPORTING
      EP_TABLE        = REF_OUT.

  ASSIGN REF_OUT->* TO <DYNAMIC_TAB>.
  CREATE DATA REF_OUT_WA LIKE LINE OF <DYNAMIC_TAB>.
  ASSIGN REF_OUT_WA->* TO <DYNAMIC_WA>.


<DYNAMIC_TAB>就是所创建出来的内表,<DYNAMIC_WA>就是内表中的行。
根据上面的定义,内表一共有两个字段:
一个是“编号”,长度是3位的CHAR型;
一个是“商品”,长度和类型是参照“MAKT”表中的“MAKTX”的。

此方法只能用于普通的内表,如果是含有“DEEP STRUCTURE”结构的内表,这样定义程序在运行时会DUMP,
因为要用第二种方法来定义含有“DEEP STRUCTURE”结构的内表。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-1 16:55:17 | 显示全部楼层
本帖最后由 bgx5810 于 2010-2-1 17:51 编辑

RTTI方法创建内表


REPORT  GREAT_TABLE2.

  FIELD-SYMBOLS:
    <DYNAMIC_TAB> TYPE STANDARD TABLE,
    <DYNAMIC_WA>,
    <DYNAMIC_FIELD>.
   
  DATA:
    STYL_S           TYPE LVC_S_STYL,
    STYL_T           TYPE LVC_T_STYL,
    COMPONENTDESCR   TYPE ABAP_COMPONENTDESCR,
    COMPONENT_TAB    TYPE ABAP_COMPONENT_TAB,
    REF_OUT          TYPE REF TO DATA,
    REF_OUT_WA       TYPE REF TO DATA,
    STRUCTDESCR      TYPE REF TO CL_ABAP_STRUCTDESCR,
    TABLEDESCR       TYPE REF TO CL_ABAP_TABLEDESCR.

  CLEAR:
    COMPONENTDESCR,
    STYL_S.
  
  REFRESH:
    COMPONENT_TAB,
    STYL_T.
   
* 商品编号
  COMPONENTDESCR-TYPE ?=
    CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( MARA-MATNR ).
  COMPONENTDESCR-NAME  = '编号'.
  APPEND COMPONENTDESCR TO COMPONENT_TAB.
  CLEAR:
    COMPONENTDESCR.

* 商品
  COMPONENTDESCR-TYPE ?=
    CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( MAKT-MAKTX ).
  COMPONENTDESCR-NAME  = '商品'.
  APPEND COMPONENTDESCR TO COMPONENT_TAB.
  CLEAR:
    COMPONENTDESCR.

* STYLE
  COMPONENTDESCR-TYPE ?=
    CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( STYL_T ).
  COMPONENTDESCR-NAME  = 'STYLE'.
  APPEND COMPONENTDESCR TO COMPONENT_TAB.

  STRUCTDESCR  = CL_ABAP_STRUCTDESCR=>CREATE( COMPONENT_TAB ).
  TABLEDESCR  = CL_ABAP_TABLEDESCR=>CREATE( STRUCTDESCR ).
  CREATE DATA REF_OUT TYPE HANDLE TABLEDESCR.
  ASSIGN REF_OUT->* TO <DYNAMIC_TAB>.
  CREATE DATA REF_OUT_WA LIKE LINE OF <DYNAMIC_TAB>.
  ASSIGN REF_OUT_WA->* TO <DYNAMIC_WA>.

根据上面的代码,<DYNAMIC_TAB>内表中一共三个字段:
一个是商品编号,长度和类型参照“MARA-MATNR”;
一个是商品,长度和类型参照“MAKT-MAKTX”;
一个是STYLE,类型参照“LVC_T_STYL”的表,所以“STYLE”实际上也就是一个内表,用来实现画面的某些操作。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注~册

本版积分规则

小黑屋|手机版|咖啡日语

GMT+8, 2024-5-11 20:44

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表