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할 스트럭쳐를 만든다.
inner join할 테이블을 만든다.
소스코드를 복사해서 붙이다.
스크린을 만든다.
실행, 디버깅으로 학습한다.
테이블 만드는법
스크린 만드는법
상태창 기능키 작성
스크린 페인터에서 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방