[ABAP] 내부 테이블의 특정 항목만을 다른 테이블로 추출(Extract Field Values ​​In Internal Table)

8673 단어 abapSAP
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( ).

좋은 웹페이지 즐겨찾기