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_C18 ).
  APPEND LS_COMP TO LT_COMP.

  LS_COMP-NAME 'MAKTX'.
  LS_COMP-TYPE CL_ABAP_ELEMDESCR=>GET_C18 ).
  APPEND LS_COMP TO LT_COMP.

  LS_COMP-NAME 'GROES'.
  LS_COMP-TYPE CL_ABAP_ELEMDESCR=>GET_C18 ).
  APPEND LS_COMP TO LT_COMP.

  LS_COMP-NAME 'MEINS'.
  LS_COMP-TYPE CL_ABAP_ELEMDESCR=>GET_C18 ).
  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=>CREATELT_COMP ).
  LO_TABLEDESCR  CL_ABAP_TABLEDESCR=>CREATEP_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.
 

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


 

댓글 없음:

댓글 쓰기

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