zoaseo 2025. 5. 21. 22:57

반드시 Z로 시작해야한다.

 

 

ABAP 구조 3가지

1. 필드

2. 행

3. 테이블

 

선언 방법

1. 필드 
- 아밥타입 / 데이터타입으로 자리수를 넣어서 선언하는 것
types: slis_list_type(1) type n,
- sy-crow - 가 들어가면 그 구조안에 있는 필드 하나를 가져온 것이다
row_pos        like sy-curow,


2. 행 
- structure로 선언되어있는 구조
types: slis_qinfo_alv type alv_s_qinf,
- begin of     end of 묶어놓으면 행
begin of slis_add_fieldcat,
         fieldname type slis_fieldname,
         web_field type slis_fieldname,
         href_hndl type i,
       end of slis_add_fieldcat.
- 필드가 하나만 들어가는 행도 있다.
types: begin of slis_reprep_communication,
         stop(1) type c,
       end of slis_reprep_communication.
3. 테이블 
- occurs라는 말이 붙으면 무조건 테이블이 된다. (occurs 다음에 0,1,2 들어가는데 숫자랑 상관없이 테이블이 만들어진다고 생각)
types: slis_t_filtered_entries type i occurs 0.
- table of를 붙이면 테이블이다.
DATA: it_scarr TYPE STANDARD TABLE OF t_scarr INITIAL SIZE 0,

부가설명

like : type하고 같이 쓰인다. like c like char (x) 이미 선언되어있는 것만 가져온다. 타입과 자릿수로 직접 선언이 안된다.

types: begin of slis_fieldcat_main.   => 매행이 types로 시작하고 .으로 끝난다.
include type slis_fieldcat_main0.   => 무조건 .으로 끝난다.
include type slis_fieldcat_main1.
types: end of slis_fieldcat_main.

SLIS : ALV를 출력할 때 필요한 구조
DATA로 선언해야 프로그램에서 쓸 수 있다.
TYPES는 구조일뿐이다.


컨트롤 + 쉼표(,) : 주석 처리
컨트롤 + 마침표(.) : 주석 해제

 

*&---------------------------------------------------------------------*
*& Report Z2WEEK_ALV002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z2WEEK_ALV002.

TABLES:     scarr.

TYPE-POOLS: slis.                                 "ALV Declarations

*Data Declaration
*----------------
TYPES: BEGIN OF t_scarr,
  mandt TYPE scarr-mandt,
  carrid TYPE scarr-carrid,
  carrname TYPE scarr-carrname,
  currcode TYPE scarr-currcode,
  url TYPE scarr-url,
 END OF t_scarr.

DATA: it_scarr TYPE STANDARD TABLE OF t_scarr INITIAL SIZE 0,
      wa_scarr TYPE t_scarr.

*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      gd_tab_group TYPE slis_t_sp_group_alv,
      gd_layout    TYPE slis_layout_alv,
      gd_repid     LIKE sy-repid.


DATA : t TYPE slis_t_sp_group_alv .
************************************************************************
*Start-of-selection.
START-OF-SELECTION.

  PERFORM data_retrieval.
  PERFORM build_fieldcatalog.
  PERFORM build_layout.
  PERFORM display_alv_report.


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
FORM build_fieldcatalog.

  fieldcatalog-fieldname   = 'MANDT'.
  fieldcatalog-seltext_m   = 'Client'.
  fieldcatalog-col_pos     = 0.
  fieldcatalog-outputlen   = 10.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'CARRID'.
  fieldcatalog-seltext_m   = 'Airline Code'.
  fieldcatalog-col_pos     = 1.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'CARRNAME'.
  fieldcatalog-seltext_m   = 'Airline name'.
  fieldcatalog-col_pos     = 2.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'CURRCODE'.
  fieldcatalog-seltext_m   = 'Local currency of airline'.
  fieldcatalog-col_pos     = 3.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'URL'.
  fieldcatalog-seltext_m   = 'Airline URL'.
  fieldcatalog-col_pos     = 4.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

ENDFORM.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.

  gd_layout-no_input          = 'X'.
  gd_layout-colwidth_optimize = 'X'.
  gd_layout-zebra = 'X'.
*  gd_layout-info_fieldname =      'LINE_COLOR'.
*  gd_layout-def_status = 'A'.

ENDFORM.                    " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       Display report using ALV grid
*----------------------------------------------------------------------*
FORM display_alv_report.
  gd_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = gd_repid
      is_layout          = gd_layout
      it_fieldcat        = fieldcatalog[]
      i_save             = 'X'
    TABLES
      t_outtab           = it_scarr
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " DISPLAY_ALV_REPORT


*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM data_retrieval.
  DATA: ld_color(1) TYPE c.

  SELECT mandt carrid carrname currcode url
*   UP TO 10 ROWS
    FROM scarr
    INTO TABLE it_scarr.

ENDFORM.                    " DATA_RETRIEVAL