2026년 1월 14일 수요일

[ABAP]_인터널 테이블을 가변 필드로 사용하기

  FIELD-SYMBOLS: <FS_TABLE> TYPE STANDARD TABLE,
                 <FS_WA>    TYPE ANY,
                 <FS_FIELD> TYPE ANY.

  DATA : LO_STRUCTDESCR  TYPE REF TO CL_ABAP_STRUCTDESCR,
         LO_TABLEDESCR   TYPE REF TO CL_ABAP_TABLEDESCR,
         LT_COMP         TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE,
         LS_COMP         TYPE CL_ABAP_STRUCTDESCR=>COMPONENT,
         LT_DATA         TYPE REF TO DATA,
         LS_DATA         TYPE REF TO DATA.

  DATA : BEGIN OF LT_MARA OCCURS 0,
         MATNR      LIKE MARA-MATNR,
         MAKTX      LIKE MAKT-MAKTX,
         GROES      LIKE MARA-GROES,
         MEINS      LIKE MARA-MEINS,
         END OF LT_MARA.

*  "사용될 필드를 선언
  LS_COMP-NAME = 'MATNR'.
  LS_COMP-TYPE = CL_ABAP_ELEMDESCR=>GET_C( 18 ).
  APPEND LS_COMP TO LT_COMP.

  LS_COMP-NAME = 'MAKTX'.
  LS_COMP-TYPE = CL_ABAP_ELEMDESCR=>GET_C( 18 ).
  APPEND LS_COMP TO LT_COMP.

  LS_COMP-NAME = 'GROES'.
  LS_COMP-TYPE = CL_ABAP_ELEMDESCR=>GET_C( 18 ).
  APPEND LS_COMP TO LT_COMP.

  LS_COMP-NAME = 'MEINS'.
  LS_COMP-TYPE = CL_ABAP_ELEMDESCR=>GET_C( 18 ).
  APPEND LS_COMP TO LT_COMP.

  SELECT A~MATNR A~GROES A~MEINS B~MAKTX
    INTO CORRESPONDING FIELDS OF TABLE LT_MARA
    FROM MARA AS A
    JOIN MAKT AS B
      ON A~MATNR EQ B~MATNR
     AND B~SPRAS EQ 'E'
    UP TO 200 ROWS.

" 3. 구조 타입 및 테이블 타입 생성
  LO_STRUCTDESCR = CL_ABAP_STRUCTDESCR=>CREATE( LT_COMP ).
  LO_TABLEDESCR  = CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = LO_STRUCTDESCR ).

*"선언된 구조체를 LT_DATA에 ASSIGN 처리
  CREATE DATA LT_DATA TYPE HANDLE LO_TABLEDESCR.
  ASSIGN LT_DATA->* TO <FS_TABLE>.

  LOOP AT LT_MARA.
    CREATE DATA LS_DATA TYPE HANDLE LO_STRUCTDESCR.
    ASSIGN LS_DATA->* TO <FS_WA>.

*   "LT_DATA에 ASSIGN된 필드를 찾아 데이터를 입력 처리함.
    ASSIGN COMPONENT 'MATNR' OF STRUCTURE <FS_WA> TO <FS_FIELD>.
    <FS_FIELD> = LT_MARA-MATNR.

    ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <FS_WA> TO <FS_FIELD>.
    <FS_FIELD> = LT_MARA-MAKTX.

    ASSIGN COMPONENT 'GROES' OF STRUCTURE <FS_WA> TO <FS_FIELD>.
    <FS_FIELD> = LT_MARA-GROES.

    ASSIGN COMPONENT 'MEINS' OF STRUCTURE <FS_WA> TO <FS_FIELD>.
    <FS_FIELD> = LT_MARA-MEINS.

    APPEND <FS_WA> TO <FS_TABLE>.
  ENDLOOP.

  BREAK-POINT.
 

실행으로 생성된 인터널 테이블 구조


 

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.