说明:最近业务顾问有很多的需求,其实都是一样的逻辑,就是处理的表不一样,就要写好多次程序,整理一下他的一系列需求之后,准备写一个动态的程序,这样会方便很多,动态的其实核心是动态的内表,所以简单的说一下动态内表的定义方式。
1、根据数据库表定义动态内表
这种定义比较直接,直接把数据库表的所有字段都放在动态内表中了,可能会有冗余,但是用起来比较好写。
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
DATA :lv_tabname type char15.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>.
lv_tabname = 'MARA'.
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>.
2、根据自己的选择定义动态内表
这种定义更DIY一点,用什么定义什么就好了,就是依据lvc_t_fcat来定义,这里我简单的展示一下,把字段名称以及描述放在内表中,然后去写给lvc_t_fcat
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>.
DATA : lt_ftab TYPE lvc_t_fcat.
DATA : lw_ftab LIKE LINE OF lt_ftab.
"LT_TABLE中准备好要展示的字段名和字段名称
"将表内容写给lt_ftab,依据lt_ftab创建动态的内表
LOOP AT lt_table INTO DATA(lw_table).
MOVE-CORRESPONDING lw_table TO lw_ftab.
"模板都使用char 类型.
lw_ftab-datatype = 'CHAR'.
lw_ftab-inttype = 'C'.
"小于30位的字段设为30位.
IF lw_ftab-intlen <= '000030'.
lw_ftab-intlen = '000030'.
ENDIF.
APPEND lw_ftab TO lt_ftab.
ENDLOOP.
"创建表的动态内表.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_ftab[]
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
动态内表值的读取和修改不可以直接写成<dy_wa>-matkl,需要用语法动态读取一下,下面以读取一条MARA的为例
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
DATA :lv_tabname TYPE char15.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>.
lv_tabname = 'MARA'.
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>.
SELECT * FROM MARA INTO CORRESPONDING FIELDS OF TABLE <dyn_table> WHERE MATNR = '000001'.
LOOP AT <dyn_table> INTO <dyn_wa>.
"获取物料组MARA-MATKL
ASSIGN COMPONENT 'MATKL' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOLS(<fs_data>).
IF sy-subrc = 0.
"此时,<dyn_wa>中物料组的值就存在<fs_data>中了,修改<fs_data>的值,就会直接修改<dyn_wa>和<dyn_table>中MATKL的值
ENDIF.
ENDLOOP.
作者:小飞猪猪猪猪猪猪猪–CSDN
注意:转发请注明作者
业务顾问有诸多相同逻辑但处理表不同的需求,为方便处理,准备编写动态程序,核心是动态内表。介绍了两种动态内表定义方式,一是根据数据库表定义,二是根据自身选择定义,还提及动态内表值读取和修改需用语法动态读取。

217

被折叠的 条评论
为什么被折叠?



