최초 작성일: 23.03.31
최종 작성일:
목표: ALV 정복정복정복
1. METHOD 생성 방법
해당 프로그램 생성
선행 작업 1 - 전역변수, 로컬 클래스, 함수, PBO,PAI (Include)
선행 작업 2 - 로컬 클래스 생성
로컬클래스를 전역변수 마냥 자주 활용한다고 하면 프로그램별로 아래
CLASS LO_CLASS DEFINITION DEFERRED.
선행 작업 3- 전역 변수 생성 : 로컬클래스에서 생성한 클래스를 참조로 가져와야
입력값, 출력값 할당하기
선행 작업 4 - 전역변수와 로컬 클래스를 연결 해서 화면에 뿌린다(기준은 전역변수임)
START-OF-SELECTION.
* 1. 클래스 객체 변수 생성 ( = 인스턴스화)
CREATE OBJECT LO_OBJECT. " 클래스에 있는 객체 변수 를 쓰고 싶을 때는 인스턴스를 생성해줘야함
*2. 메서드 호출(= SUM)
CALL METHOD LO_OBJECT->SUM_DATA
EXPORTING
IV_V1 = P_V1
IV_V2 = P_V2
IMPORTING
EV_V1 = GS_SUM.
END-OF-SELECTION.
WRITE: / '결과값 :', gs_sum COLOR 3 ON.
ALV 생성
1.선행 작업 1 - 전역변수, 로컬 클래스, 함수, PBO,PAI (Include)
*전역변수
INCLUDE ZCLASS_TEST_TOP.
*로컬 클래스
INCLUDE ZCLASS_TEST_cls.
*함수
INCLUDE ZCLASS_TEST_F01.
*PAI
INCLUDE ZCLASS_TEST_l01.
*PBO
INCLUDE ZCLASS_TEST_001.
2.선행 작업 2 - screen 생성
전역변수에 CONTAINER, ALV Grid, layout, field catalog 변수 선언하기(BACK END)
*CLASS ALV 변수 선언
DATA: GO_CUSTOM_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER, " CONTAINER
GO_ALV TYPE REF TO CL_GUI_ALV_GRID, "ALV GRID
GS_LAYOUT TYPE LVC_S_LAYO, "LAYOUT
GT_FCAT TYPE LVC_T_FCAT, "FIELD CATALOG
GS_VARIANT TYPE DISVARIANT,"ALV Variant
GT_TOOLBAL TYPE UI_FUNCTION. "ALV 버튼
3. 선행작업 3 - 인터널 테이블 생성 (FRONT END)
*인터널 테이블 선언
DATA: GT_ITAB TYPE TABLE OF SKAT.
*스크린 버튼 변수
DATA: GV_OKCODE TYPE SY-UCOMM.
4. 본작업1 - 로직 생성
REPORT ZEDU01_ABAP17.
*Class
INCLUDE ZEDU01_ABAP17_TOP."전역변수
INCLUDE ZEDU01_ABAP17_CLS."로컬 클래스
INCLUDE ZEDU01_ABAP17_F01. "함수
INCLUDE ZEDU01_ABAP17_I01. "PAI
INCLUDE ZEDU01_ABAP17_001. "PBO
*로직
TABLES SKAT."SELECT OPTION에 FOR절을 위해 해당 FOR절에 있는 테이블을 선언해 줘야함.
SELECTION-SCREEN BEGIN OF BLOCK B1.
SELECT-OPTIONS: S_KTOPL FOR SKAT-KTOPL.
PARAMETERS P_SPRAS TYPE SKAT-SPRAS.
SELECTION-SCREEN END OF BLOCK B1.
5. 본작업 2 - 데이터 베이스에서 데이터 가져오기
START-OF-SELECTION.
*DB TABLE -> INTERNAL TABLE
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB[]
FROM SKAT
WHERE KTOPL IN S_KTOPL AND
P_SPRAS EQ P_SPRAS.
IF GT_ITAB[] IS INITIAL.
MESSAGE S000(ZABAP) WITH '계정 리스트가 없습니다.'.
LEAVE LIST-PROCESSING. "EVENT Program 종류
ENDIF.
END-OF-SELECTION.
call screen 100. "계정 과목을 잘 가져오면 스크린 호출
call screen 100. -> 설정하기
CALL SCREEN도 CLASS임
attribute헤더에서 short text 작성
element list 헤더에서 general attribute에서 top에 선언한 스크린 버튼 변수 기재하여 mapping시키
6. 본작업 2 - 스크린 작업 (PBO,PAI) 하기
PBO
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PBO_100'.
SET TITLEBAR 'BPO_100'.
ENDMODULE. " STATUS_0100 OUTPUT
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE PBO_0100. "ALV 세팅
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
*&---------------------------------------------------------------------*
*& Include ZEDU01_ABAP17_001
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PBO_100'. "버튼 활성화
SET TITLEBAR 'BPO_100'. "ALV 제목
ENDMODULE. " STATUS_0100 OUTPUT
MODULE PBO_0100 OUTPUT.
*1. ALV Container 생성 (인스턴스 메모리 할당)
CREATE OBJECT GO_CUSTOM_CON
EXPORTING
CONTAINER_NAME = 'CON100'. "SCREEN PAINTER와 연결
*2. ALV Grid 생성 (인스턴스 메모리 할당)
CREATE OBJECT go_alv
EXPORTING
i_parent = go_custom_con. "CONTAINER안에 ALV가 들어간다
*3. ALV Layout
*4. ALV Field Catalog
*5. ALV Button Toolbar
*6. alv internal table 화면에 출력
ENDMODULE. "PBO_0100 OUTPUT
-> 에러가 계속 남.. 해결완료.. 프로그램에 속한 INCLUDE가 잘못 매핑되어있어서 생긴 오류로 확인됨!!!!(+ 서버 자체에도 이슈가 좀 있는 듯!!)
*3. ALV Layout : 전체 포맷
gs_layout-sel_mode = 'A'. "행 선택 버튼
GS_LAYOUT-ZEBRA = 'X'. "격자 무늬
GS_LAYOUT-EDIT = 'X'. "수정 모드
*4. ALV Field Catalog:각각의 필드에 대해 제공하는 옵션(=LVC_T_FCAT)테이블로 쌓음
*FIELDNAME,REF_TABLE,REF_FIELD, EMPHASIZE,SCR_TEXT
PERFORM APPEND_FCAT USING:'MANDT' 'SKAT' 'MANDT''C300''클라이언트',
'KTOPL''SKAT''KTOPL' '' '계정과목표',
'SAKNR''SKAT''SAKNR''''G/L 계정번호',
'TXT20''SKAT''TXT20''''G/L 계정내역',
'TXT50''SKAT''TXT50''''G/L 계정설명'.
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 = GT_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.
ENDIF.
출력화면에서 다시 값을 할당하여 볼 수 있게 하는
============================================================================================
ALV 만들기 다시.. DOCKING CONTAINER
1. 선행 작업 - INCLUDE 생성
ALV의 종류(ABAP List Viewer)
- FUNCTION : 현재는 안쓰나 Function module.
- CLASS ALV : 신규 -> 이 CLASS ALV 기반으로 ALV를 만들것. 5단계를 거쳐 ALV 생성. 범용적임
- class는 object들중 하나임
- OOP
- 변수(DATA, Attribute)와 function(module) 함수 로 구성되어 있음
- 변수 - 데이터 선언 (= attributes)
- data: gv_v1
- Function(=method, 함수)
- gv_sum= gv_v1 + gv_v2
- 변수 - 데이터 선언 (= attributes)
- 변수와 함수로 구성되어 있는 class 형태로 만들어서 계속 재사용 하는 것
- 변수(DATA, Attribute)와 function(module) 함수 로 구성되어 있음
- SLV(SIMPLE ALV) : 신규, 1~2 단계.
ALV 생성 시 선행 작업
스크린을 생성해야함
인터널 테이블 생성하기
이벤트 기반으로 프로그래밍 하기
PBO(최초에 화면을 출력하는 로직을 설계하는 모듈)
PAI(출력된 화면에서 사용자의 이벤트를 수행하는 모듈)
사용자의 이벤트로 새로운 화면을 띄워졌을 때 PBO가 ACTIVE 된 거임
SY-UCOMM
ALV는 스크린에 인터널 테이블 뿌리는 거임
CLASS - CL_GUI_ALV_GRID (글로벌 클래스 임.)
cl_gui_alv_grid에서 자주 사용되는 method
- Constructor : ALV Grid control instance 생성
- set_table_for_first_display : control 내부에서 internal table data를 보여준다.
- refresh_table_display : control내부에서 display된 data들의 변경 이 있을 시 사용.
layout, field catalog
layout = 출력될 인터널 테이블 전체에 적용
field catalog = 하나의 필트에 적
container 종류
docking
custom - screen painter, 드래그앤 드랍
screen painter와 abap연결
container도 클래스로 되어 있
1. 선행 작업 - 1 ( ABAP Class 접근 제한 영역)
*class
*class 만들기 위한 선행 작업
*전역변수
INCLUDE ZCLASS_TEST_TOP.
*로컬 클래스
INCLUDE ZCLASS_TEST_cls.
*함수
INCLUDE ZCLASS_TEST_F01.
*PAI
INCLUDE ZCLASS_TEST_l01.
*PBO
INCLUDE ZCLASS_TEST_001.
2. 선행작업2 - CLASS 생성(+Class Parameter 값 전달 기법)
*구현부
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.
'SAP > 실전' 카테고리의 다른 글
SQL Editor (0) | 2023.11.06 |
---|---|
SAP 프로그램 성능 개선(튜닝)_v0.1 (0) | 2023.11.03 |
[참고] HIDE AREA (0) | 2023.03.05 |
[참고] GUI Status 생성 (SET PF-STATUS) (0) | 2023.03.05 |
[참고] list의 시스템 필드 (0) | 2023.03.05 |