内部テーブルの行数を取得するにはどうすればよいですか?ループできると思います。しかし、賢い方法がなければなりません。
違いがあるかどうかはわかりませんが、コードは4.6cバージョンで実行する必要があります。
次の機能を使用できます。
DESCRIBE TABLE <itab-Name> LINES <variable>
呼び出し後、変数には内部テーブルの行数が含まれます。
このタスクには組み込み関数もあります。
variable = lines( itab_name ).
IronGoofy で記述される「純粋な」ABAP構文と同様に、関数「lines()」はテーブルitab_nameの行数を変数に書き込みます。
推奨の横に
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
2番目のエントリの値0に注意してください。SY-TFILL
は各ステップで更新されず、最初のループの後のみ更新されます。
READ
(1)の直後に使用する必要がある場合にのみ、SY-TFILLの使用をお勧めします... READ
とSY-TFILLの使用の間に他のコマンドがある場合は、システム変数の変更の危険は常にあります。
(1)またはテーブルの説明。
DATA : V_LINES TYPE I. "declare variable
DESCRIBE TABLE <ITAB> LINES V_LINES. "get no of rows
WRITE:/ V_LINES. "display no of rows
参照: http://www.sapnuts.com/courses/core-abap/internal-table-work-area.html
機能モジュールEM_GET_NUMBER_OF_ENTRIESも行数を提供します。 1つのパラメーター(テーブル名)が必要です。