ALV
- ABAP List Viewer
- 리스트 화면에 데이터 조회
- 조회된 데이터 수정/변경
* ALV grid control
Screen Painter를 이용해 ALV 영역 지정
스크린 영역과 ALV를 연결하는 SAP Container Control이 반드시 존재 해야 함
#### * Container ![](https://images.velog.io/images/1000nion/post/cd8bf4a0-33c2-4c47-b4f8-ea676be7eede/image.png)SAP Instance를 물리적으로 화면에 보이게 하려면 Screen과 ALV GRID Control의 연결고리 역할을 하는 Container Control이 반드시 존재 해야 함
Custom container,Dialog Box Container, Splitter Container 등이 있음
#### * Field CatalogLVC_T_FCAT TYPE의 Table 구조
ALV는 Field Catalog 정보를 저장하는 internal Table을 이용해 필드 타입 인식
ABAP Dictionary를 이용한 생성
수동으로 구성하여 생성
SET_TABLE_FOR_FIRST_DISPLAY METHOD의 I_STRUCTURE_NAME PARAMETER 사용
실습
[실행 화면]
순번을 입력하고 실행하면
ALV로 리스트를 출력해주는 프로그램을 만들어본다. 이때 ALV 구조는 필드 카탈로그 사용해 수동으로 구성한다. ALV 필드정렬과 레이아웃도 로직으로 구현해 ALV 제어도 해본다.
[프로그램 로직]
INCLUDE ZS1D11_028_TOP . " Global Data
INCLUDE ZS1D11_028_O01 . " PBO-Modules
INCLUDE ZS1D11_028_I01 . " PAI-Modules
INCLUDE ZS1D11_028_F01 . " FORM-Routines
INITIALIZATION.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM select_data.
END-OF-SELECTION.
CALL SCREEN 100.
<TOP>
REPORT zs1d11_028 MESSAGE-ID zm11.
TABLES: zs1d11t_01.
DATA: ok_code TYPE sy-ucomm,
gs_tab TYPE zs1d11t_01,
gt_tab TYPE TABLE OF zs1d11t_01.
"alv관련 데이터 오브젝트
DATA: g_alv TYPE REF TO cl_gui_alv_grid,
g_custom_con TYPE REF TO cl_gui_custom_container.
DATA: gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat, "필드 카탈로그
gs_layo TYPE lvc_s_layo, "레이아웃 옵션
gs_sort TYPE lvc_s_sort, "정렬
gt_sort TYPE lvc_t_sort,
gs_functions TYPE ui_functions.
SELECT-OPTIONS s_seqnr FOR zs1d11t_01-seqnr.
실행하면 순번값을 From ~ to 범위로 입력 할수 있는 선택 창은 SELECT-OPTIONS로 생성해준다. 이때 FOR 뒤에오는 테이블은 TABLES로 선언이 되어있어야 한다.
<화면 100>
레이아웃
에서 컨테이너를 그려준다.
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE SET_ALV.
PROCESS AFTER INPUT.
MODULE EXIT AT EXIT-COMMAND.
FIELD OK_CODE MODULE USER_COMMAND_0100 ON INPUT.
<PBO>
MODULE status_0100 OUTPUT.
SET PF-STATUS 'S100'.
SET TITLEBAR 'S100'.
ENDMODULE.
MODULE set_alv OUTPUT.
"PBO 모듈이 실행될때마다 실행되면 안되므로 한번만 실행되도록 제어함
"오브젝트 만들어져있는데 계속 만들면 오류나기 때문
CHECK g_custom_con IS INITIAL.
"화면 100에 생성한 컨테이너 참조해 오브젝트 생성
CREATE OBJECT g_custom_con
EXPORTING
container_name = 'HD_CON'.
"ALV_CON위에서 ALV 오브젝트 생성
CREATE OBJECT g_alv
EXPORTING
i_parent = g_custom_con.
" ALV 구성
PERFORM make_fieldcat. "필드카탈로그 수동 구성
PERFORM sort. "ALV 정렬
PERFORM layo. "ALV 레이아웃
"ALV 출력
CALL METHOD g_alv->set_table_for_first_display "인스턴스명
EXPORTING
* i_structure_name = 'ZS1D11T_01' "ALV의 구조가 ZS1D11T_01테이블의 구조로 실행된다, ALV구조 자동구성
is_layout = gs_layo
CHANGING
it_outtab = gt_tab "INT의 레코드 지칭, 헤더있는 INT선언시 []로 바디 표시
it_fieldcatalog = gt_fieldcat "필드 카탈로그
it_sort = gt_sort "정렬
.
ENDMODULE.
만약 수동으로 필드카탈로그를 구성하는게 아니라 자동으로 테이블 구조와 동일하게 alv를 구성한다고 하면 i_structure_name 주석을 풀고 '테이블 이름'을 입력해주면 테이블과 구조가 동일한 alv로 출력된다.
<PAI>
MODULE exit INPUT.
CASE ok_code.
WHEN 'EXIT' OR' CANC'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
<FORM>
FORM select_data .
SELECT * FROM zs1d11t_01
INTO TABLE gt_tab
WHERE seqnr IN s_seqnr. "복수선택이니까 복수조건 in
ENDFORM.
FORM make_fieldcat .
"ALV 수동구성
gs_fieldcat-fieldname = 'SEQNR'.
gs_fieldcat-coltext = '순번'. "필드헤더 텍스트
gs_fieldcat-just = 'C'. "가운데정렬, L는 왼쪽정렬, R는 오른쪽정렬
gs_fieldcat-key = 'X'. "키값 고정
APPEND gs_fieldcat TO gt_fieldcat. CLEAR: gs_fieldcat.
gs_fieldcat-fieldname = 'TEAM'.
gs_fieldcat-coltext = '조'.
gs_fieldcat-just = 'C'.
APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'NOTE'.
gs_fieldcat-coltext = '비고1'.
gs_fieldcat-just = 'L'.
APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.
ENDFORM.
FORM sort .
"ALV 정렬
"정렬시에 같은값의 셀은 병합되서 나온다.
gs_sort-spos = 1. "정렬할 열 순서
gs_sort-fieldname = 'SEQNR'.
gs_sort-up = 'X'. "오름차순, 내림차순은 DOWN = 'X'
APPEND gs_sort TO gt_sort. CLEAR gs_sort.
gs_sort-spos = 2.
gs_sort-fieldname = 'TEAM'.
gs_sort-up = 'X'. "오름차순, 내림차순은 DOWN = 'X'
APPEND gs_sort TO gt_sort. CLEAR gs_sort.
gs_sort-spos = 3.
gs_sort-fieldname = 'NOTE'.
gs_sort-down = 'X'. "오름차순, 내림차순은 DOWN = 'X'
APPEND gs_sort TO gt_sort. CLEAR gs_sort.
ENDFORM.
FORM layo .
"ALV 레이아웃 설정
gs_layo-zebra = 'X'. "줄무늬
gs_layo-smalltitle = 'X'.
gs_layo-cwidth_opt = 'X'. "너비 최적화
gs_layo-no_merging = 'X'. "셀병합 불가능, 셀의 값이 동일하더라도 셀이 병합되지 않게 하는 기능
ENDFORM.
기본적으로 ALV는 같은 값의 셀은 병합해서 출력한다. 병합하지 않으려면 ALV 제어: 레이아웃구조를 가진 LVC_S_LAYO에서 NO_MERGING이라는 셀병합 불가능 필드를 사용해준다.
'ABAP' 카테고리의 다른 글
ALV 3 (Hotspot) (0) | 2023.02.16 |
---|---|
ALV 2 (이벤트) (0) | 2023.02.16 |
엑셀 업로드 + BDC (0) | 2023.02.16 |
엑셀 업로드 (2) | 2023.02.16 |
BDC 프로그램 (0) | 2023.02.16 |
댓글