目的:通过透明表配置的SQl语句,自动生成动态内表,并将生成的值赋值到程序中
定义动态内表与动态结构–指针形式:
下面展示一些 内联代码片
。
// An highlighted block
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>.
定义动态内表与动态结构
下面展示一些 内联代码片
。
// An highlighted block
"动态内表
DATA: dy_table TYPE REF TO data, "动态内表
dy_line TYPE REF TO data. "动态内表工作区
DATA: lv_tabname TYPE tabname."动态内表来源的表名称
创建动态内表与动态工作区
下面展示一些 内联代码片
。
// An highlighted block
"动态内表
CREATE DATA dy_table TYPE TABLE OF (lv_tabname).
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
定义宏去动态取出数据放入动态内表中
这是只是举一个例子(自定义SQL语句取数),具体情况具体分析即可
下面展示一些 内联代码片
。
// An highlighted block
参数&1 表示需要取出的透明表的字段
参数&2 表示取数的透明表
参数&3 表示将取出的透明表数据存放到透明表中
参数&4 表示SQL语句的WHERE条件
* "动态SQL宏,取出需要放入动态内表的数据
DEFINE select_data_to_wa.
SELECT (&1)
FROM (&2)
APPENDING CORRESPONDING FIELDS OF TABLE &3
WHERE (&4).
END-OF-DEFINITION.
利用宏去取数,放入动态内表中
下面展示一些 内联代码片
。
// An highlighted block
* "动态SQL宏,取出需要放入动态内表的数据
select_data_to_wa: lv_select "被选择的透明表字段
lv_tabname "被选择的透明表
<dyn_table> "将透明表数据存入动态内表
lv_where. "SQL查询的where 条件
获取动态内表的字段名
下面展示一些 内联代码片
。
// An highlighted block
"获取内表的字段名称
cl_descr ?= cl_abap_typedescr=>describe_by_data( <dyn_wa> ).
循环动态内表,进行系列操作(本例为建动态内表的字段值赋值给自定义字段)
下面展示一些 内联代码片
。
// An highlighted block
"获取内表的字段名称
"取出的数据按条件汇入发送表中
LOOP AT <dyn_table> ASSIGNING <dyn_wa> WHERE (lv_if).
"取出动态内表的字段对应的值
LOOP AT cl_descr->components ASSIGNING FIELD-SYMBOL(<fs_comp>)."循环字段
"绑定内表字段名字对应的字段值<fs_value>
ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE <dyn_wa> TO <fs_value>.
IF sy-subrc = 0.
"接收需要发送的字段的值
IF lv_send_field1 IS NOT INITIAL .
IF <fs_comp>-name = lv_send_field1.
IF <fs_value> IS NOT INITIAL.
lv_content1 = <fs_value>."接收第一个发送字段值
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
至此,一份动态内表就能正常取数并赋值到程序当中啦~
标签:highlighted,内表,lv,ABAP,内联,动态,block From: https://blog.csdn.net/longskyworth/article/details/142252659