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'