
1、读取内表行新语法
1.1、根据字段值查找
"-----------------------------@斌将军----------------------------- "老语法 READ TABLE lt_acd INTO ls_acd WITH KEY rbukrs = gs_acd-rbukrs. IF sy-subrc EQ 0. ENDIF. "新语法 ls_acd = lt_acd[ rbukrs = gs_acd-rbukrs ]. "-----------------------------@斌将军-----------------------------
1.2、按索引查找
"-----------------------------@斌将军----------------------------- "老语法 READ TABLE lt_acd INTO ls_acd INDEX 1. IF sy-subrc EQ 0. ENDIF. "新语法 ls_acd = lt_acd[ 1 ]. "-----------------------------@斌将军-----------------------------
1.3、判断记录是否存在
"-----------------------------@斌将军-----------------------------
"老语法
READ TABLE lt_acd WITH KEY rbukrs = gs_acd-rbukrs TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
ENDIF.
"新语法
IF LINE_EXISTS( lt_acd[ rbukrs = gs_acd-rbukrs ] .
ENDIF.
"-----------------------------@斌将军-----------------------------
1.4、获取行索引
"-----------------------------@斌将军----------------------------- "老语法 READ TABLE lt_acd WITH KEY rbukrs = gs_acd-rbukrs TRANSPORTING NO FIELDS. IF sy-subrc EQ 0. WRITE:SY-TABIX. ENDIF. "新语法 LV_INDEX = LINE_INDEX( lt_acd[ rbukrs = gs_acd-rbukrs ] . "-----------------------------@斌将军-----------------------------
需要特别注意的是,新语法必须用TRY CATCH,或在查询前,用LINE_EXISTS(判断是否存在,否则将会导致DUMP
TRY .
ls_acd = lt_acd[ rbukrs = '333' ].
CATCH cx_sy_itab_line_not_found .
MESSAGE '未找到数据' TYPE 'E' .
ENDTRY.
"或
IF line_exists( lt_acd[ rbukrs = '333' ] .
ls_acd = lt_acd[ rbukrs = '333' ].
ELSE.
MESSAGE '未找到数据' TYPE 'E'