TYPES:BEGIN OF ty_i, "itab
key TYPE i,
value TYPE i,
kk TYPE char10,
END OF ty_i,
BEGIN OF ty_col, "itab3
col TYPE i,
val TYPE i,
dy TYPE char10,
END OF ty_col ,
TT_I TYPE TABLE OF TY_I ,
TT_COL TYPE TABLE OF TY_COL .
DATA:
BEGIN OF struct1,
col1 TYPE i VALUE 11,
col2 TYPE i VALUE 12,
END OF struct1.
DATA:
BEGIN OF struct2,
col2 TYPE i VALUE 22,
col3 TYPE i VALUE 23,
END OF struct2.
struct2 = CORRESPONDING #( BASE ( struct2 ) struct1 ).
struct2 = VALUE #( BASE struct1 col3 = 33 ).
DATA: itab TYPE TABLE OF ty_i,
itab2 TYPE TABLE OF ty_i,
itab3 TYPE TABLE OF ty_col.
itab = VALUE #( ( key = 1 value = 1 ) ( key = 2 value = 2 ) ( key = 3 value = 3 ) ).
itab2 = VALUE #( ( key = 1 value = 1 ) ).
itab3 = VALUE #( ( col = 12 val = 15 dy = 'XXJ' ) ( col = 32 val = 65 dy = 'KKP' ) ).
*itab = CORRESPONDING #( BASE ( itab ) itab2 EXCEPT key value ). "类似appendd lines to强化版 EXCEP排除部分字段
itab = CORRESPONDING #( BASE ( itab ) itab3
MAPPING
key = col
kk = dy
EXCEPT
value ). " 在mapping中已指定过kk 无法排除了
cl_demo_output=>display( itab ).
内表读取
READ TABLE itab WITH KEY key = '1' ASSIGNING FIELD-SYMBOL(<fs1>).
IF sy-subrc = 0.
"...
ENDIF. "
*Instead of ↓
IF line_exists( itab[ key = '1' ] ).
DATA(lv_var) = VALUE #( itab[ 1 ]-value DEFAULT VALUE #( itab2[ 1 ]-value DEFAULT '' ) ). "index读取 Default防dump
lv_var = VALUE #( itab[ key = 1 ]-kk OPTIONAL ). "optionnal 防挂
ENDIF.
"内表筛选
*DATA(lt_tab) = VALUE tt_i( FOR WA IN ITAB WHERE ( KEY = 1 ) ( WA ) ). "筛选key=1的所有数据
DATA(lt_tab) = VALUE tt_i( FOR wa IN itab ( kk = wa-value
value = COND #( WHEN wa-key = 1 THEN 99 ELSE 18 )
) ). "括号内写几个赋值 就只赋值几个字段
LET IN
TYPES: BEGIN OF ty_data,
matnr TYPE mara-matnr,
mtart TYPE mara-mtart,
matkl TYPE mara-matkl,
text1 TYPE char50,
END OF ty_data,
tt_data TYPE TABLE OF ty_data WITH DEFAULT KEY.
DATA lt_data TYPE TABLE OF ty_data.
lt_data = VALUE #(
( matnr = 'MATRIAL-001'
mtart = 'WATR'
matkl = '1020'
text1 = 'FIRST material' )
( matnr = 'MATRIAL-002'
mtart = 'FOOD'
matkl = '1030'
text1 = 'SECOND material' )
( matnr = 'MATRIAL-003'
mtart = 'WATR'
matkl = '1040'
text1 = 'THIRD material' )
).
DATA(lt_line) = VALUE tt_data( LET
lw_data = VALUE #( lt_data[ matnr = 'MATRIAL-001' ] OPTIONAL )
lv_str = 'Date:' && sy-datum
IN
( matnr = lw_data-matnr
mtart = lw_data-mtart
matkl = lw_data-matkl
text1 = lv_str )
( matnr = '123'
mtart = 'XXX'
matkl = '9527'
text1 = lv_str )
).
cl_demo_output=>display( data = lt_line name = '这是标题' ).
*————————————————
*原文链接:https://blog.youkuaiyun.com/qq_34060435/article/details/117109771