1、循环遍历内表
使用LOOP AT循环遍历内表,通过SY-INDEX获取当前行号,并利用READ TABLE读取前一行数据。例如:
LOOP AT itab INTO wa_current. lv_row_num = sy-index. IF lv_row_num > 1. READ TABLE itab INTO wa_previous INDEX lv_row_num - 1. IF sy-subrc = 0. " 逐字段比较 wa_current 与 wa_previous IF wa_current-field1 <> wa_previous-field1. " 记录差异... ENDIF. ENDIF. ENDIF. ENDLOOP.
此方法适用于结构固定的内表,需手动编写字段比较逻辑
2、使用标准函数辅助
若需简化差异记录逻辑,可参考CTVB_COMPARE_TABLES函数的设计思路,自定义工作区存储前后行数据及比较结果。例如:
DATA: lv_prev_line LIKE LINE OF itab, lv_curr_line LIKE LINE OF itab, lv_diff TYPE c. LOOP AT itab INTO lv_curr_line. IF sy-tabix > 1. READ TABLE itab INTO lv_prev_line INDEX sy-tabix - 1. lv_diff = 'X'. " 标记存在差异 " 逐字段比较 lv_curr_line 与 lv_prev_line IF lv_curr_line-field1 <> lv_prev_line-field1. " 记录具体差异字段... ENDIF. ENDIF. ENDLOOP.
此方法通过动态字段比较提升灵活性