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.此方法通过动态字段比较提升灵活性