Когда внутри цикла по таблице вы попытаетесь передать её с передачей по значению для изменения, сработает неявный выход из цикла после вызова процедуры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
TYPES: BEGIN OF ty_some_struct, some_value TYPE i, END OF ty_some_struct, ty_table TYPE STANDARD TABLE OF ty_some_struct. DATA: lt_data TYPE ty_table, ls_data TYPE ty_some_struct. ls_data-some_value = 1. APPEND ls_data TO lt_data. ls_data-some_value = 2. APPEND ls_data TO lt_data. ls_data-some_value = 3. APPEND ls_data TO lt_data. LOOP AT lt_data TRANSPORTING NO FIELDS WHERE some_value <> 0. WRITE: / sy-tabix. " После первого вызова процедуры цикл будет завершен PERFORM change_data CHANGING lt_data. ENDLOOP. LOOP AT lt_data TRANSPORTING NO FIELDS WHERE some_value <> 0. WRITE: / sy-tabix. PERFORM change_data_by_ref CHANGING lt_data. ENDLOOP. FORM change_data CHANGING value(it_data) TYPE ty_table. ENDFORM. "change_data FORM change_data_by_ref CHANGING it_data TYPE ty_table. ENDFORM. "change_data |
Результат: 1, 1, 2, 3.
Из документации:
The replacement of the entire table body in a LOOP across the same table causes the loop to be exited at the next loop pass in accordance with the rules described above.