1、循環(huán)遍歷內(nèi)表
使用LOOP AT循環(huán)遍歷內(nèi)表,通過SY-INDEX獲取當(dāng)前行號,并利用READ TABLE讀取前一行數(shù)據(jù)。例如:
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.
此方法適用于結(jié)構(gòu)固定的內(nèi)表,需手動編寫字段比較邏輯
2、使用標(biāo)準(zhǔn)函數(shù)輔助
若需簡化差異記錄邏輯,可參考CTVB_COMPARE_TABLES函數(shù)的設(shè)計思路,自定義工作區(qū)存儲前后行數(shù)據(jù)及比較結(jié)果。例如:
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'. " 標(biāo)記存在差異 " 逐字段比較 lv_curr_line 與 lv_prev_line IF lv_curr_line-field1 <> lv_prev_line-field1. " 記錄具體差異字段... ENDIF. ENDIF. ENDLOOP.
此方法通過動態(tài)字段比較提升靈活性