본문 바로가기

어쩌다 SAP/어쩌다 ABAP

14일차) ALV - DESONG님 유튜브 보고 정리 - 초급편

ALV란?

- ABAP LIST VIEWER의 약자로 리스트 화면에 데이터를 조회하거나, 조회된 데이터를 수정/변경하는 목적으로 실무에서 사용되는 프로그램이다.

- 데이터 구조와 인터널 테이블만 활용해서 단시간 내에 리스트 프로그램을 개발할 수 있다.

 

ALV 종류 (개발순 : FUNCTION ALV -> GRID ALV -> SALV)

 

ALV GRID 컨트롤 인스턴스 생성

*data : gv_grid TYPE REF TO cl_gui_alv_grid.           "객체 참조 변수 선언"
*  
*create OBJECT gv_grid.                                     "create object 구문으로 ALV GRID 인스턴스 생성"

ALV GRID 컨트롤의 구조

- ALV를 이용해 데이터를 화면에 뿌려주려면 다음 2가지 작업을 해주어야 한다.

1) 인터널 테이블 선언

- 화면에 보이게 될 인터널 테이블을 선언한다.

- ALV에서 데이터 정보를 저장하는 인터널 테이블 영역을 아웃풋 테이블(OUTPUT TABLE)이라고 한다.

 

2) 데이터의 구조(필드 카탈로그)

- ALV GRID 컨트롤이 스크린에 조회되는 구조를 정의한다.

- 일반적으로 ABAP DICTIONARY의 테이블 도는 구조체를 이요아거나, 인터널 테이블의 구조를 그대로 사용함.

 

ALV를 화면에 보이게 하려면 '스크린'영역과 ALV를 연결하는 'SAP 컨테이너 컨트롤'이 반드시 존재해야 한다.

 

SAP 컨테이너 생성 및 컨테이너 오브젝트 생성

- ALV를 화면에 띄우려면 SAP 컨테이너 컨트롤이 반드시 존재하여야 한다.

- SAP 컨테이너는 LINKER의 역할을 하도록 SAP 컨트롤을 자기 영역 안에 포함하는 컨테이너 역할을 하게 된다.

- SAP 컨트롤의 종류는 SAP TREE, SAP PICTURE, SAP TEXTEDIT, SAP SPLITTER 컨트롤 등이 잇다.

- SAP 컨테이너도 다른 컨트롤을 포함하는 컨트롤의 하나로, PARENT CONTROL이라고도 한다.

 

SAP 컨테이너의 종류

- SAP CUSTOM CONTAINER / SAP DIALOG BOX CONTAINER / SAP DOCKING CONTAINER /

SAP SPLITTER CONTAINER / SAP EASY SPLITTER CONTAINER

 


아 책보고 공부해도 뭔말인지 모르겠어서 유튜브를 찾아보니 데송님이 ALV 설명해주신 게 있었다.

이걸 토대로 우선 좀 익히고 예제를 풀어보도록 하겠다.

 

<DESONG님 유튜브>

ALV (ADVANCED LIST VIEWER)

- 목록보여주기

- SAP에는 STD(표준)이 존재 - 구매, 생산, 판매, 회계 등 

-> 회사에 맞게 EXIT, BODI 등 공간 - 화면의 라벨을 바꿀 수도 있고, 필드를 추가하거나, 계산 로직을 바꾸는 경우 사용.

- 공간을 새로 구축해서 로직을 사용하고 다음 줄로 넘어가게 한다.

- 이 때 ABAP 사용하는데 ABAP PROGRAMMING을 통해 ALV LIST(REPORT)를 만든다.

- 사용자는 이 LIST에서 여러 ACTION이 가능 (메일을 보낸다, 더블클릭해서 TRANSACTION 넘어가서 STD 프로그램으로로 넘어간다)

- 2004 년 이전의 ALV는 CLASSIC형태이고, 2004년 이후의 SALV는 객체지향형태(OOP)

