LoginSignup
6
8

More than 3 years have passed since last update.

[ABAP]内部テーブルの特定項目のみを別テーブルに抜き出す(Extract Field Values In Internal Table)

Last updated at Posted at 2018-12-14

Qiita初投稿になります。よろしくお願いします。

CL_ABAP_CORRESPONDINGという面白そうな標準クラスを見つけたので、内部テーブルの特定項目のみを
別テーブルに抜き出すというサンプルコードを書いてみました。

src_tbl:抽出元テーブル
del_dup: 'X'の場合、重複値を除外(DELETE DUPLICATE)した結果を返す
out_tbl:抽出先テーブル。src_tblから抜き出す項目と同一名項目を持つ必要があります(当たり前:smiley:

例えば、メインテーブルとは別にコードのテキスト値を取得する際に値一覧テーブルを取得後、
それらをFor all entriesのテーブルとして指定するなどしたら便利ではないでしょうか。

SAMPLE_CL_ABAP_CORRESPONDING
REPORT Y_SAMPLE_CL_ABAP_CORRESPONDING.

* 参照PGM:DEMO_CORRESPONDING_CLASS_TB

   TYPES:
     BEGIN OF line1,
       matnr TYPE mara-matnr,
       meins TYPE mara-meins,
       mtart TYPE mara-mtart,
       matkl TYPE mara-matkl,
     END OF line1,
     BEGIN OF line2,
       meins TYPE mara-meins,
     END OF line2,
     BEGIN OF line3,
       mtart TYPE mara-mtart,
     END OF line3.

   DATA:
     itab1 TYPE TABLE OF line1 WITH KEY matnr,
     itab2 TYPE TABLE OF line2 WITH NON-UNIQUE KEY meins,
     itab3 TYPE TABLE OF line3 WITH NON-UNIQUE KEY mtart.

CLASS LCL_move_correspond DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS main IMPORTING src_tbl TYPE ANY TABLE
                                 del_dup TYPE c
                       EXPORTING out_tbl TYPE ANY TABLE.
ENDCLASS.

CLASS LCL_move_correspond IMPLEMENTATION.
  METHOD main.
*   共通項目名の内容を抜き出し
    cl_abap_corresponding=>create(
      source            = src_tbl
      destination       = out_tbl
      mapping           = VALUE cl_abap_corresponding=>mapping_table(  )
      )->execute( EXPORTING source      = src_tbl
                  CHANGING  destination = out_tbl ).
    SORT out_tbl.
    IF del_dup = abap_on.
*     値の重複を除外
      DELETE ADJACENT DUPLICATES FROM out_tbl.
    ENDIF.

  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

* 元となるテーブルにデータを格納 
  SELECT matnr, meins, mtart, matkl
    FROM mara INTO TABLE @itab1.

* meins一覧作成
  LCL_move_correspond=>main( EXPORTING src_tbl = itab1
                                       del_dup = abap_on ”値重複除外:on
                             IMPORTING out_tbl = itab2 ).
* 書き込み
  cl_demo_output=>write( itab2 ).

* mtart一覧
  LCL_move_correspond=>main( EXPORTING src_tbl = itab1
                                       del_dup = abap_on
                             IMPORTING out_tbl = itab3 ).
* 書き込み
  cl_demo_output=>write( itab3 ).

* 書き込んだ内容を表示
  cl_demo_output=>display( ).
6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8