ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ABAP] #23 Report Program - ALV (2)
    SAP/ABAP 2026. 1. 5. 23:02

     

     

     

     

     

     

     

     

     

    주요 EXPORTING 옵션

       CALL METHOD go_alv->set_table_for_first_display
         EXPORTING
    *       i_buffer_active               =
    *       i_bypassing_buffer            =
    *       i_consistency_check           =
           i_structure_name              = 'SCUSTOM'
    *       is_variant                    =
    *       i_save                        =
    *       i_default                     = 'X'
    *       is_layout                     =
    *       is_print                      =
    *       it_special_groups             =
    *       it_toolbar_excluding          =
    *       it_hyperlink                  =
    *       it_alv_graphics               =
    *       it_except_qinfo               =
    *       ir_salv_adapter               =
         CHANGING
           it_outtab                     = gt_data
            ...

     

     

    is_variant, i_save, i_default 세 가지 옵션은 Variant와 관련되어 있다.

     

    1. is_variant

    • ALV 레이아웃 Variant 정보를 담는 구조(disvariant).
    • 정렬, 필터, 컬럼 배치 등을 저장·불러오기 위한 기준이 되며, Variant 기능을 사용할 경우 i_save와 함께 사용한다.

    2. i_save

    • ALV에서 레이아웃 Variant 저장 가능 여부를 설정한다.
    의미
    'A' 사용자 + 글로벌
    'X' 저장 허용 (Global layout 만)
    'U' 사용자(Local layout) 전용
    space 저장 불가

    3. i_default

    • 저저장된 Variant 중 기본(Default) Variant가 존재할 경우, ALV 실행 시 자동으로 적용되도록 한다.
    • Variant 사용할 때 거의 같이 씀
    의미
    'X' 기본 Variant 자동 적용
    space 기본 Variant 자동 적용 안 함

    예제 코드

    DATA: gs_variant TYPE disvariant.
    
    INITIALIZATION.
      gs_variant-report = sy-cprog.
      gs_variant-username = sy-uname.
      gs_variant-handle = 'MAIN'.
    • report : Variant가 속한 프로그램 이름
    • username : Variant 소유 사용자
    • handle : 하나의 화면에 여러개의 ALV가 있는 경우 각 ALV마다 구분자가 필요하므로 구분자 지정해줌
    CALL METHOD go_alv->set_table_for_first_display
      EXPORTING
        i_structure_name              = 'BC400_S_FLIGHT'
        is_variant                    = gs_variant
        i_save                        = 'A'
        i_default                     = 'X'
      CHANGING
        it_outtab                     = gt_flight
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

    i_save = 'A'로 설정하여 variant를 저장할 수 있으며,

    i_default = 'X'로 설정하여 저장된 Variant 중 기본(Default) Variant가 있을 경우 ALV 실행 시 자동으로 적용된다.


    4. ALV 레이아웃 (is_layout)

    • ALV의 전체적인 화면 구성과 표시 방식을 설정하는 기능이다.
    • is_layout(lvc_s_layo) 구조를 사용하여 ALV 제목, 행 구분 표시, 선택 모드, 행/셀 색상 정보 필드와의 연결 등을 제어할 수 있다.

    lvc_s_layo의 주요 속성

    속성 설명
    zebra 'X' : 행 줄무늬
    cwidth_opt 'X' : 컬럼 폭 자동 조정
    grid_title ALV 제목
    no_headers 'X' : 필드명 행 전체 제거
    sel_mode 선택 모드
    no_toolbar 'X' : 툴바 숨김
    totals_bef 'X' : 합계 행을 데이터 상단에 표시
    excp_fname 상태/예외 필드 값이 저장된 필드명
    excp_led excp_fname 필드를 LED 형태로 표시
    info_fname 행 색상 값이 저장된 필드명
    ctab_fname 셀 색상 값이 저장된 필드명

    예제 코드

    DATA: gs_layout  TYPE lvc_s_layo.
    FORM set_layout .
      gs_layout-grid_title = 'Flight List'. " ALV 제목 "
      gs_layout-zebra = 'X'.                " Row에 구분색을 넣는 속성 "
      gs_layout-sel_mode = 'C'.             " 셀 선택 모드 "
      gs_layout-excp_fname = 'excp_fld'.    " 상태/예외 값 담고 있는 변수명 알려줌 "
      gs_layout-excp_led = 'X'.             " LED 표시 "
     
      gs_layout-info_fname = 'COL_FLD'.     " 행 색상을 담고 있는 변수명 알려줌 "
      gs_layout-ctab_fname = 'LT_SCOL'.     " 셀 색상을 담고 있는 변수명 알려줌 "
    ENDFORM.
    CALL METHOD go_alv->set_table_for_first_display
      EXPORTING
        i_structure_name              = 'SFLIGHT'
        is_layout                     = gs_layout
      CHANGING
        it_outtab                     = gt_flight
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

     

    (1) sel_mode 속성 값

    선택 가능 범위 ALV 왼쪽 체크박스(선택 컬럼) 존재 여부
    space 'B'와 동일 미존재
    'A' • 여러 컬럼 선택 가능
    • 여러 행 선택 가능
    존재
    'B' • 여러 컬럼 선택 가능
    • 단일 행 선택
    미존재
    'C' • 여러 컬럼 선택 가능
    • 여러 행 선택 가능
    미존재
    'D' • 여러 컬럼 선택 가능
    • 여러 행 선택 가능
    • 모든 셀 단위 선택 가능
    존재

    (2) 상태/예외 필드 (excp_fname)

    excp_fname는 ALV 행 단위 상태 또는 예외를 표시하기 위한 필드이다.
    지정된 필드 값에 따라 빨강/노랑/초록 상태가 표현된다.

    • '1' : Negative (빨강)
    • '2' : Critical (노랑)
    • '3' : Positive (초록)

    excp_led = 'X'를 설정하면 신호등(LED) 아이콘으로 표시되며, 설정하지 않으면 기본 상태 색상으로 표시된다.

    DATA: BEGIN OF gs_flight.
            INCLUDE TYPE sflight.
    DATA:   excp_fld TYPE char1,
          END OF gs_flight.
      gs_layout-excp_fname = 'excp_fld'.    " 상태/예외 값 담고 있는 변수명 알려줌 "
      gs_layout-excp_led = 'X'.             " LED 표시 "
    FORM get_data .
      SELECT *
        FROM sflight
        INTO CORRESPONDING FIELDS OF TABLE gt_flight
       WHERE carrid = pa_car
         AND connid IN so_con
         AND fldate IN so_fdt.
    
      IF sy-subrc = 0.
        LOOP AT gt_flight INTO gs_flight.
          IF gs_flight-seatsocc < 50.
            gs_flight-excp_fld = '1'. " 빨간색 "
          ELSEIF gs_flight-seatsocc >= 50 AND gs_flight-seatsocc <= 200.
            gs_flight-excp_fld = '2'. " 노란색 "
          ELSE.
            gs_flight-excp_fld = '3'. " 초록색 "
          ENDIF.
          MODIFY gt_flight FROM gs_flight TRANSPORTING excp_fld.
        ENDLOOP.
      ENDIF.
    ENDFOR

     

    만약 excp_led = 'X'를 하지 않는다면 아래와 같은 결과가 나온다.


    색상 필드 (info_fname / ctab_fname)

    info_fname행(Row) 단위 색상 지정에 사용되며,
    ctab_fname셀(Cell) 단위 색상 지정을 위해 lvc_t_scol, lvc_s_scol 구조를 사용한다.

     

    (3) 행 단위 색상 지정 (info_fname)

    행 전체에 동일한 색상을 적용하며, 다음 형식의 문자열로 색상을 지정한다.

    • 'C' : 고정값
    • color_constant : 컬러값
    • intensified : 색상 진하게(1), 연하게(0)
    • inverse : 글자 색상(1), 배경 색상(0)

    (4) 셀 단위 색상 지정 (ctab_fname)

    셀 단위 색상은 각 컬럼마다 색상 정보가 다를 수 있으므로, 한 행 안에서 여러 개의 셀 색상을 관리하기 위해 인터널 테이블(lvc_t_scol) 형태로 관리한다.

    각 셀마다 다음 정보를 가진 구조(lvc_s_scol)를 사용한다.

    DATA: BEGIN OF gs_flight.
            INCLUDE TYPE sflight.
    DATA:   excp_fld TYPE char1,
            col_fld  TYPE char4,
            lt_scol  TYPE lvc_t_scol,
          END OF gs_flight.
          
    DATA ls_scol TYPE lvc_s_scol.
      gs_layout-info_fname = 'COL_FLD'.
      gs_layout-ctab_fname = 'LT_SCOL'.
    FORM get_data .
      SELECT *
        FROM sflight
        INTO CORRESPONDING FIELDS OF TABLE gt_flight
       WHERE carrid = pa_car
         AND connid IN so_con
         AND fldate IN so_fdt.
    
      IF sy-subrc = 0.
        LOOP AT gt_flight INTO gs_flight.
          IF gs_flight-fldate(4) = sy-datum(4).
            gs_flight-col_fld = 'C' && col_positive && '10'.
          ENDIF.
    
          DATA seatsremain TYPE i.
          seatsremain = gs_flight-seatsmax - gs_flight-seatsocc.
    
          IF seatsremain < 10.
            ls_scol-fname = 'SEATSMAX'.
            ls_scol-color-col = '6'.
            ls_scol-color-int = '0'.
            ls_scol-color-inv = '1'.
            APPEND ls_scol TO gs_flight-lt_scol.
    
            CLEAR ls_scol.
            ls_scol-fname = 'SEATSOCC'.
            ls_scol-color-col = '6'.
            ls_scol-color-int = '0'.
            ls_scol-color-inv = '1'.
            APPEND ls_scol TO gs_flight-lt_scol.
          ENDIF.
          MODIFY gt_flight FROM gs_flight TRANSPORTING col_fld lt_scol.
          CLEAR gs_flight.
        ENDLOOP.
      ENDIF.
    ENDFORM.


    (5) 그리드 선 지우기 (no_hgridln / no_vgridln)

      gs_layout-no_hgridln = 'X'. " 그리드 선 지우기(세로선) "
      gs_layout-no_vgridln = 'X'. " 그리드 선 지우기(가로선) "


    5. 툴바 설정 (it_toolbar_excluding)

    • MC_FC_ : 단일 기능 버튼 (Function code)
    • MC_MB_ : 여러 기능 묶음 (Menu Button)
    • MC_FC_EXCL_ALL : 모든 툴바 버튼 숨김
    DATA: gt_uifunc  TYPE ui_functions.
    FORM set_uifunc .
      APPEND cl_gui_alv_grid=>mc_mb_sum TO gt_uifunc. " 합계 버튼 "
      APPEND cl_gui_alv_grid=>mc_fc_filter TO gt_uifunc. " 필터 버튼 "
      APPEND cl_gui_alv_grid=>mc_fc_excl_all TO gt_uifunc. " 버튼 전체 안보이게 "
    ENDFORM.
    PERFORM set_uifunc.
    
    CALL METHOD go_alv->set_table_for_first_display
      EXPORTING
        i_structure_name              = 'SBOOK'
        is_layout                     = gs_layout
        it_toolbar_excluding          = gt_uifunc
      CHANGING
        it_outtab                     = gt_data
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

     

    툴바 버튼 자체를 없앨 수도 있다.

    FORM set_layout .
      ...
      gs_layout-no_toolbar = 'X'. " 툴바버튼 전체 없애기 "
    ENDFORM.

     

    ※ it_toolbar_excluding VS no_toolbar

    • it_toolbar_excluding은 특정 버튼만 숨김
    • no_toolbar = 'X'는 툴바 전체 제거 → 툴바 영역 자체를 제거

     

     

     

     

     

     

     

     

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

    [ABAP] #25 ALV의 Event Class  (0) 2026.01.10
    [ABAP] #24 Report Program - ALV (3)  (0) 2026.01.10
    [ABAP] #22 Report Program - ALV (1)  (0) 2026.01.04
    [ABAP] #21 Report Program (1)  (0) 2025.12.31
    [ABAP] #20 Search Help  (0) 2025.12.31
Designed by Tistory.