ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [The ABAP] ABAP ALV 만들기, 생성, 만드는 법
    SAP ABAP 2024. 6. 28. 09:44

    ALV (ABAP List Viewer)

    : 원하는 데이터를 List 형태로 나타내 데이터를 목적에 맞게 쉽고 편리하게 가공 및 조회할 수 있는 기능 

     

    ALV는 ABAP 프로그래밍 중 가장 기초가 되면서 현업에서도 많이 사용되는 기능 중 하나이기 때문에 첫 번째로 게시글을 업로드 하게 되었습니다..^^

    ALV를 생성하는 데에 필요한 자세한 Dictionary 내용은 제외하고 바로 ALV를 만드는 작업부터 설명하도록 하겠습니다.


    * 참고로 작성자는 Report Program 생성 시 TOP Include를 체크하여 프로그램을 생성했습니다.

     

    • 테이블 소개

    교육을 듣는 교육생 테이블 [ZTSTUDENT]
    교육생 정보가 담긴 교육생 정보 테이블 [ZTSTUINFO]

     

    교육생 별로 각각의 테이블에서 원하는 데이터를 가져와서 ALV 리스트에 나타내는 작업을 해보겠습니다. 


    1. TOP Include

     

    먼저 ALV에 나타내고 싶은 정보들을 담은 Table을 TOP Include 상단에 선언해 줍니다.

    TABLES : ztstudent, ztstuinfo.

     

     

    TYPES 구문을 활용하여 ALV에 나타내고 싶은 필드들을 가진 새로운 타입 형태를 생성해줍니다.

    PERNR(교육번호)부터 HOME(집주소)가 담긴 데이터를 각각 테이블의 필드를 선언하여 변수로 만들어 주었습니다.

    TYPES : BEGIN OF t_std,
       pernr     TYPE ztstuinfo-pernr,
       name     TYPE ztstuinfo-name,
       gender   TYPE ztstuinfo-gender,
       major     TYPE ztstudent-major,
       grade     TYPE ztstudent-grade,
       phone    TYPE ztstuinfo-phone,
       home     TYPE ztstuinfo-home,
    END OF t_std.

     

     

    생성한 타입으로 인터널 테이블과 구조체를 선언해 줍니다.

    DATA : gt_std TYPE TABLE OF t_std,     "구조체와 Internal Table을 분리하여 선언 (권장O)"
           gs_std TYPE t_std.
           
           
    DATA : gt_std TYPE t_std OCCURS 0 WITH HEADER LINE. "Header line을 가진 Internal Table을 선언 (권장X)"

     


    ※주의할 점

    SAP S/4HANA  시스템은 Header line 구문을 지원하지 않기 때문에 Internal Table과 구조체를 분리하여 사용하는 것을 습관화 시켜야 한다고 합니다.


     

    다음으로, ALV를 직접 나타내는 속성 타입을 가진 변수를 선언합니다.

    DATA :  go_docking TYPE REF TO cl_gui_docking_container,
            go_grid    TYPE REF TO cl_gui_alv_grid,
            gt_fcat    TYPE lvc_t_fcat,
            gs_layout  TYPE lvc_s_layo.

     

    (1) go_docking : ALV List를 담을 박스를 만들고 위치를 지정해 주는 변수

    (2) go_grid : ALV 형태를 표처럼 나타내 주는 변수

    (3) gt_fcat : 필드 카탈로그를 담을 수 있는 변수 (ALV 컬럼명 지정)
    (4) gs_layout : ALV 레이아웃의 특징 및 효과를 추가할 수 있는 변수로 이해하면 쉬울 것 같습니다.

     

    이렇게 TOP Include에 선언을 마치고 다음 단계로 넘어가도록 하겠습니다.


    2. START-OF-SELECTION

     

    Report 프로그램을 사용해서 ALV를 만드려면 INITIALIZATION, AT SELECTION-SCREEN, END-OF-SELECTION과 같은 선언문을 잘 이해하고 있어야 합니다.

     

    TOP Include에 구조체와 테이블을 모두 선언 했으니 사용자가 프로그램을 실행할 때 작동되는 START-OF-SELECTION 구문을 선언 후 SQL을 통해 데이터를 가져오는 작업을 진행하겠습니다.

     

     START-OF-SELECTION. "사용자가 프로그램을 실행 시킬 때"
    
      SELECT a~pernr a~name a~gender  b~major b~grade a~phone a~home
        INTO CORRESPONDING FIELDS OF TABLE gt_std
        FROM ztstuinfo AS a
        INNER JOIN ztstudent AS b
        ON a~pernr = b~pernr.

     

    현업에서는 프로그램을 실행시키면 파라미터 값이나 여러 조건에 따라 ALV에 나타나는 데이터가 다양하게 달라질 수 있습니다.

    여러 테이블을 Join, 파라미터/조건 별로 WHERE 조건을 활용 등등 쿼리 구문을 더 공부해서 혼자 학습 하실 때 적용해 보면 큰 도움이 될 것입니다.
    저는 간단히 ALV만 띄우는 작업을 보여드리기 위해 쿼리문도 간단하게 작성해보았습니다.

     


    3. END-OF-SELECTION

     

    마지막으로 Screen 화면을 나타내 주는 단계입니다.

    SCREEN 100을 생성하여 ALV를 나타냅니다.

      END-OF-SELECTION.
    
        CALL SCREEN 100.    "ALV를 나타낼 스크린 선언"

     

    스크린을 선언하게 되면 스크린 내에 생성되는 PBO, PAI가 각각 존재하게 되는데 ALV 속성은 PBO 안에 모듈을 생성해서 지정하도록 하겠습니다.

     

    Screen 100

     

    MODULE set_alv

    MODULE set_alv OUTPUT.
    IF go_grid IS INITIAL.
    
      PERFORM create_object.       "ALV 박스 및 표 Object 생성"
    
      PERFORM set_fieldcatalog.    "필드 카탈로그 생성"
    
      PERFORM set_layout.          "레이아웃 설정"
    
      PERFORM display_layout.      "ALV에 쓰이는 변수 지정/스크린에 display"
    
    ENDIF.
    ENDMODULE.

     

    go_grid가 아무런 값도 없다면 ALV를 세팅하는 모듈 안에 PERFORM문을 4개 생성했습니다.

    하나씩 차례대로 풀어봅시다!

     


     

    PERFORM create_object.

    FORM CREATE_OBJECT .
    
    CREATE OBJECT go_docking
        EXPORTING
          repid = sy-repid                  	"현재 프로그램"
          dynnr = sy-dynnr			 	 "현재 스크린"
          side  = go_docking->dock_at_top		"ALV 위치"
          extension = 2000.			 	"넓이"
    
    
    CREATE OBJECT go_grid
        EXPORTING
           i_parent = go_docking.
    
    
    ENDFORM.

     

     

     

    좌측 사진 Application Toolbar에 있는 패턴(Pattern) 버튼을 클릭하여 위의 코드처럼
    CREATE OBJECT 구문을 사용할 수 있습니다.

    해당 ABAP OBJECTS 버튼을 클릭 후 넘어가게 되면 TOP에 생성했던 인스턴스와 필요한 클래스를 선언할 수 있는 화면이 창이 나타나게 됩니다.

     

     

     

     

     

     

     

     

     

     

     

    Create Object 버튼에 체크한 후 앞 단계에서 선언했던 go_doking과 go_grid를 인스턴스에 각각 넣어주고 Referance 타입으로 선언한 클래스

    를 알맞게 적어줍니다.

     

     

     

     

     

     

     

     

     

     

    오브젝트를 선언하게 되면 Exporting 값으로 여러개가 나오는 것을 확인할 수 있는데 위에 있는 코드처럼 준 값을 입력하면 기본적인 오브젝트의 ALV 값은 선언이 완료됩니다.

     


     

    PERFORM set_fieldcatalog.

    FORM SET_FIELDCATALOG .
    
      DATA : ls_fcat TYPE lvc_s_fcat.    "gt_fcat에 APPEND해줄 ls_fcat 선언"
    
      REFRESH gt_fcat.
    
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'PERNR'.
      ls_fcat-coltext   = '교번'.
      ls_fcat-just      = 'L'.
      ls_fcat-outputlen = 10.
      APPEND ls_fcat TO gt_fcat.
    
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'NAME'.
      ls_fcat-coltext   = '교육생 이름'.
      ls_fcat-just      = 'L'.
      ls_fcat-outputlen = 8.
      APPEND ls_fcat TO gt_fcat.
    
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'GENDER'.
      ls_fcat-coltext   = '성별'.
      ls_fcat-just      = 'L'.
      ls_fcat-outputlen = 3.
      APPEND ls_fcat TO gt_fcat.
    
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'MAJOR'.
      ls_fcat-coltext   = '팀 이름'.
      ls_fcat-just      = 'L'.
      ls_fcat-outputlen = 15.
      APPEND ls_fcat TO gt_fcat.
    
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'GRADE'.
      ls_fcat-coltext   = '레벨'.
      ls_fcat-just      = 'L'.
      ls_fcat-outputlen = 5.
      APPEND ls_fcat TO gt_fcat.
    
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'PHONE'.
      ls_fcat-coltext   = '휴대폰 번호'.
      ls_fcat-just      = 'L'.
      ls_fcat-outputlen = 15.
      APPEND ls_fcat TO gt_fcat.
    
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'HOME'.
      ls_fcat-coltext   = '집 주소'.
      ls_fcat-just      = 'L'.
      ls_fcat-outputlen = 40.
      APPEND ls_fcat TO gt_fcat.
    
    ENDFORM.

     

    (1) fieldname : 테이블에 담긴 가져올 데이터의 필드 명
    (2) coltext : ALV에 나타날 컬럼명
    (3) just : 컬럼명 정렬 위치
    (4) outputlen : 길이 설정

     


     

    PERFORM set_layout.

    FORM SET_LAYOUT .
    
      CLEAR gs_layout.
      gs_layout-sel_mode   = 'A'.
      gs_layout-grid_title = '교육생 정보 및 교육점수 조회 프로그램'.
    
    ENDFORM.

     

    sel_mode는 사용자가 ALV에서 표를 선택했을 때 나타나는 반응입니다.
    (1) B : 선택한 데이터의 열을 표시 (중복 X)

    (2) C : 선택한 데이터의 열을 표시 (중복 O)

    (3) A : 선택한 데이터의 단일 Cell 표시 (중복 X)

    (4) D : 선택한 데이터의 단일 Cell 표시 (중복 O)

     

    grid_title은 AVL의 제목을 사용자 정의로 나타낼 수 있습니다.

     

     


     

    PERFORM display_layout.

    FORM DISPLAY_LAYOUT .
    
      CALL METHOD go_grid->set_table_for_first_display
        EXPORTING
          i_default       = 'X'         "기본 세팅"
          is_layout       = gs_layout   "선언한 레이아웃"
        CHANGING
          it_outtab       = gt_std      "나타낼 Internal Table"
          it_fieldcatalog = gt_fcat.    "사용할 필드 카탈로그"
    
    ENDFORM.

     

    이렇게 스크린 상에 ALV를 나타내는 기초적인 작업은 모두 마무리가 됐습니다!


    4. 실행 화면

    프로그램 실행 화면

     

    글의 요지는 ALV 생성에 관한 내용을 전달하는 것이었기 때문에 다른 이벤트 없이 ALV만 나타나는 과정을 설명드렸습니다.
    위 단계가 잘 마무리 되면 Selection-Screen을 만들어 보고 조건에 따라 원하는 데이터를 나타내고 다양한 이벤트들도 적용시키면 좋은 실습이 될 것 같습니다 ㅎㅎ

     


     

     

    이것은 제가 따로 ALV 안에 이벤트도 넣어보고 조금 다양하게 만들어봤습니다.

    이후 포스팅하게 되면 위 사진처럼 다양한 이벤트들에 대해 업로드 할 예정입니다!

    제가 설명한 글이 많은 도움이 되시면 좋겠네요..^^

     

    저도 이제 막 시작하는 단계이기 때문에 부족한 부분이나 개선해도 될 부분이 있다면 적극적인 소통 환영합니다^^.

     

    'SAP ABAP' 카테고리의 다른 글

    [The ABAP] ABAP 기록  (0) 2024.06.28
Welcome to The ABAP.