[9기 SAP방] 챗GPT를 활용하여 INNERJOIN 테이블 ALV만들기

alv아닌 inner join, write 실행 소스코드



REPORT ZINNER_JOIN_EXAMPLE.

TYPES: BEGIN OF ty_result,
         carrid TYPE sflight-carrid,
         connid TYPE sflight-connid,
         fldate TYPE sflight-fldate,
         price TYPE sflight-price,
         url type scarr-url,
       END OF ty_result.

DATA: lt_result TYPE TABLE OF ty_result,
      ls_result TYPE ty_result.

START-OF-SELECTION.

  SELECT s1~carrid,
         s1~connid,
         s1~fldate,
         s1~price,
         s2~url,
    INTO CORRESPONDING FIELDS OF TABLE lt_result
    FROM sflight AS s1
    INNER JOIN scarr AS s2
    ON s1~carrid = s2~carrid.
    "WHERE s1~fldate BETWEEN '20240101' AND '20240131'. " 필요한 조건을 여기에 추가하세요

  LOOP AT lt_result INTO ls_result.
    WRITE: / ls_result-carrid, ls_result-connid, 
               ls_result-fldate, ls_result-price,ls_result-url.
  ENDLOOP.

END-OF-SELECTION.


챗GPT로 SFLIGHT와 SCARR 테이블을 INNER JOIN하는 ALV 프로그램 소스코드 작성해줘

라고 요청했더니 아래와 같이 답을 주었습니다.

이대로 실행했으나 에러가 있었습니다.

반복되는 에러속에 필드카다로그를 만들어도 보고 하면서 결국 답을 찾았습니다.

Internal table로는 alv inner join은 안되고 join한 structure 를 만들고, 테이블도 만들어야

alv로 inner join으로 가능하였습니다.


방법은


1 . inner join할 스트럭쳐를 만든다.

  1. inner join할 테이블을 만든다.

  2. 소스코드를 복사해서 붙이다.

  3. 스크린을 만든다.

  4. 실행, 디버깅으로 학습한다.



테이블 만드는법


스크린 만드는법


상태창 기능키 작성


스크린 페인터에서 cont0100 컨테이너 만들기

위 처럼 테이블과 스크린, 그리고 스크린페이터에서 화면 컨테이너 cont0100까지 만들었으면

소스코드 복사해서 붙이면 실행가능합니다.

자세한 부분은 제가 시간이 안되서 오늘 저녁 zoom미팅에서 다시 실습해보겠습니다.


*&---------------------------------------------------------------------*
*& Report  ZGPTERS_09_UP_08
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZGPTERS_09_UP_08.

TABLES : SSCRFIELDS.


"ALV
DATA : GO_ALV TYPE REF TO CL_GUI_ALV_GRID. "ALV
DATA : GO_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER. "DETAL

DATA : GS_LAYOUT TYPE LVC_S_LAYO. "LAYOUT

DATA : GT_FCAT TYPE LVC_T_FCAT. "FIELD OPTION
DATA : GS_VARIANT TYPE DISVARIANT. "DEFAULT, USER VARIANCT
DATA: L_ABAP_SOURCE(132) TYPE C.  " 너비를 132자로 확장


DATA : OK_CODE TYPE SY-UCOMM.

*DATA : GT_ITAB LIKE SFLIGHT OCCURS 0
*      WITH HEADER LINE. "ITAB AND STRUCT
DATA : GT_ITAB LIKE ZSCARR_JOIN OCCURS 0
WITH HEADER LINE. "ITAB AND STRUCT
*WORK AREA   "LVC 필트카다로그 펑션사용시 LIKE사용해야함




*
*TYPES: BEGIN OF ty_result,
*         carrid TYPE sflight-carrid,
*         connid TYPE sflight-connid,
*         fldate TYPE sflight-fldate,
*         price TYPE sflight-price,
*  URL TYPE SCARR-URL,
*       END OF ty_result.
*
*DATA: GT_ITAB TYPE TABLE OF ty_result,
*      GS_ITAB TYPE ty_result.




START-OF-SELECTION.

  SELECT s1~carrid
         s1~connid
         s1~fldate
         s1~price
    S2~URL
    INTO CORRESPONDING FIELDS OF TABLE Gt_ITAB
*    INTO TABLE GT_ITAB
    FROM sflight AS s1
    INNER JOIN scarr AS s2
    ON s1~carrid = s2~carrid.


