ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ABAP] #24 Report Program - ALV (3)
    SAP/ABAP 2026. 1. 10. 22:32

     

     

     

     

     

     

     

     

     

     

    주요  CHANGING 옵션

       CALL METHOD go_alv->set_table_for_first_display
         EXPORTING
           ...
         CHANGING
           it_outtab                     = gt_data
    *       it_fieldcatalog               =
    *       it_sort                       =
    *       it_filter                     =
         EXCEPTIONS
           invalid_parameter_combination = 1
           program_error                 = 2
           too_many_lines                = 3
           others                        = 4.

     

     

    1. 출력 데이터의 정렬(it_sort)

    • it_sort 는 ALV 최초 출력 시 데이터 정렬 기준을 설정하는 옵션
    • 여러 필드를 우선순위(spos) 로 정렬 가능
    • 오름차순 / 내림차순 지정 가능

    주요 필드 (lvc_s_sort)

    필드명 설명
    fieldname 정렬 기준 필드명
    spos 정렬 우선순위 (1부터 시작)
    up 오름차순 정렬
    down 내림차순 정렬
    subtotal 소계 표시
    group 그룹화 기준

     

    DATA: gt_sorter  TYPE lvc_t_sort,
          gs_sorter  TYPE lvc_s_sort.
    *&---------------------------------------------------------------------*
    *& Form set_sorter
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM set_sorter .
      IF gt_sorter IS INITIAL.
        CLEAR gs_sorter.
        gs_sorter-fieldname = 'ORDER_DATE'. " 정렬 기준 필드 "
        gs_sorter-spos = 1.	                " 정렬 순서 "	
        gs_sorter-up = 'X'.                 " 오름차순 (기본) "
        APPEND gs_sorter TO gt_sorter.      "itab 맨마지막에 추가 "
    
        CLEAR gs_sorter.
        gs_sorter-fieldname = 'LOCCURAM'.
        gs_sorter-spos = 2.
        gs_sorter-down = 'X'.               " 내림차순 "
        APPEND gs_sorter TO gt_sorter.
      ENDIF.
    
    ENDFORM.
    PERFORM set_sorter.
        
    CALL METHOD go_alv->set_table_for_first_display
      EXPORTING
        i_structure_name              = 'SBOOK'
      CHANGING
        it_outtab                     = gt_data
        it_sort                       = gt_sorter
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

    2. 출력 데이터의 필터링(it_filter)

    • it_filter 는 ALV 출력 데이터에 대해 조건 필터링 적용
    • Selection Screen의 SELECT-OPTIONS 값을 그대로 매핑 가능
    • 화면 출력 후에도 동적으로 필터 변경 가능

    주요 필드 (lvc_s_filt)

    필드명 설명
    fieldname 필터 적용 필드
    sign 포함(I) / 제외(E)
    option EQ, BT, CP 등
    low 조건 시작값
    high 조건 종료값
    DATA: gt_filter  TYPE lvc_t_filt,
          gs_filter  TYPE lvc_s_filt.
    FORM set_filter .
      CLEAR: gt_filter, gs_filter.
    
      IF so_car_f IS NOT INITIAL.
        LOOP AT so_car_f.
          CLEAR gs_filter.
          gs_filter-fieldname = 'CARRID'.
          gs_filter-sign = so_car_f-sign.
          gs_filter-option = so_car_f-option.
          gs_filter-low = so_car_f-low.
          gs_filter-high = so_car_f-high.
          APPEND gs_filter TO gt_filter.
        ENDLOOP.
      ENDIF.
    
      IF so_con_f IS NOT INITIAL.
         LOOP AT so_con_f.
          CLEAR gs_filter.
          gs_filter-fieldname = 'CONNID'.
          gs_filter-sign = so_con_f-sign.
          gs_filter-option = so_con_f-option.
          gs_filter-low = so_con_f-low.
          gs_filter-high = so_con_f-high.
          APPEND gs_filter TO gt_filter.
        ENDLOOP.
      ENDIF.
    
      " 만약 sorter도 화면 출력 이후에 변경하고자 한다면, "
      " => set_sorter_criteria 사용 "
      CALL METHOD go_alv->set_filter_criteria
        EXPORTING
          it_filter                 = gt_filter
        EXCEPTIONS
          no_fieldcatalog_available = 1
          OTHERS                    = 2.
    
      IF sy-subrc <> 0.
        MESSAGE 'Filter 적용 중 에러 발생' TYPE 'E'.
      ENDIF.
    ENDFORM.
    MODULE user_command_0100 INPUT.
      CASE ok_code.
        WHEN 'BACK'.
          LEAVE TO SCREEN 0.
        WHEN 'SEARCH'.
          PERFORM set_filter.
      ENDCASE.
    ENDMODULE.

     

    필터 조건은 set_table_for_first_display의 it_filter로도 설정할 수 있지만, 이는 ALV 최초 출력 시에만 적용된다.

    이미 출력된 ALV 데이터에 대해 필터 조건을 변경하려면 set_filter_criteria 메서드를 사용해야 한다.

     

    이 경우 DB 재조회 없이, 현재 화면에 출력된 ALV 내부 데이터만 필터링하여 표시한다.

     

    따라서

    • 최초 출력 시 : set_table_for_first_display의 it_sort, it_filter
    • 출력 후 변경 시 : set_sort_criteria, set_filter_criteria → 이 방식은 DB 재조회를 하지 않고 화면 데이터만 변경한다.

     

    ※ 주의 사항

    refresh_table_display를 구현했다면 i_soft_refresh 값이 space 여야한다.

    그렇지 않으면 정렬과 필터에 대한 기능이 바뀌지 않는다.

    CALL METHOD go_alv->refresh_table_display
      EXPORTING
        is_stable      = gs_stable
        i_soft_refresh = '' " X: 정렬, 필터, 그외 기능들 유지 "
                            " _: 전체 리프레쉬(기본) "
      EXCEPTIONS
        finished       = 1
        OTHERS         = 2.

     


    3. 출력 그리드 설정 (it_fieldcatalog)

    it_fieldcatalog는 ALV 그리드의 컬럼 속성 정의 테이블이다.

    • 컬럼별로 표시 방식, 순서, 숨김 여부, 합계, 아이콘, 색상 등을 설정
    • 필드마다 설정이 다르므로 인터널 테이블(lvc_t_fcat)로 관리
    • DDIC 구조를 그대로 쓰는 것보다 출력 제어가 훨씬 자유로움
    DATA: gt_fcat TYPE lvc_t_fcat,
          gs_fcat TYPE lvc_s_fcat.
          
    " 기존 테이블 필드 + 화면 전용 필드(아이콘, 하이퍼링크, 가공 컬럼)를 함께 사용 "
    DATA: BEGIN OF gs_data.
            INCLUDE TYPE sbook.
    DATA: cancelled_icon   TYPE icon-id,
          phone            TYPE scustom-telephone,
          END OF gs_data.
    FORM set_fieldcat .
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'CANCELLED_ICON'.
      gs_fcat-icon = 'X'. " 아이콘 필드로 출력 "
      gs_fcat-coltext = 'Cancelled'. "컬럼 헤더 "
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'CANCELLED'.
      gs_fcat-no_out = 'X'. " 컬럼 숨김 "
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'PASSFORM'.
      gs_fcat-no_out = 'X'.
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'PASSBIRTH'.
      gs_fcat-no_out = 'X'.
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'PHONE'.
      gs_fcat-ref_field = 'TELEPHONE'. " 참조필드 "
      gs_fcat-ref_table = 'SCUSTOM'. " 참조테이블 "
      gs_fcat-col_pos = 4. " 컬럼 출력 순서 "
      gs_fcat-hotspot = 'X'. " 하이퍼링크 "
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'SMOKER'.
      gs_fcat-checkbox = 'X'. " 체크박스로 출력 "
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'INVOICE'.
      gs_fcat-checkbox = 'X'. 
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'CLASS'.
      gs_fcat-emphasize = 'C510'. " 컬럼 색상 지정 "
      APPEND gs_fcat TO gt_fcat.
    
      CLEAR gs_fcat.
      gs_fcat-fieldname = 'LOCCURAM'.
      gs_fcat-do_sum = 'X'. " 합계 적용 "
      APPEND gs_fcat TO gt_fcat.
    
    ENDFORM.
    CALL METHOD go_alv->set_table_for_first_display
      EXPORTING
        i_structure_name              = 'SBOOK'
        is_layout                     = gs_layout
      CHANGING
        it_outtab                     = gt_data
        it_fieldcatalog               = gt_fcat
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

     

    ※ i_structure_name는 기본 구조 제공, it_fieldcatalog가 해당 구조를 오버라이드


    자주 쓰이는 LVC_T_FCAT 타입의 핵심 속성

    1. 컬럼의 정체성을 정의하는 속성

    속성 의미
    FIELDNAME 인터널 테이블의 필드명 (대문자 필수)
    COLTEXT 화면에 표시될 컬럼의 제목 (Label)
    SCRTEXT_L / _M / _S 길이에 따른 텍스트(Long, Medium, Short). COLTEXT만 써도 보통 해결
    KEY 'X'로 설정하면 키 필드로 인식되어 색상이 다르게 표시되고 스크롤 시 고정
    NO_OUT 'X'로 설정하면 필드 카탈로그에는 있지만 화면에는 보이지 않음
    REF_TABLE 원본 DB 테이블 지정 
    REF_FIELD 원본 DB 필드 지정, REF_TABLE와 함께 사용

    ※ REF_TABLE & REF_FIELD 

    • 해당 필드가 원본 DB의 필드와 같은 데이터 성격을 가지게 한다.
    • F4 도움말 자동화 & 도메인 텍스트, 데이터 속성 자동 상속, 다국어 지원, Unit/Currency 연결 등 원본 데이터를 따라간다.

     

    2. 레이아웃 및 디자인 관련 속성

    속성 의미
    COL_POS 컬럼이 나타날 순서 (정수 값 입력)
    OUTPUTLEN 컬럼의 출력 길이 (정수 값 입력)
    JUST 정렬 ( 'R': 우측, 'L': 좌측, 'C': 중앙 )
    EMPHASIZE 컬럼 색상 (예: 'C310' - 노란색 계열)
    HOTSPOT 'X'로 설정하면 데이터에 밑줄이 생기며 클릭 가능한 상태 -> 하이퍼링크
    ICON 'X'로 설정하면 해당 필드의 값 텍스트 대신 아이콘 출력

     

     

    3. 데이터 편집 및 제어 속성

    속성 의미
    EDIT 'X'로 설정하면 해당 셀을 직접 수정할 수 있게 바뀜
    CHECKBOX 'X'로 설정하면 데이터를 체크박스 형태로 출력
    F4AVAILABL 'X'로 설정하면 입력 도움말(F4) 버튼이 나타남

     

     

    4. 수치 계산 관련 속성

    속성 의미
    DO_SUM 'X'로 설정하면 해당 컬럼의 합계(Total)를 자동으로 계산하여 하단에 보여줌
    CURRENCY / CFIELDNAME 통화 단위(KRW, USD 등)를 지정하거나 통화 단위가 담긴 필드명을 참조
    QUANTITY / QFIELDNAME 수량 단위(EA, KG 등)를 지정하거나 단위 필드명을 참조

     

     

     

     

     

     

     

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

    [ABAP] #26 ALV Container  (1) 2026.01.10
    [ABAP] #25 ALV의 Event Class  (0) 2026.01.10
    [ABAP] #23 Report Program - ALV (2)  (1) 2026.01.05
    [ABAP] #22 Report Program - ALV (1)  (0) 2026.01.04
    [ABAP] #21 Report Program (1)  (0) 2025.12.31
Designed by Tistory.