APPEND
15.1 APPEND
APPEND
APPENDは、内部テーブルにレコードを追加する命令です。
APPENDは単に内部テーブルの最終行に値を追加していくため、行を指定したい場合は後述のINSERTを使用してください。
構造と内部テーブルは、同じ構造データ型でなければいけません。
また、ソートテーブルに APPEND を使用することは非推奨です。
「サンプルコード」①
REPORT ZR_KANDA_CUSLIST1_K.
"------------------------------------------------------------
" 1) 行の型(内部テーブル1行分の形)を定義
"------------------------------------------------------------
TYPES: BEGIN OF TY_CUSTOMER,
NAME TYPE C LENGTH 20,
ID_NUMBER TYPE I,
END OF TY_CUSTOMER.
"------------------------------------------------------------
" 2) 内部テーブル(複数行)と、作業用の構造(1行)を用意
"------------------------------------------------------------
DATA GT_CUSTOMERS TYPE STANDARD TABLE OF TY_CUSTOMER WITH EMPTY KEY.
DATA GS_CUSTOMER TYPE TY_CUSTOMER.
START-OF-SELECTION.
"1行分のデータを作る
GS_CUSTOMER-NAME = 'Melissa'.
GS_CUSTOMER-ID_NUMBER = 105467.
"末尾に1行追加(STANDARD TABLEでよく使う)
APPEND GS_CUSTOMER TO GT_CUSTOMERS.
"確認表示
LOOP AT GT_CUSTOMERS INTO GS_CUSTOMER.
WRITE: / 'NAME=', GS_CUSTOMER-NAME,
'ID=', GS_CUSTOMER-ID_NUMBER.
ENDLOOP.
実行結果
APPEND(新構文)
先述の通り、従来まではAPPEND命令によって内部テーブルにレコードを追加する場合
構造の定義が必要でした。
しかし、S/4 HANA化に伴い、構造を宣言せずに行追加が可能になりました。
構文は以下の通りです。
どちらの書き方も動作は同じです。
複数レコードを追加したい場合は、以下の通り1レコードを括弧で囲みます。
APPEND VALUE #( ( <項目名> = <値> <項目名> = <値> … )
( <項目名> = <値> <項目名> = <値> … ) )
TO <内部テーブル>.
構文②も同様に、複数レコードを追加することが可能です。(「サンプルコード③」参照)
「サンプルコード」②
REPORT Z_SAMPLE151_NEW.
"------------------------------------------------------------
" 1) 行の型(内部テーブル1行分の形)を定義
"------------------------------------------------------------
TYPES: BEGIN OF TY_CUSTOMER,
NAME TYPE C LENGTH 20,
ID_NUMBER TYPE I,
END OF TY_CUSTOMER.
"------------------------------------------------------------
" 2) 内部テーブル(複数行)を用意
"------------------------------------------------------------
DATA GT_CUSTOMERS TYPE STANDARD TABLE OF TY_CUSTOMER WITH EMPTY KEY.
START-OF-SELECTION.
"作業用構造を作らず、その場で1行を作って追加
APPEND VALUE #( NAME = 'Melissa' ID_NUMBER = 105467 ) TO GT_CUSTOMERS.
"確認表示
LOOP AT GT_CUSTOMERS INTO DATA(LS_CUSTOMER).
WRITE: / 'NAME=', LS_CUSTOMER-NAME,
'ID=', LS_CUSTOMER-ID_NUMBER.
ENDLOOP.
実行結果
「サンプルコード」③:BASE で複数行追加
REPORT Z_SAMPLE151_NEW2. "------------------------------------------------------------ " 1) 行の型(内部テーブル 1 行分の形)を定義 "------------------------------------------------------------ TYPES: BEGIN OF TY_CUSTOMER, NAME TYPE C LENGTH 20, ID_NUMBER TYPE I, END OF TY_CUSTOMER. "------------------------------------------------------------ " 2) 内部テーブル(複数行)を用意 "------------------------------------------------------------ DATA GT_CUSTOMERS TYPE STANDARD TABLE OF TY_CUSTOMER WITH EMPTY KEY. START-OF-SELECTION. "既存の gt_customers を残しつつ、2 行追加した“新しいテーブル”を作る GT_CUSTOMERS = VALUE #( BASE GT_CUSTOMERS ( NAME = '神田' ID_NUMBER = 105467 ) ( NAME = '鈴木' ID_NUMBER = 105468 ) ). *出力 LOOP AT GT_CUSTOMERS INTO DATA(LS_CUSTOMER). WRITE: / 'NAME=', LS_CUSTOMER-NAME, 'ID=', LS_CUSTOMER-ID_NUMBER NO-GROUPING. ENDLOOP.
実行結果
補足(カンマ区切りについて)
WRITE のオプションで NO-GROUPING を使用すると、カンマ区切り表示ではなくなります。