matsukawar's blog

個人的な技術ブログ。テクニカルアーキテクトを目指しています。Twitter : https://twitter.com/matsukawar

【Practical New ABAP : 01】2つの構造が異なる内部テーブルをマージして重複を削除する

はじめに

ABAP 7.4 にて、2つの内部テーブルをマージする必要があったのでNew ABAPで書いてみました。実践でも使えるNew ABAPの文法だと思います。(Merge two internal tables with different structures to remove duplicates)

Program

  1. Initialize variables and types

TYPES:
  BEGIN OF LINE,
    X1 TYPE I,
    X2 TYPE I,
    X3 TYPE I,
  END OF LINE,
  TYP_ITAB1 TYPE STANDARD TABLE OF LINE WITH DEFAULT KEY,


  BEGIN OF LINE2,
    X1 TYPE I,
    X2 TYPE I,
    X3 TYPE I,
    X4 TYPE C,
  END OF LINE2,
  TYP_ITAB2 TYPE STANDARD TABLE OF LINE2 WITH DEFAULT KEY,


  BEGIN OF LINE3,
    X3 TYPE I,
    X1 TYPE I,
  END OF LINE3.


DATA(ITAB1) = VALUE TYP_ITAB1(
                        ( X1 = 1 X2 = 1 X3 = 1 )
                        ( X1 = 2 X2 = 1 X3 = 2 )
                        ( X1 = 1 X2 = 2 X3 = 3 ) ).


DATA(ITAB2) = VALUE TYP_ITAB2(
                        ( X1 = 2 X2 = 6 X3 = 2 X4 = 'A' )
                        ( X1 = 3 X2 = 1 X3 = 3 X4 = 'B' )
                        ( X1 = 3 X2 = 2 X3 = 4 X4 = 'C' ) ).

  1. Old (Current) ABAP Program

TYPES TYP_ITAB3_LEG TYPE STANDARD TABLE OF LINE3.

DATA ITAB3_LEG TYPE TYP_ITAB3_LEG.

 

MOVE-CORRESPONDING ITAB1 TO ITAB3_LEG.
MOVE-CORRESPONDING ITAB2 TO ITAB3_LEG KEEPING TARGET LINES.

SORT ITAB3_LEG BY X1 X3.
DELETE ADJACENT DUPLICATES FROM ITAB3_LEG COMPARING X1 X3.

  1. New (7.4) ABAP Program

TYPES TYP_ITAB3_NEW TYPE SORTED TABLE OF LINE3

                WITH UNIQUE KEY PRIMARY_KEY COMPONENTS X1 X3.


DATA(ITAB3_NEW) = CORRESPONDING TYP_ITAB3_NEW(
                       BASE ( CORRESPONDING TYP_ITAB3_NEW( ITAB1 ) ) ITAB2

                                  DISCARDING DUPLICATES ).

 

github.com

 

なお、ABAP 7.42からは、内部テーブルに対してOpen SQLを使用できるようになりましたので、こちらのバージョンを使っている場合は、Open SQLで内部テーブルを処理する方法も検討できます。(In addition, since ABAP 7.42, Open SQL can be used for internal tables, so if you are using this version, you can also consider how to handle internal tables with Open SQL.)

 

Thank you, and Enjoy.

matsukawar