DO [n TIMES]. <statement block n>. DO [m TIMES]. <statement block m>. ENDDO. ENDDO.
嵌套WHILE循环语法
1 2 3 4 5 6
WHILE <condition1>. <statement block 1>. WHILE <condition2>. <statement block 2>. ENDWHILE. ENDWHILE.
混合嵌套语法
1 2 3 4 5 6
DO [n TIMES]. <statement block 1>. WHILE <condition>. <statement block 2>. ENDWHILE. ENDDO.
📊 嵌套循环执行流程
graph TD
A[开始外层循环] --> B{外层条件}
B -->|满足| C[执行外层语句块]
B -->|不满足| G[结束外层循环]
C --> D{进入内层循环}
D --> E{内层条件}
E -->|满足| F[执行内层语句块]
E -->|不满足| H[退出内层循环]
F --> I{继续内层循环?}
I -->|是| E
I -->|否| C
H --> C
G --> J[继续执行]
📝 示例代码
1. 简单嵌套DO循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
REPORT ys_sep_15. DATA: a1 TYPE i, b1 TYPE i. a1 = 0. b1 = 0.
" 处理二维数据 DATA: lt_matrix TYPE TABLE OF TABLE OF i, lv_row TYPE I, lv_col TYPE I.
" 填充矩阵 DO 5 TIMES. DATA: lt_row TYPE TABLE OF i. DO 5 TIMES. APPEND sy-index TO lt_row. ENDDO. APPEND lt_row TO lt_matrix. ENDDO.
" 读取矩阵 LOOP AT lt_matrix INTO DATA(lt_row). DO 5 TIMES. lv_col = sy-index. WRITE: / lt_row[ lv_col ]. ENDDO. ENDLOOP.
2. 多层条件检查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
" 检查多层数据 SELECT * FROM vbak INTO TABLE @DATA(lt_vbak) WHERE vkorg = '1000'.
LOOP AT lt_vbak INTO DATA(lwa_vbak). DO 3 TIMES. " 检查3个订单项 SELECT * FROM vbap INTO TABLE @DATA(lt_vap) WHERE vbeln = lwa_vbak-vbeln AND posnr = sy-index. IF sy-subrc = 0. LOOP AT lt_vap INTO DATA(lwa_vap). WRITE: / 'Order:', lwa_vbak-vbeln, 'Item:', lwa_vap-posnr, 'Material:', lwa_vap-matnr. ENDLOOP. ENDIF. ENDDO. ENDLOOP.