최초 작성일: 23년 2월 28일
최종 작성일: 23년 3월 31일
목적: ALV를 만들고 출력하기!
아밥 프로그램에서 AVL는 엑셀 과 비슷함
(범용적이고 데이터를 보기 쉬움)
ALV(abap list viewer)화면은 3가지 방식으로 만들 수 있음(구현방식)
- FUNCTION 기반의 ALV : object기반으로 alv를 만든다. 현재는 쓰지 않으나 Function module이라고하는 오브젝트를 기반으로 alv 형태로 데이터 출력해줌. 업데이트 되지 않는 버전을 사용하면 function alv를 쓸것
- CLASS ALV : class 기반이며 현재 범용적으로 사용하고 있는 alv임. 5단계
- SIMPLE ALV: class기반이며 class에 비해 단계가 심플하다. 1~2 단계
class alv와 simple alv의 차이점
두 alv 구현방식은 종류만 다른데
class는 5가지 과정을 거쳐서 alv를 만들 수 있으나 simple의 경우에는 2~3단계만 거쳐도 alv를 생성할 수 있음.
OOP (Object-oriented programming)
객체 기반의 프로그래밍: 클래스 라고 하는 것 자체가 범용적인 컨셉인데 직관적으로 설명하면 오브젝트들 중 하나님.
OOP라고 하면 클래스 기반의 프로그램이다 라고 이해하면됨.
오브젝트(=class)는 data(attribute)와 function(method)이 하나로 묶여 구성된 단위이다.
계산식을 예로 들면 1*2 = 3 이라고 하때 1,2,3이라는 data와 ' * '라는 fuctnion이 존재한다.
data선언 (클래스에서는 이걸 attribute라고 부름)
data: gv_v1 type i
function ( 클래스에서는 이걸 method, 함수라고 부름. 코딩 할때 마다 이걸 적는게 아니고 함수화 해서 재사용하는 것)
gv_sum = gv_v1 + gv_v2
fucntion으로 만들어서 재사용한다.
(재사용)
CLASS ALV만드는 방법
step1. 변수 선언
*class
*class 만들기 위한 선행 작업
*전역변수
INCLUDE ZCLASS_TEST_TOP.
*로컬 클래스
INCLUDE ZCLASS_TEST_cls.
*함수
INCLUDE ZCLASS_TEST_F01.
*PAI
INCLUDE ZCLASS_TEST_l01.
*PBO
INCLUDE ZCLASS_TEST_001.
[ABAP] INCLUDE 프로그램으로 전체프.. : 네이버블로그 (naver.com) -> include관련해서 이거 꼭꼭 참고하기
step 2. 구조
객체변수 접근 방법
객체 변수 -> 필드
객체 변수 -> method
객체 변수 -> 테이블
선언부
CLASS LO_CLASS DEFINITION.
PUBLIC SECTION.
ENDCLASS.
구현부
CLASS LO_CLASS IMPLEMENTATION.
실제 로직 기술
ENDCLASS.
step 3. ALV CLASS의 파라미터 (ABAP Class Parameter 값 전달 기법)
파라미터란? 입력값, 출력값으로 사용하는 필드를 의미함.
예를들어 import parameter, export parameter.
step 4. ABAP CLASS 접근제한 영역
하나의 CLASS내에 선언된 변수, 구조체, 인터널 테이블 등의 데이터 공간에 접근영역을 제한하는 것을 말함.
- PUBLICE SECTION : all class 내에서 접근 가능
- PRIVATE SECTION: 현재 class 내에서 접근 가능
*구현부
CLASS LO_CLASS DEFINITION.
PUBLIC SECTION.
DATA: GV_V1 TYPE I,
GV_V2 TYPE I,
GV_V3 TYPE I.
METHODS: SUM_DATA IMPORTING IV_V1 TYPE I
IV_V2 TYPE I
EXPORTING EV_V1 TYPE I.
ENDCLASS.
*실행부
CLASS LO_CLASS IMPLEMENTATION.
METHOD SUM_DATA.
*덧셈의 로직
EV_V1 = IV_V1 + IV_V2.
ENDMETHOD.
ENDCLASS.
클래스 선언시 데이터 TYPE은 무조건 ' TYPE REF TO'가 되어야 함.
ALV GRID 이론
선행 조건
1) 스크린을 만들어야 함
스크린안에 격자무늬는 인터널 테이블임(결론적으로 인터널 테이블을 화면에 보여줘야함)
따라서 스크린과 인터널 테이블을 만들어야 ALV를 만들 수 있음
2) ALV GRID 생성 순서 (이벤트 기반으로)
PBO = 화면을 이쁘게 만든다. 최초에 화면을 출력하는 로직을 설계하는 모듈
PAI = 출력된 화면에서 사용자의 이벤트를 수행하는 모듈
PAI를 통해서 새로운 윈도우 화면을 열었다면 새로운 PBO를 태운거임
개발자 입장에서는 사인(버튼의 기능을 명확하게 구분해줘야함)
SY-UCOMM 변수
모든 버튼에는 고유의 Valueable이 있으며 그 valuable을 확인하는 방법은 code기재하는 곳에 '/h'를 입력후 엔터를 누른다음에 값을 확인하고자 하는 버튼을 누른후 sy-ucomm을 입력후 활성화하면 해당 버튼에 할당된 것을 확인할 수 있음
alv class는 이미 있는 걸 가져다 쓰는 거임
class : CL_GUI_ALV_GRID
글로벌 클래스이기때문에 어디에든 쓸 수 있음
- T- CODE: SE24
- class: CL_GUI_ALV_GRID
- ALV생성시 사용되는 기본 METHOD
- Constructor
- ALV GRID Control Instance 생성
- SET_table_for_first_display
- Control 내부에서 Internal Table Data를 보여준다
- refresh_table_display
- Control 내부에서 Display된 Data들의 변경이 있을 시 사용
- 사용자가 작업하여 업데이트 사항이 있는 경우 갱신해주는 method
- Constructor
ALV GRID에 대한 이해
필드 명 = 메타 데이터 | 회사코드 | 계정과목표 | G/L 계정 | 계정 통화 |
Class : ALV container - ALV 생성시 사용되는 기본 METHOD
SAP ABAP Container란, SAP Screen(화면)의 특정 영역을 그릴 때, 사용하게 되는 클래스를 말함.
Container 영역을 설정하는 이유는 사용자 입력 field를 생성하거나 alv grid를 출력하기 위한 목적으로 사용하고 있음
container는 크게 4가지로 사용가능함. continer도 전부 클래스로 이뤄져 있음. container를 쓰려면 create class로 class를 만들어줘야함.
1. CL_GUI_DOCKING _CONTAINER
2.CL_GUI_CUSTOM_CONTAINER
painter를 많이 사용하는데
painter와 아밥 소스 코드의 연결 지점은
CREATE OBJECT GO_CUSTOM_CON
EXPORTING
CONTAINER_NAME = 'CON100'.
CREATE OBJECT LO_OBJECT
EXPORTING
I_PARENT = GO_CUSTOME_CON.
3.CL_GUI_DIALOG_BOX_CONTAINER
4. CL_GUI_SPLITTER_CONTAINER
ALV Grid 데이터 포맷에 적용할 수 있는 기능
- layout : 인터널 테이블 전체
- T-CODE: SE11
- LVC_S_LAYO
- S:STRUCTURE
- LVC_S_LAYO
- T-CODE: SE11
- field category : 각각의 필드
- T-CODE: SE11
- LVC_T_FCAT
- LVC_S_FCAT
- UI_FUNCTIONS
- T-CODE: SE11
스크린 안에는 Container를 만들어야 함
container, 즉 영역 지정
container도 전부 클래스로 이루어져있음.
container 종류
docking container
custom container -gui 기반임
dialog container
spliter container
screnn painter와 아밥 소스코드의 연결방법은
CREATE OBJECT GO_CUSTOM_CON
EXPORTING
CONTAINER_NAME = 'CON100'.
CREATE OBJECT LO_OBJECT
EXPORTING
I_PARENT = GO_CUSTOM_CON.
alv를 뿌려주고 갱신하는 거외에 인터널 테이블을 화면에 뿌려주는 경우
나눠서 보면
필드명이 필드 라벨로 되어 있고 마스터 데이터임
alv에서는 레이아웃이랑 피드 카테고리 라는 두가지 개념이 있음
레이라웃은 인터널 테이블 전체
필드 카테고리는 필드 각각임
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PBO_0100'. "버튼 활성화
SET TITLEBAR 'BPO_0100'. " ALV 제목
ENDMODULE. " STATUS_0100 OUTPUT
PBO 화면 만들기
1.
*----------------------------------------------------------------------*
***INCLUDE ZEDU17_ALV_FRONT_PBO_0100O01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module PBO_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_0100 OUTPUT.
*1. ALV Container 생성(인스턴스 메모리에 할당)
*Construct 메서드 자동 호출
CREATE OBJECT GO_CUSTOM_CON
EXPORTING
CONTAINER_NAME = 'CON100'.
* 2. ALV Grid 생성 (인스턴스 메모리에 할당) container안에 alv가 들어가서 연결하는 작업이라고 생각하면 될듯
CREATE OBJECT go_alv
EXPORTING
i_parent = go_custom_con.
*3. ALV Layout
*4. ALV Field catalog
*5. ALV button Toolbar
*6. ALV Internal Table 화면에 출력
ENDMODULE. " PBO_0100 OUTPUT
2. 스크린페인터로 이동하기
ALV Field catalog 생
*----------------------------------------------------------------------*
***INCLUDE ZEDU17_ALV_FRONT_PBO_0100O01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module PBO_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_0100 OUTPUT.
*1. ALV Container 생성(인스턴스 메모리에 할당)
*Construct 메서드 자동 호출
CREATE OBJECT GO_CUSTOM_CON
EXPORTING
CONTAINER_NAME = 'CON100'.
* 2. ALV Grid 생성 (인스턴스 메모리에 할당) container안에 alv가 들어가서 연결하는 작업이라고 생각하면 될듯
CREATE OBJECT go_alv
EXPORTING
i_parent = go_custom_con."container 연결
*3. ALV Layout
GS_LAYOUT-SEL_MODE = 'A'. " 행 선택 버튼
GS_LAYOUT-ZEBRA = 'X'. " 격자무늬
GS_LAYOUT-EDIT = 'X'. " 수정 모드
GS_LAYOUT-NO_TOOLBAR = 'X'. " 툴바 제거
GS_LAYOUT-TOTALS_BEF ='X'. " 합계를 최상단에 위치
*4. ALV Field catalog : 각각의 필드에 대해 제공하는 옵셥이 있음(그래서 테이블형태로 받는다) (=LVC_T_FCAT).
* FIELDNAME, REF_TABLE, REF_FIELD, EMPHASIZE, SCR_TEXT
PERFORM APPED_FCAT USING: 'MANDT' 'SKAT''MANDT' 'C300''클라이언트',
'KTOPL' 'SKAT''KTOPL' '' '계정과목표',
'TXT20' 'SKAT' 'TXT20' '' 'G/L계정내역',
'TXT50' 'SKAT' 'TXT50' '' 'G/L 계정 설명',
'MCOD1' 'SKAT' 'MCOD1' 'C800' '검색어'.
*5. ALV button Toolbar
*6. ALV Internal Table 화면에 출력
ENDMODULE. " PBO_0100 OUTPUT
PERFORM 생성
*----------------------------------------------------------------------*
***INCLUDE ZEDU17_ALV_FRONT_APPED_FCATF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form APPED_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0036 text
* -->P_0037 text
* -->P_0038 text
*----------------------------------------------------------------------*
FORM APPED_FCAT USING VALUE(P_0036)
VALUE(P_0037)
VALUE(P_0038).
ENDFORM. " APPED_FCAT
FORM APPED_FCAT USING VALUE(P_0036)"필드명
VALUE(P_0037)"참조테이블
VALUE(P_0038)."COLOR
DATA: ls_fcat TYPE lvc_s_fcat .
ls_fcat-fieldname = p_0036.
ls_fcat-ref_table = p_0037.
ls_fcat-color = p_0038.
ls_fcat-scrtext_l = ls_fcat-scrtext_s = ls_fcat-scrtext_m = p_0052.
ENDFORM.
*----------------------------------------------------------------------*
***INCLUDE ZEDU17_ALV_FRONT_PBO_0100O01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module PBO_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_0100 OUTPUT.
*1. ALV Container 생성(인스턴스 메모리에 할당)
*Construct 메서드 자동 호출
CREATE OBJECT GO_CUSTOM_CON
EXPORTING
CONTAINER_NAME = 'CON100'.
* 2. ALV Grid 생성 (인스턴스 메모리에 할당) container안에 alv가 들어가서 연결하는 작업이라고 생각하면 될듯
CREATE OBJECT go_alv
EXPORTING
i_parent = go_custom_con."container 연결
*3. ALV Layout
GS_LAYOUT-SEL_MODE = 'A'. " 행 선택 버튼
GS_LAYOUT-ZEBRA = 'X'. " 격자무늬
GS_LAYOUT-EDIT = 'X'. " 수정 모드
GS_LAYOUT-NO_TOOLBAR = 'X'. " 툴바 제거
GS_LAYOUT-TOTALS_BEF ='X'. " 합계를 최상단에 위치
*4. ALV Field catalog : 각각의 필드에 대해 제공하는 옵셥이 있음(그래서 테이블형태로 받는다) (=LVC_T_FCAT).
* FIELDNAME, REF_TABLE, REF_FIELD, EMPHASIZE, SCR_TEXT
PERFORM APPED_FCAT USING: 'MANDT' 'SKAT''MANDT' 'C300''클라이언트',
'KTOPL' 'SKAT''KTOPL' '' '계정과목표',
'TXT20' 'SKAT' 'TXT20' '' 'G/L계정내역',
'TXT50' 'SKAT' 'TXT50' '' 'G/L 계정 설명',
'MCOD1' 'SKAT' 'MCOD1' 'C800' '검색어'.
*5. ALV button Toolbar
*6. ALV Internal Table 화면에 출력
CALL METHOD GO_ALV->SET_TABLE_FOR_FIRST_DISPLAY
* EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
* IS_LAYOUT =
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB =
* IT_FIELDCATALOG =
* IT_SORT =
* IT_FILTER =
* EXCEPTIONS
* INVALID_PARAMETER_COMBINATION = 1
* PROGRAM_ERROR = 2
* TOO_MANY_LINES = 3
* OTHERS = 4
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " PBO_0100 OUTPU
*----------------------------------------------------------------------*
***INCLUDE ZEDU17_ALV_FRONT_PBO_0100O01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module PBO_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_0100 OUTPUT.
*1. ALV Container 생성(인스턴스 메모리에 할당)
*Construct 메서드 자동 호출
CREATE OBJECT GO_CUSTOM_CON
EXPORTING
CONTAINER_NAME = 'CON100'.
* 2. ALV Grid 생성 (인스턴스 메모리에 할당) container안에 alv가 들어가서 연결하는 작업이라고 생각하면 될듯
CREATE OBJECT go_alv
EXPORTING
i_parent = go_custom_con."container 연결
*3. ALV Layout
GS_LAYOUT-SEL_MODE = 'A'. " 행 선택 버튼
GS_LAYOUT-ZEBRA = 'X'. " 격자무늬
GS_LAYOUT-EDIT = 'X'. " 수정 모드
GS_LAYOUT-NO_TOOLBAR = 'X'. " 툴바 제거
GS_LAYOUT-TOTALS_BEF ='X'. " 합계를 최상단에 위치
*4. ALV Field catalog : 각각의 필드에 대해 제공하는 옵셥이 있음(그래서 테이블형태로 받는다) (=LVC_T_FCAT).
* FIELDNAME, REF_TABLE, REF_FIELD, EMPHASIZE, SCR_TEXT
PERFORM APPED_FCAT USING: 'MANDT' 'SKAT''MANDT' 'C300''클라이언트',
'KTOPL' 'SKAT''KTOPL' '' '계정과목표',
'TXT20' 'SKAT' 'TXT20' '' 'G/L계정내역',
'TXT50' 'SKAT' 'TXT50' '' 'G/L 계정 설명',
'MCOD1' 'SKAT' 'MCOD1' 'C800' '검색어'.
*5. ALV button Toolbar
*6. ALV Internal Table 화면에 출력 -> 출력 시점에 alv option이 적용된다
CALL METHOD GO_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_VARIANT = gs_variant "ALV Variant
I_SAVE = 'A' "ALV Variant 저장기능 활성(, user specific)
I_DEFAULT = 'X' "전체 사용자 variant
IS_LAYOUT = gs_layout " ALV LAYOUT
IT_TOOLBAR_EXCLUDING = gs_toolbar "ALV TOOLBAR
CHANGING
IT_OUTTAB = gt_itab "Internal table
IT_FIELDCATALOG = gt_fcat "field catalog
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " PBO_0100 OUTPUT
후에 활성화 하기
MODULE USER_COMMAND_0100 INPUT.
MODULE USER_COMMAND_0100 INPUT.
GV_OKCODE = SY-UCOMM.
CASE GV_OKCODE.
WHEN 'BACK' OR 'CANC' OR 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. "USER_COMMAND_0100 INPUT
'SAP스터디 > ABAP 스터디 23기_LV2' 카테고리의 다른 글
[ABAP LV2] LESSON01. (0) | 2023.02.19 |
---|---|
진도표 (0) | 2023.02.18 |