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 を使用すると、カンマ区切り表示ではなくなります。


NEXT>> 15.2 INSERT

研修の詳細はこちら