ALV 출력
ALV 란 ABAP List Viewer 약자로 ABAP 을 활용하여 리스트 뷰어를 만드는 것
샘플 예제를 통하여서 설명 할 예정 아래 코드 전부 복사 하기
그 외 참고 : SAP 공식 샘플 예제 소스
해당 예재는 SAP MM 모듈에서 많이 사용 하는 구매 오더 테이블임
TABLES: ekko.
TYPE-POOLS: slis. "ALV Declarations
*Data Declaration
*----------------
TYPES: BEGIN OF t_ekko,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
statu TYPE ekpo-statu,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
peinh TYPE ekpo-peinh,
line_color(4) TYPE c, "Used to store row color attributes
END OF t_ekko.
DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_ekko TYPE t_ekko.
*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 = 'EBELN'.
fieldcatalog-seltext_m = 'Purchase Order'.
fieldcatalog-col_pos = 0.
fieldcatalog-outputlen = 10.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'EBELP'.
fieldcatalog-seltext_m = 'PO Item'.
fieldcatalog-col_pos = 1.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'STATU'.
fieldcatalog-seltext_m = 'Status'.
fieldcatalog-col_pos = 2.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'AEDAT'.
fieldcatalog-seltext_m = 'Item change date'.
fieldcatalog-col_pos = 3.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MATNR'.
fieldcatalog-seltext_m = 'Material Number'.
fieldcatalog-col_pos = 4.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MENGE'.
fieldcatalog-seltext_m = 'PO quantity'.
fieldcatalog-col_pos = 5.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MEINS'.
fieldcatalog-seltext_m = 'Order Unit'.
fieldcatalog-col_pos = 6.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'NETPR'.
fieldcatalog-seltext_m = 'Net Price'.
fieldcatalog-col_pos = 7.
fieldcatalog-outputlen = 15.
fieldcatalog-datatype = 'CURR'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'PEINH'.
fieldcatalog-seltext_m = 'Price Unit'.
fieldcatalog-col_pos = 8.
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_ekko
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 ebeln ebelp statu aedat matnr menge meins netpr peinh
UP TO 10 ROWS
FROM ekpo
INTO TABLE it_ekko.
ENDFORM. " DATA_RETRIEVAL
예제 코드를 복사 하셨으면, 다음 과 같이 화면에 복사 붙여 넣기 하면됨


Tables 설명
Tables 명은 ekko 가 아닌 SCARR 로 바꾸기
Tables 코드를 하나씩 보면 먼저 우리가 테이블 구조를 만들어서 넣어 도 되지만 샘플로 만들어 져있는 SCARR 이라는 테이블을 사용 하여서 넣기 위함
Tables 는 ABAP 에서 딕셔너리에 만들어져있는 테이블,뷰,구조를 가져다가 사용 한다는 뜻

테이블 접속 방법은 검색에 se11 들어가서 SCARR Table Display 하면 해당 스키마 보임
TYPE-POOLS 설명
ABAP Object 중 하나인 TPYE-POOLS 는 TYPE Group 으로 확인 가능 한데
선언 한 이유는 만들어 진 스키마를 그대로 사용 하여서 진행 하겠다 라는 뜻임
예를 들어 개발자 들끼리 서로 스키마가 다르거나 선언 type 유형 및 입력 범위가 다르다고 하면
굉장히 유지보수 측면에서 관리가 힘들며, 사용자 또한 불편한일들이 잦아 지게 되어
공통 템플릿을 선언하고 진행 하겠다 라는 뜻임

slis 값에 마우스로 더블 클릭 하여 접속

스키마 선언 한것을 분석 하기전에 ABAP ALV 구조를 한번 잡고 설명을 이어감
필드
하나의 공간에 값을 넣는 것
행
한줄의 공간에 하나씩 넣어 주는것
테이블
여러행을 넣을 수 있는 것
3가지 구조로 이뤄 져있다 코드를 돌아가서 설명 함

먼저 필드 선언 types 로 시작 하며 type 오른쪽에 있는 구조로 왼쪽이름으로 만듬
n = numc 라는 약자로 ex 001
slis_list_type(1) = slis_list_type 라는 이름에 입력 범위는 1 임

테이블을 불러와 선언 할수 도있음
alv_s_qinf 값을 더블 클릭 하면 스키마가 나옴

Structure 는 행이라는 의미이며 해당 스키마를 가지고 와서
slis_t_qinfo_alv type slis_qinfo_alv occurs 0.
occurs 는 테이블로 선언 라는 의미 임