рядом с рекомендуемым
DESCRIBE TABLE <itab-Name> LINES <variable>
есть также системная переменная SY-TFILL
.
Из документации:
После операторов DESCRIBE TABLE, LOOP AT и READ TABLE - количество строк доступной внутренней таблицы.
Пример сценария:
REPORT ytest.
DATA pf_exclude TYPE TABLE OF sy-ucomm WITH HEADER LINE.
START-OF-SELECTION.
APPEND '1' TO pf_exclude.
APPEND '2' TO pf_exclude.
APPEND '3' TO pf_exclude.
APPEND '4' TO pf_exclude.
WRITE: / 'sy-tfill = ', sy-tfill.
DESCRIBE TABLE pf_exclude.
WRITE: / 'sy-tfill = ', sy-tfill, 'after describe table'.
sy-tfill = 0. "Reset
READ TABLE pf_exclude INDEX 1 TRANSPORTING NO FIELDS.
WRITE: / 'sy-tfill = ', sy-tfill, 'after read table'.
sy-tfill = 0. "Reset
LOOP AT pf_exclude.
WRITE: / 'sy-tfill = ', sy-tfill, 'in loop with', pf_exclude.
sy-tfill = 0. "Reset
ENDLOOP.
Результат:
sy-tfill = 0
sy-tfill = 4 after describe tabl
sy-tfill = 4 after read table
sy-tfill = 4 in loop with 1
sy-tfill = 0 in loop with 2
sy-tfill = 0 in loop with 3
sy-tfill = 0 in loop with 4
Обратите внимание на значение 0 для 2-й записи: SY-TFILL
не обновляется с каждым шагом, только после первого цикла.
Я рекомендую использовать только SY-TFILL, если он вам нужен сразу после READ
(1) ... Если между READ
и использованием SY-TFILL есть другие команды, всегда есть опасность изменения системной переменной.
(1) или описать таблицу.