动态内表

一个内表只需要处理几个字段,或者字段长度等不确定的情况下,可以用动态内表。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
FIELD-SYMBOLS: <lt_data> TYPE STANDARD TABLE.
DATA:
    lr_line      TYPE REF TO data.

"<tab_data> 可以是一个普通内表,也可以是一个指针
CREATE DATA lr_line LIKE <tab_data>.
ASSIGN lr_line->* TO <lt_data>.

"定义工作区
CREATE DATA lr_line LIKE LINE OF <lt_data>.
ASSIGN lr_line->* TO FIELD-SYMBOL(<ls_data>).

"给工作区的字段赋值,需要预先知道名称或者位置
ASSIGN COMPONENT 'SIGNEDDATA'   OF STRUCTURE <ls_data> TO FIELD-SYMBOL(<fs_signeddata>).
*ASSIGN COMPONENT 2   OF STRUCTURE <ls_data> TO FIELD-SYMBOL(<fs_signeddata>).
<fs_signeddata> = 86.

"添加到内表
APPEND <ls_data> TO <lt_data>.
  • 一个应用场景 在调用堆栈中其它程序的数据的时候,由于不想重复定义,而且为了编译通过,可以使用动态内表
1
2
3
4
DATA: l_text(50) TYPE c.
FIELD-SYMBOLS <fs> STANDARD TABLE.
l_text = '(ZPSR004)GT_ALV_DATA'.
ASSIGN (l_text) TO <fs>.
comments powered by Disqus