- LIST VIEWER를 생성하는 방법을 알아봅시다.


Q) 업무예제 : 인천공항 -> 가입한 항공사 목록 조회.(초급편)

이게 ALV 화면입니다 

이걸 만들어 보도록 하시죠!

음... 책에서 본 내용에는 alv를 구현하기위해서는

1) area 2) container 3) sap grid control이 필수적으로 있어야한다.

4) layout 5)field catalog 는 필수값은 아니지만 alv 화면에 필드를 띄우고, alv 모양을 잡아주기위해 필요하다.

 

우리는 report 프로그램을 통해서

*SELECT * FROM s_carrier
*  INTO TABLE @DATA(lt_carrier).                  "@는 open sql 이라는데 구체적으로 뭔지 잘 모르겠음."
*
*  LOOP AT LT_CARRIER REFERENCE INTO DATA(REF).
*    WRITE: /, REF->CARRIERID, REF->CURRENCYCODE, REF->NAME, REF->URL.
*  ENDLOOP.

식으로 테이블을 조회할 수 있다.

그러면 이런 화면이 나오는데 시트형식으로 볼 수 있게 만들어주는 프로그램이 ALV이다.

REPORT 프로그램으로 테이블 조회

그렇다면 ALV로 테이블을 조회해봅시다.

1.  LT을 만들어보기

*SELECT * FROM s_carrier               "STRUCTURE로 LOCAL TABLE 만들기
*  INTO TABLE @DATA(lt_carrier).
2. FIELD CATALOG로 어떤 필드를 보여줄지 정한다.

*DATA l_field_catalog TYPE slis_fieldcat_alv.      
*DATA lt_fieldcat TYPE slis_t_fieldcat_alv.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'CARRIERID'.
*l_field_catalog-col_pos = 1.
*l_field_catalog-seltext_m = '코드'.
*APPEND l_field_catalog TO lt_fieldcat.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'NAME'.
*l_field_catalog-col_pos = 2.
*l_field_catalog-seltext_m = '이름'.
*APPEND l_field_catalog TO lt_fieldcat.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'CURRENCYCODE'.
*l_field_catalog-col_pos = 3.
*l_field_catalog-seltext_m = '통화키'.
*APPEND l_field_catalog TO lt_fieldcat.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'URL'.
*l_field_catalog-col_pos = 4.
*l_field_catalog-seltext_m = '웹주소'.
*APPEND l_field_catalog TO lt_fieldcat.
3. LAYOUT으로 ALV의 모양을 잡아준다.

*DATA l_layout TYPE slis_layout_alv.
*
*CLEAR l_layout.
*
*l_layout-colwidth_optimize = abap_true.
*l_layout-zebra                 = abap_true.  "ABAP_TRUE는 'X' / ABAP_FALSE는 ' '인걸로 보아 0/1 같은 개념인듯
4. CALL FUNCTION을 통해 ALV GRID를 만들어준다?

*CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
*  EXPORTING
*    i_callback_program = 'SY-CPROG '
*    is_layout          = l_layout
*    it_fieldcat        = lt_fieldcat *  TABLES
*    t_outtab           = lt_carrier
*  EXCEPTIONS *    program_error      = 1
*    OTHERS             = 2.
*IF sy-subrc <> 0.
*  MESSAGE ID sy-msgty TYPE sy-msgty NUMBER sy-msgno
*  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*ENDIF.

ALV로 띄운 테이블 조회 화면

컨테이너가 어딨는지 못찾겠다...... 흑흑

 

A) 정석적인 ALV(내가 하고싶은)는 SCREEN 100이 무조건 있어야한다.

이 구문으로 만든 화면은 APPEND를 써서 ALV 형식으로 만든 조회 프로그램 정도로 볼 수 있을 것 같다.

그래서 CONTAINER가 없는 듯 합니다...

 

데송님 유튜브 해당영상

www.youtube.com/watch?v=NA1gPPzWQn4&t=16s