二维码

[基础语法] ABAP动态内表使用的简单例子

Twilight发表于 2014-08-11 17:57Twilight 最后回复于 2014-08-11 17:57 [复制链接] 5921 0

关键技巧:
1)、创建动态内表:
a、动态内表的结构的定义. 动态内表表结构的定义必须使用表结构与 table type: lvc_t_fcat一样的内表.
    一般情况下,我们都内表的所有列定义成字符型.
b、根据表结构生成内表.  系统提供了一个标准的method来产生动态表,使用方法如下:

2)、动态内表的赋值:
a、获取指定的字段
b、给指定的字段赋值

3)、读取动态内表的值:
a、获取指定的字段
b、读取指定的字段值

动态构建内表,这种方法主要用于表结构无法确定有几列,几有哪些列,尤其与信息配置有关的时候,就只能用这种方法,否则配置一变,程序就不能用了。

程序代码:
  1. FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
  2.                <dyn_wa>,
  3.                <dyn_field>.

  4. DATA: dy_table TYPE REF TO data,
  5.       dy_line  TYPE REF TO data,
  6.       it_structure TYPE lvc_t_fcat,
  7.       wa_structure TYPE lvc_s_fcat.

  8. START-OF-SELECTION.
  9.   PERFORM create_structure.        " 定义内表的结构
  10.   PERFORM create_dynamic_table.    " 按照定义的内表结构,产生一个内表
  11.   PERFORM write_data_to_dyntable.  " 向动态内表中写数
  12.   PERFORM output_dyntable_data.    " 从动态内表中取数,并写到屏幕

  13. *&---------------------------------------------------------------------*
  14. *&      Form  create_structure
  15. *&---------------------------------------------------------------------*
  16. FORM create_structure .
  17.   wa_structure-fieldname = 'COL1'.  " 第一列列名
  18.   wa_structure-col_pos   = 1.       " 表示第一列 --- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
  19.   wa_structure-inttype = 'C'.       " 数据类型
  20.   wa_structure-intlen = 6.          " 长度
  21.   APPEND wa_structure TO it_structure.

  22.   wa_structure-fieldname = 'COL2'.  " 第二列列名
  23.   wa_structure-col_pos   = 2.       " 表示第二列--- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
  24.   wa_structure-inttype = 'C'.       " 数据类型
  25.   wa_structure-intlen = 6.          " 长度
  26.   APPEND wa_structure TO it_structure.

  27.   wa_structure-fieldname = 'COL3'.  " 第三列名
  28.   wa_structure-col_pos   = 3.       " 表示第三列 --- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
  29.   wa_structure-inttype = 'C'.       " 数据类型
  30.   wa_structure-intlen = 6.          " 长度
  31.   APPEND wa_structure TO it_structure.
  32. ENDFORM.                    " create_structure
  33. *&---------------------------------------------------------------------*
  34. *&      Form  create_dynamic_table
  35. *&---------------------------------------------------------------------*
  36. FORM create_dynamic_table .
  37.   CALL METHOD cl_ALV_table_create=>create_dynamic_table
  38.     EXPORTING
  39.       it_fieldcatalog = it_structure
  40.     IMPORTING
  41.       ep_table        = dy_table.

  42.   ASSIGN dy_table->* TO <dyn_table>.    " 用表类型指针 <dyn_table> 指向 数据对象的内容.
  43. ENDFORM.                    " create_dynamic_table
  44. *&---------------------------------------------------------------------*
  45. *&      Form  write_data_to_dyntable
  46. *&---------------------------------------------------------------------*
  47. FORM write_data_to_dyntable .
  48.   DATA:wa_new_line TYPE REF TO data.
  49.   DATA:i TYPE n.
  50.   DATA:j TYPE n.
  51.   CREATE DATA wa_new_line LIKE LINE OF <dyn_table>.  " 建立一个与动态内表结构相同的数据对象,且数据对象为是一个结构
  52.   ASSIGN wa_new_line->* TO <dyn_wa>.

  53.   " 用<dyn_wa>指针指向该结构
  54.   DO 3 TIMES.
  55.     i = i + 1.
  56.     CLEAR j.
  57.     LOOP AT it_structure INTO wa_structure.
  58.       j = j + 1.
  59.       ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.  " 用指针 <dyn_field>指向工作区<dyn_wa>中的一个字段,字段名为wa_structure-fieldname.
  60.       CONCATENATE i j INTO <dyn_field>.                                              " 给指针指向的字段赋值
  61.     ENDLOOP.
  62.     APPEND <dyn_wa> TO <dyn_table>.
  63.   ENDDO.
  64. ENDFORM.                    " write_data_to_dyntable

  65. *&---------------------------------------------------------------------*
  66. *&      Form  output_dyntable_data
  67. *&---------------------------------------------------------------------*
  68. FORM output_dyntable_data .
  69.   LOOP AT it_structure INTO wa_structure.
  70.     WRITE: wa_structure-fieldname(5).
  71.   ENDLOOP.
  72.   LOOP AT <dyn_table> INTO <dyn_wa>.
  73.     WRITE: / .
  74.     LOOP AT it_structure INTO wa_structure.
  75.       ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.  " 用指针 <dyn_field>指向工作区<dyn_wa>中的一个字段,字段名为wa_structure-fieldname.
  76.       WRITE: <dyn_field>.
  77.     ENDLOOP.
  78.   ENDLOOP.
  79. ENDFORM.                    " output_dyntable_data
复制代码

执行结果:
创建动态内表例子.png
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

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