【SAP ABAP】ABAP7.4以降のS4HANAでの新構文(内部テーブルからのデータ取得)

登場人物紹介

三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!

博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!

この記事を読むメリット

  • ABAP7.4以降の内部テーブルからのデータ取得についての新構文を理解することができます。

ABAP7.4以降では内部テーブル(inner table)からのデータ取得方法(READ TABLE)についても新たな構文が追加されました。

博士

ここでは内部テーブルからデータ取得する際の新構文を解説していくのじゃ!

・同じプログラム内で旧構文と新構文の内部テーブルからのデータ取得文は同居可能です。

この記事のポイント

指定行読み込み(インデックス指定)

・新構文では以下のような形で内部テーブルから指定した行を構造に格納できます。

構造 = 内部テーブル[ 指定行数 ].

・ただし新構文でデータ取得できない場合は例外(EXCEPTION):cx_sy_itab_line_not_foundが発生するので例外をCHATCHする必要があります。

旧構文
* 内部テーブルから1行目を取得
READ TABLE it_mara INTO wa_mara INDEX 1.
新構文
* 内部テーブルから1行目を取得
TRY.
    wa_mara = it_mara[ 1 ].
  CATCH cx_sy_itab_line_not_found.
  " 何らかの処理
ENDTRY.

条件を指定して読み込み

・新構文では以下のような形で内部テーブルから条件に合う行を構造に格納できます。

構造 = 内部テーブル[ 項目1 = 値 項目2 = 値 …].

・ただし新構文でデータ取得できない場合は例外(EXCEPTION):cx_sy_itab_line_not_foundが発生するので例外をCHATCHする必要があります。

旧構文
* 内部テーブルから条件指定して取得
READ TABLE it_mara INTO wa_mara
               WITH KEY matnr = 'MAT0001'
                        mtart = 'ROH'.
新構文
* 内部テーブルから条件指定して取得
TRY.
    wa_mara = it_mara[ matnr = 'MAT0001' mtart = 'ROH' ].
  CATCH cx_sy_itab_line_not_found.
    " 何らかの処理
ENDTRY.

条件に合うデータが存在するかチェック

・新構文では以下のような形で内部テーブルに条件に合致するデータが存在するかどうかのチェックすることができます。

IF line_exists( 内部テーブル[ 項目1 = 値 項目2 = 値 …] ).
” 何らかの処理
ENDIF.

旧構文
* 内部テーブルから条件指定してデータが存在するかチェック
READ TABLE it_mara INTO wa_mara
               WITH KEY matnr = 'MAT0001'
                        mtart = 'ROH'.
* データが取得できた場合
IF sy-subrc = 0.
  " 何らかの処理
ENDIF.
新構文
* 内部テーブルから条件指定してデータが存在するかチェックしデータ取得できた場合
IF line_exists( it_mara[ matnr = 'MAT0001' mtart = 'ROH' ] ).
  " 何らかの処理
ENDIF.

条件に合致するデータが内部テーブルの何行目に存在するか取得

・新構文では以下のような形で条件に合致する内部テーブルの行数を存在するか取得することができます。

変数(行数) = line_index( 内部テーブル[ 項目1 = 値 項目2 = 値 …] ).

旧構文
* 内部テーブル条件指定
READ TABLE it_mara TRANSPORTING NO FIELDS
               WITH KEY matnr = 'MAT0001'
                        mtart = 'ROH'.
* 内部テーブルから取得できた行数を格納
l_index = sy-tabix.
新構文
* 条件に合致する内部テーブルの行数を格納
l_index = line_index( it_mara[ matnr = 'MAT0001' mtart = 'ROH' ] ).
博士

内部テーブルからのデータ取得に関するABAP7.4以降の新構文についての解説は以上じゃ。
まだ新構文はあるので、都度更新していくぞい!

★★★SAPラボのライター募集★★★

SAPラボでは、SAPの知識を活かして副業をしたい方を募集してるのじゃ!

SAPラボのライターの特徴 

・ライティング初心者OK!
・報酬高単価!
・業務委託契約なので副業として最適!

SAP記事執筆者としての活動実績として利用可能なので、転職時や案件探しの際に企業へのアピール材料にもなります。

募集要項

・SAP導入や運用保守プロジェクトへの参画経験1年以上

ご応募/お問合せ先

info@sap-career.com

少しでもご興味ある方、ぜひお気軽にご連絡下さい!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

株式会社Luxy(https://luxy-inc.com/company_info/)と株式会社アガルートITパートナーズ(https://agaroot-itp.com/about/)の代表取締役。

新卒でSAPエンジニアとして働き始める。副業で事業を開始したのち、2015年に独立しシステム開発会社を設立。SAPの案件に従事しつつシステム開発事業を成長させ、2021年に会社をバイアウト。その後も創業会社とグループ会社で代表を兼任。
SAPエンジニア・コンサルタント歴は10年以上。

一緒に「SAPラボ」を盛り上げてくれる副業ライター(SAP経験者)を募集してますので、お問い合わせよりお願いします!

この記事のポイント