본문 바로가기

SAP/실전

[WIP]Creating ALV

최초 작성일: 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

FUNCTION KEYS 에서 BACK, CANCLE,EXIT정도의 기본 키에 대한 값만 설정해주고 저장 및 ACTIVE 하기

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에서 instance를 지정안해서 아래 코드에서 me로 나옴.

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
      • 변수와 함수로 구성되어 있는 class 형태로 만들어서 계속 재사용 하는 것
  • 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