IF GT_ITAB[] IS INITIAL.
  MESSAGE S001(ZABAP) WITH 'NODATA'.
  ELSE.
*    CL_DEMO_OUTPUT=>DISPLAY( LT_ITAB[] ).

    CALL SCREEN 100.

  ENDIF.
*call SCREEN 100.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'PBO0100'.
  SET TITLEBAR 'PBO0100'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

*    IF 'BACK' OR 'EXIT' OR 'CANC'.
*
*      LEAVE TO SCREEN 0.
*
*    ENDIF.

      CASE SY-UCOMM.
    WHEN 'BACK' OR 'CANC'.
*      IF SY-CALLD IS INITIAL.
        LEAVE TO SCREEN 0.
*      ELSE.
*        LEAVE PROGRAM.
*      ENDIF.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
  CLEAR SY-UCOMM.

ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  ALV_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE ALV_0100 OUTPUT.


DATA: LT_FCAT TYPE SLIS_T_FIELDCAT_ALV.

  "SCREED PBO

  "CONTAINER SETTING
  CREATE OBJECT GO_CONTAINER
  EXPORTING
    CONTAINER_NAME = 'CON0100'.

  "ALV GRID SETTING
  CREATE OBJECT GO_ALV
  EXPORTING
    I_PARENT = GO_CONTAINER.



  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
   EXPORTING
     I_PROGRAM_NAME               = SY-REPID
     I_INTERNAL_TABNAME           = 'GT_ITAB'
     I_STRUCTURE_NAME             = 'ZSCARR_JOIN_S'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
     I_INCLNAME                   = SY-REPID
*     I_BYPASSING_BUFFER           =
*     I_BUFFER_ACTIVE              =
    CHANGING
      CT_FIELDCAT                  = LT_FCAT[]
*   EXCEPTIONS
*     INCONSISTENT_INTERFACE       = 1
*     PROGRAM_ERROR                = 2
*     OTHERS                       = 3
            .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


 CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
   EXPORTING
     IT_FIELDCAT_ALV       = LT_FCAT
*    IT_SORT_ALV           =
*    IT_FILTER_ALV         =
*    IS_LAYOUT_ALV         =
  IMPORTING
    ET_FIELDCAT_LVC       = GT_FCAT
*    ET_SORT_LVC           =
*    ET_FILTER_LVC         =
*    ES_LAYOUT_LVC         =
   TABLES
     IT_DATA               = GT_ITAB
*     IT_DATA               = lt_result
*  EXCEPTIONS
*    IT_DATA_MISSING       = 1
*    OTHERS                = 2
           .
 IF SY-SUBRC <> 0.
* Implement suitable error handling here
 ENDIF.

  "ALV LAYOUT
  GS_LAYOUT-SEL_MODE = 'A'.


"ALV PRINT

CALL METHOD GO_ALV->SET_TABLE_FOR_FIRST_DISPLAY
 EXPORTING
*    I_BUFFER_ACTIVE               =
*    I_BYPASSING_BUFFER            =
*    I_CONSISTENCY_CHECK           =
*    I_STRUCTURE_NAME              =
    IS_VARIANT                    = GS_VARIANT
    I_SAVE                        = 'A'
    I_DEFAULT                     = 'X'
    IS_LAYOUT                     = GS_LAYOUt
*    IS_PRINT                      =
*    IT_SPECIAL_GROUPS             =
*    IT_TOOLBAR_EXCLUDING          =
*    IT_HYPERLINK                  =
*    IT_ALV_GRAPHICS               =
*    IT_EXCEPT_QINFO               =
*    IR_SALV_ADAPTER               =
  CHANGING
    IT_OUTTAB                     = GT_ITAB[]
    IT_FIELDCATALOG               = GT_FCAT[]
*    IT_SORT                       =
*    IT_FILTER                     =
*  EXCEPTIONS
*    INVALID_PARAMETER_COMBINATION = 1
*    PROGRAM_ERROR                 = 2
*    TOO_MANY_LINES                = 3
*    others                        = 4
        .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.


ENDMODULE.                 " ALV_0100  OUTPUT


이상입니다.

자세한 부분은 제가 시간이 안되서 오늘 저녁 zoom미팅에서 다시 실습해보겠습니다.


#9기 SAP방

4

(채용) 유튜브 PD, 마케터, AI엔지니어, 디자이너

지피터스의 콘텐츠 플라이휠로 고속 성장할 팀원을 찾습니다!

👉 이 게시글도 읽어보세요