Qiita初投稿になります。よろしくお願いします。
CL_ABAP_CORRESPONDINGという面白そうな標準クラスを見つけたので、内部テーブルの特定項目のみを
別テーブルに抜き出すというサンプルコードを書いてみました。
src_tbl:抽出元テーブル
del_dup: 'X'の場合、重複値を除外(DELETE DUPLICATE)した結果を返す
out_tbl:抽出先テーブル。src_tblから抜き出す項目と同一名項目を持つ必要があります(当たり前)
例えば、メインテーブルとは別にコードのテキスト値を取得する際に値一覧テーブルを取得後、
それらを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( ).