graph TD
A[开始循环迭代] --> B{执行语句}
B --> C{遇到CONTINUE?}
C -->|是| D[跳过剩余语句]
C -->|否| E{继续执行}
D --> F[进入下一次迭代]
E --> G{循环结束?}
F --> H[开始下一次循环]
G --> I[结束循环]
H --> B
📝 基本示例
简单跳过
1 2 3 4 5 6 7
REPORT yh_sep_15. DO 5 TIMES. IF sy-index = 3. CONTINUE. " 跳过第3次迭代 ENDIF. WRITE / sy-index. ENDDO.
输出:
1 2 3 4
1 2 4 5
跳过特定条件
1 2 3 4 5 6 7 8
REPORT yh_sep_15. DO 10 TIMES. " 跳过偶数 IF sy-index MOD 2 = 0. CONTINUE. ENDIF. WRITE: / 'Odd number:', sy-index. ENDDO.
REPORT yh_sep_15. DO 10 TIMES. " 跳过周末(假设1-7是周一到周日) IF sy-index = 6 OR sy-index = 7. WRITE: / 'Weekend - Skipping'. CONTINUE. ENDIF. WRITE: / 'Working day:', sy-index. ENDDO.
输出:
1 2 3 4 5 6 7 8 9 10
Working day: 1 Working day: 2 Working day: 3 Working day: 4 Working day: 5 Weekend - Skipping Weekend - Skipping Working day: 8 Working day: 9 Working day: 10
3. 数据处理中的CONTINUE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
REPORT yh_sep_15. DATA: lt_numbers TYPE TABLE OF i, lv_sum TYPE I.
" 填充测试数据 DO 10 TIMES. APPEND sy-index TO lt_numbers. ENDDO.
" 计算总和,跳过特定值 LOOP AT lt_numbers INTO DATA(lv_number). IF lv_number MOD 3 = 0. " 跳过3的倍数 CONTINUE. ENDIF. lv_sum = lv_sum + lv_number. ENDLOOP.
WRITE: / 'Sum (excluding multiples of 3):', lv_sum.
" ✅ 好的代码结构 LOOP AT lt_data INTO lwa_data. " 检查跳过条件 IF lwa_data-status = 'INACTIVE'. CONTINUE. ENDIF. " 处理有效数据 PERFORM process_data USING lwa_data. ENDLOOP.
" ❌ 避免嵌套过深 LOOP AT lt_data INTO lwa_data. IF lwa_data-status = 'ACTIVE'. IF lwa_data-flag = 'YES'. IF lwa_data-amount > 0. PERFORM process_data USING lwa_data. ENDIF. ENDIF. ENDIF. ENDLOOP.
" ✅ 合并多个条件 LOOP AT lt_data INTO lwa_data. IF lwa_data-status = 'INACTIVE' OR lwa_data-flag = 'DELETED' OR lwa_data-amount = 0. CONTINUE. ENDIF. " 处理逻辑 ENDLOOP.
" ❌ 分散条件 LOOP AT lt_data INTO lwa_data. IF lwa_data-status = 'INACTIVE'. CONTINUE. ENDIF. IF lwa_data-flag = 'DELETED'. CONTINUE. ENDIF. IF lwa_data-amount = 0. CONTINUE. ENDIF. " 处理逻辑 ENDLOOP.