ALV 시작

SAP ABAP 2009. 1. 2. 23:52

ALV(abap list viwer)
SAP Standard에서 제공되는 View함수를 사용하는 프로그램
ALV를 통해 조회된 DATA를 수정/변경 할 수 있으며 신규 데이터도 입력 가능하다.

-주요기능-
정렬기능
필터링기능
열의 크기 변경
레이아웃 변경
더블클릭에 의한 추가 정보 제공
기본적인 계산 수행 기능
엑셀 파일 및 워드 문서 저장


실무에선 write로 된 리폿은 거의 안쓴다고.. ALV를 쓴다고 한다. 하긴... write 리폿은 너무 어려워..;;

강의시간에 배울 땐 어렵게 느껴졌는데, 집에와서 책보고 해보니 별거 아니라능..

PERFORM BUILD_FIELDCAT : 화면에 디스플레이할 필드를 정의
PERFORM BUILD_SORTCAT : 원하는 필드로 정렬하기 위한 레이아웃을 생성
PERFORM BUILD_EVENTCAT : 페이지의 header를 작성
PERFORM ALV_WRITE : field data 및 레이아웃 속성값과 인터널테이블 데이타를 Function Module인 'REUSE_ALV_LIST_DISPLAY'에 임포트


굳이 PERFORM문을 쓸 필요는 없지만 코딩은 깔끔하고 가독성이 있어야죠..

  TYPE-POOLS : slis.
SLIS를 type-pool로 선언하여 프로그램에서 사용하겠다는 의미. TYPE-POOL이란 SAP에서 제공하는 각종 타입 및 Constants가 선언되어 있는 그룹이다. 

*필드카탈로그
DATA : fieldcat TYPE slis_t_fieldcat_alv,
         fieldcat_ln LIKE LINE OF fieldcat. "워크에어리아 생성 , 헤드만 있다.
*소트카탈로그
DATA : sortcat TYPE slis_t_sortinfo_alv,
            sortcat_ln LIKE LINE OF sortcat.
*이벤트카탈로그
DATA : eventcat TYPE slis_t_event,
            eventcat_ln LIKE LINE OF eventcat.
*write 카탈로그
DATA : pgm LIKE sy-repid.
pgm = sy-repid.
*디스플레이
DATA : ls_layout TYPE slis_layout_alv.


기존의 데이터베이스 테이블의 데이터를 가져오는 소스코드에서 추가하면 된다. ALV로 만들꺼..
주석달아서 필드, 소트, 이벤트, write 카탈로그 데이터를 선언한다.
slis_t_fieldcat_alv를 더블클릭하면 slis type-pool로 들어가는데.. 그곳에 type이 모두 정의되어 있다.. 백문이불여일견

PERFORM build_sortcat.
PERFORM build_eventcat.

fieldcat과 wirte는 그냥 프로그램에 써주었고 나머지는 인클루드시켜 perform으로 가져왔다.

  DATA : BEGIN OF itab OCCURS 0,
            carrid LIKE spfli-carrid,
            connid LIKE spfli-connid,
            fldate LIKE sflight-fldate,
            cityfrom LIKE spfli-cityfrom,
            cityto LIKE spfli-cityto,
            planetype LIKE sflight-planetype,
            END OF itab.
 
SELECT a~carrid a~connid a~fldate a~planetype b~cityfrom
    INTO CORRESPONDING FIELDS OF TABLE itab
    FROM sflight AS a
            INNER JOIN spfli AS b ON a~carrid EQ b~carrid
    WHERE a~carrid EQ 'LH'
          AND a~planetype EQ 'A319'.
 
*LOOP AT itab.
*  WRITE :/ itab-carrid,
*                itab-connid,
*                itab-fldate,
*                itab-cityfrom,
*                itab-cityto,
*                itab-planetype.
*ENDLOOP.
 
*build field catalog

DATA : col_pos TYPE i.
CLEAR : itab, itab[].


ADD 1 TO col_pos. "필드포지션 COL_POS에 + 1 1번
fieldcat_ln-fieldname = 'CARRID'"반드시대문자
fieldcat_ln-reptext_ddic = '항공사번호'.
fieldcat_ln-col_pos = col_pos."조회하면 첫번채
fieldcat_ln-key = 'x'"결과화면에서 화살표를 클릭해도 요 필드는 고정되어 있다.
fieldcat_ln-emphasize = 'C500'"필드에 색깔주기
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos. " COL_POS = COL_POS + 1
fieldcat_ln-fieldname = 'CONNID'.
fieldcat_ln-reptext_ddic = '항공기번호'.
fieldcat_ln-col_pos = col_pos."조회하면 두번째필드
fieldcat_ln-key = 'x'.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'FLDATE'.
fieldcat_ln-reptext_ddic = '비행날짜'.
fieldcat_ln-col_pos = col_pos."조회하면 세번채
fieldcat_ln-key = ''.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'PLANETYPE'.
fieldcat_ln-reptext_ddic = '항공사'.
fieldcat_ln-col_pos = col_pos."조회하면 네번채
fieldcat_ln-key = ''.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'CITYFROM'.
fieldcat_ln-reptext_ddic = '도착도시'.
fieldcat_ln-col_pos = col_pos."조회하면 다번번
fieldcat_ln-key = 'X'.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
 

필드카테고리부분의 작성이다. col_pos를 이용해 1씩증가하게하여 각 필드의 위치를 잡는다.
속성들은 파악하지 못했다.. 
APPEND를 꼭 해주어야 한다. fieldcat_ln의 헤더라인에 있는 데이터를 fieldcat이라는 인터널테이블로 반드시 넣어주어야 한다.

  *Build Layout
ls_layout-colwidth_optimize = 'X'.
무슨말인지 모르겠다.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
  I_callback_program      = pgm
  I_callback_user_command = 'USER_COMMAND'
   is_layout                      = ls_layout
   it_fieldcat                    = fieldcat
   it_sort                         = sortcat
   it_events                    = eventcat
   I_SAVE                         = 'A'
  TABLES
    t_outtab                       = itab
  EXCEPTIONS
    program_error         = 1
    OTHERS                = 2.
 

REUSE_ALV_GRID_DISPLAY를 call하면 익스포팅과 임포팅부분에 많은 변수들이 세팅되는데 필요한것만 골라 쓰면된다.

기본적인것들 ls_layout, fieldcat, sortcat, eventcat 등 그리고 테이블은 itab..


 내일 ALV에 대해서 자세히 배우게 된다.
기대가 되는구먼ㅋ
 

AND