본문 바로가기
공부/SAP

ALV 파라미터 (메서드 )

by 채소 2024. 1. 24.
728x90

SET_TABLE_FOR_FIRST_DISPLAY 

 

ALV GRID컨트롤 인스턴스를 아웃풋 테이블에 조회하게 하는 가장 기본적이고 중요한 메서드

메서드 호출시 ABAP DICTIONARY 구조 참고하거나 필드 카탈로그 정의해야함

  CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      I_BUFFER_ACTIVE = 'X'                   " 버퍼 활성화 여부 ('X'로 설정 시 활성화)
*     I_BYPASSING_BUFFER            =          " 버퍼 우회 여부
*     I_CONSISTENCY_CHECK           =          " 일관성 확인 여부
*     I_STRUCTURE_NAME              =   " 구조체 이름 입력
*     IS_VARIANT      = <구조체 타입의 IS_VARIANT> " 변형 설정
*     I_SAVE          = <CHAR01 형식의 I_SAVE>   " 저장 여부
*     I_DEFAULT       = 'X'   <CHAR01 형식의 I_DEFAULT> " 기본 설정 여부 ('X'로 설정 시 기본값으로 표시)
      IS_LAYOUT       = GS_LAYOUT             " 레이아웃 정보 구조체
*     IS_PRINT        = < structure of type LVC_8_ PRNT>  " 인쇄 설정
*     IT_SPECIAL_GROUPS      =  < internal table of type LVC T SGRP>      " 특수 그룹 설정
*     IT_TOOLBAR_EXCLUDING    =    " 툴바 제외 설정
*     IT_HYPERLINK    = < internal table of type UI_FUNCTIONS>     " 하이퍼링크 설정
*     IT_ALV_GRAPHICS =                        " ALV 그래픽 설정
*     IT_EXCEPT_QINFO =                        " 예외 정보 설정
*     IR_SALV_ADAPTER =                        " ALV 어댑터 인터페이스
    CHANGING
      IT_OUTTAB       = GT_SFLIGHT    "인터널테이블        " 출력 테이블
      IT_FIELDCATALOG = GT_FIELDCAT    "< internal table of type LVC_T_FCAT>
      " 필드 카탈로그 테이블
*     IT_SORT         = < internal table of type LVC T SORT> " 정렬 설정
*     IT_FILTER       = < internal table of type LVC_T_FILT>   " 필터 설정
* EXCEPTIONS
*     INVALID_PARAMETER_COMBINATION = 1      " 잘못된 매개변수 조합
*     PROGRAM_ERROR   = 2                     " 프로그램 오류
*     TOO_MANY_LINES  = 3                     " 너무 많은 행
*     OTHERS          = 4.                    " 기타 오류
    .

  .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

 

참고 : EASY ABAP, https://abapta0903.tistory.com/15

 

ALV GRID - 기타 파라미터

▪set_table_for_first_display 메서드에 사용되는 기타 파라미터의 의미와 속성에 대해서 알아보자. IS_VARIANT ▪IS_VARIANT 파라미터를 통해서는 ALV 리스트 변형(Variant)을 설정할 수 있다. ▪리스트 변형은

abapta0903.tistory.com

 

1) IS_VARIANT

IS_VARIANT 파라미터를 통해서는 ALV 리스트 변형(Variant)을 설정할 수 있다.

 

리스트 변형은 조회된 화면에서 필드의 순서를 변경하고, 정렬하는 것과 같은 일련의 작업을 하나의 변형으로 저장하여 다음 조회시에도 같은 포맷으로 조회될 수 있도록 기능을 제공해준다.

 

이를 위해서는 앞에서 필드 카탈로그와 레이아웃과 마찬가지로 TOP과 프로그램에 관련 변수를 선언해 주어야 한다.

 

결과에서 ALV 레이아웃 속성을 지정하게 되면 아이콘이 결과와 같이 이전 결과와는 다르게 변경되며 레이아웃을 변경하고 저장할 수 있도록 변경된다.

 

ALV 레이아웃 기능은 프로그램을 실행하여 필드 순서 변경, 소트, 필터링 등을 수행하여 레이아웃을 저장해보면 쉽게 이해할 수 있다.

 

2) I_SAVE

A 옵션인 상태

기능
X Global 레이아웃 세팅만 가능함
U 특정 사용자에 한해서 레이아웃 세팅만 가능함
A X와 U 둘 다 가능함
SPACE('') 레이아웃 저장을 하지 않음.

 

3) I_DAFUALT 파라미터

사용자가 Default 변형을 저장할 수 있는지를 결정하게 한다. 아래 표와 예제를 통해 I_DAFAULT 파라미터 설정이 레이아웃 설정에 어떠한 영향을 미치는지 살펴볼 수 있다.

기능(I_DEFAULT 파라미터 옵션)
X DEFAULT 변형을 저장할 수 있다.
SPACE DEFAULT 변형을 저장할 수 없다.

 

 

4) IT_TOOLBAR_EXCLUDING 파라미터

ALV GRID 컨트롤에서 숨기고 싶은 버튼이 있는 경우 사용.

 

예를 들어 회사의 특정 사원에게는 레이아웃을 저장할 수 있는 버튼을 숨겨야 할 필요성이 발생할 수 있음. 이럴 경우에는 레이아웃 버튼을 사용자에 따라 보이게 하거나 숨기게 할 수 있다.

 

ui_functions 타입의 인터널 테이블을 선언하여 이 테이블에 Function 코드를 삽입하면 해당 코드는 삭제된다.

 

ALV에서 선언함

DATA: GT_TOOLBAR TYPE UI_FUNCTIONS.

 

FORM 에서 선언

"TOOLBAR 제외 옵션

FORM set_toolbar .
  DATA: l_exclude TYPE ui_func.

  l_exclude =  cl_gui_alv_grid=>mc_fc_save_variant.
  APPEND l_exclude TO gt_toolbar.

  l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.
  APPEND l_exclude TO gt_toolbar.

ENDFORM.

 

ALV 호출 전에 PERFORM문 넣어야함 자꾸까먹음 ㅎㅎ..

 

gt_toolbar라는 데이터를 선언해주고 SETTING ALV에서 SETTING_TOOLBAR라는 서브루틴문에서 TOOLBAR에 대해 보이길 원하지 않는설정을 정해준다.

[Save Layout], [Manage Layouts] 메뉴 2개가 사라진 것 확인 가능.

 

툴바 제거 기능에 대한 소스는 최대한 간단하고 쉽게 셜명하려는 것이므로 다른 툴바들을 하나씩 직접 없애보는 연습을 통해 적응해보도록 하자.

 

예제에서 사용된 툴바 아이콘은 Cl_GUI_ALV_GRID 의 속성 탭에 정의되어 있다.

T-CODE : SE24에서 조회 가능.

Associated Type 정의 부분에서 UI_FUNC로 정의된 속성들이 툴바에 관련된 속성이므로 필요 없는 툴바는 소스를 추가해주면 된다.

 

5) IT_SORT 파라미터

 

ALV 실행 시 데이터가 정렬이 된 상태로 조회되도록 설정한다.

 

DATA:  GS_SORT              TYPE LVC_S_SORT,
       GT_SORT              TYPE LVC_T_SORT WITH HEADER LINE.

 

\\\\\\ WITH HEADER LINE 궁금증이생겨서 참고참고

WITH HEADER LINE은 ABAP에서 사용되는 오래된 문법 중 하나로, 내부 테이블에서 첫 번째 라인을 헤더 라인으로 취급하는 방식입니다. 이 구문은 오래된 스타일이고 현재의 권장 사항은 아닙니다. 대신에 내부 테이블을 사용할 때는 구조체 또는 WORK AREA를 정의하여 사용하는 것이 좋습니다.

GS_SORT는 작업 영역(work area) 또는 구조체(structure)로 사용되며, GT_SORT는 내부 테이블(internal table)입니다.

ABAPCopy code
DATA: GS_SORT TYPE LVC_S_SORT, GT_SORT TYPE TABLE OF LVC_S_SORT.

위의 코드에서는 GT_SORT가 내부 테이블이며, 각 레코드는 LVC_S_SORT 구조체의 필드로 구성됩니다.

여기서 WITH HEADER LINE은 내부 테이블을 사용할 때 첫 번째 레코드를 헤더 라인으로 사용하겠다는 의미입니다. 이 구문은 오래된 방식이고, 현대 ABAP 프로그래밍에서는 지양되고 있습니다. 대신에 헤더 라인 대신 구조체나 WORK AREA를 사용하여 내부 테이블을 조작하는 것이 권장되는 방법입니다.

ABAPCopy code
DATA: GS_SORT TYPE LVC_S_SORT, GT_SORT TYPE TABLE OF LVC_S_SORT. APPEND VALUE #(fieldname = 'FIELD1' sign = 'I' option = 'EQ' low = 'VALUE1') TO GT_SORT. APPEND VALUE #(fieldname = 'FIELD2' sign = 'I' option = 'GT' low = '10') TO GT_SORT. LOOP AT GT_SORT INTO GS_SORT. " 각 레코드(GS_SORT)에 대한 처리 ENDLOOP.

이렇게 각 레코드에 대한 처리를 할 때 WITH HEADER LINE을 사용하지 않아도 되며, 반복문에서 내부 테이블의 각 레코드에 직접 접근할 수 있습니다.

 

LVC_T_SORT 타입으로 선언된 인터널 테이블을 선언하여 이 테이블을 정렬하고자 하는 필드를 추가하면 된다.

 

LVC_T_SORT에서 ‘T’는 테이블을 의미하며 LVC_S_SORT에서 ‘S’Structure를 의미한다.

(SORT 테이블의 옵션 중 Subtot은 정렬 필드 기준으로 합계 금액과 전체 합계 금액을 보여주는 것을 세팅한다.)

 

아래 표는 IT_SORT 파라미터에 사용되는 주요 속성들을 설명한다.

 

속성 설명
SPOS 숫자 정렬 숫자를 지정한다.
FIELDNAME 필드명 정렬이 필요한 필드명을 지정한다.
UP '', 'X' 오름차순 정렬를 설정한다.
DOWN '', 'X' 내림차순 정렬을 설정한다.

 

CL_GUI_ALV_GRID 기타 메소드

1) GEt_CURRENT_CELL

get_current_cell 메서드는 ALV GRID 컨트롤에 커서가 놓은 위치의 값과 속성들을 반환한다.

 

선택된 셀이 존재하지 않으면 라인의 Row 값은 0을 반환한다. ALV GRID 컨트롤은 두 개의 라인과 칼럼의 인덱스 번호를 반환하는데, 하나는 현재 선택된 셀의 라인과 칼럼이고 다른 하나는 아웃풋 테이블(인터널 테이블) 라인과 칼럼의 인덱스이다.

 

이것은 필터링을 설정하거나 숨기기를 하였을 때 실제 화면에 보이는 값과 인터널 테이블의 순서가 다를 수 있기 때문이다.

 

CTRL + F6 : 인스턴스  G_GRID / 클래스 Cl_GUI_ALV_GRID METHOD GET_CURRENT_CELL

 

파라미터 TYPE 의미
E_ROW var. of type I ALV GRID 컨트롤의 현재 라인 인덱스
E_VALUE var. of type c ALV GRID 컨트롤의 현재 셀의 값
E_COL var. of. type I ALV GRID 컨트롤의 현재 칼럼 이름
ES_ROW_ID structure of type LVC_S_ROW 아웃풋 테이블의 현재 라인 타입과 인덱스에 대한 정보 구조
ES_COL_ID structure of type LVC_S_COL  아웃풋 테이블의 현재 칼럼과 필드명에 대한 정보 구조

 

" GET_CURRENT_CELL ALV GRID컨트롤에 커서가 놓인 위치 값 속성반환

    DATA:  l_row    TYPE i,
          l_value  TYPE c,
          l_col    TYPE i,
          ls_row   TYPE lvc_s_row,
          ls_col   TYPE lvc_s_col,
          ls_roid  TYPE lvc_s_roid.
MODULE USER_COMMAND_0100 INPUT.
  CALL METHOD G_GRID->GET_CURRENT_CELL
    IMPORTING
      E_ROW     = L_ROW
      E_VALUE   = L_VALUE
      E_COL     = L_COL
      ES_ROW_ID = LS_ROW
      ES_COL_ID = LS_COL
      ES_ROW_NO = LS_ROID
      .

ENDMODULE.
*&-----------

 

ALV GRID에서 사용자가 화면을 종료하기 위해 PBO의 STATUS에 BACK 버튼을 추가하고 이 버튼을 눌렸을 때 선택 셀 정보를 가져오도록 로직을 추가해보자.

->버튼을 눌렀을 때 역할이 수행되는 것이므로 PAI의 USER_COMMAND에서 정해주도록 하자.

 

2) GET_FRONT_LAYOUT

현재 설정된 ALV GRID레이아웃 정보를 가져온다.

 

CTRL + F6 : 인스턴스  G_GRID / 클래스 Cl_GUI_ALV_GRID METHOD GET_FRONTED_LAYOUT

 

CALL METHOD g_grid->get_fronted_layout
	IMPORTING
		ES_LAYOUT = < structure of type LCV_S_LAYO >.

 

     " 레이아웃 정보 불러옴
  CALL METHOD G_GRID->GET_FRONTEND_LAYOUT
    IMPORTING
      ES_LAYOUT = GS_LAYOUT

 

3)GET_SELECTED_COLUMNS

선택된 칼럼들의 정보를 LVC_T_COL 타입의 테이블로 반환한다.

 

CTRL + F6 : 인스턴스  G_GRID / 클래스 Cl_GUI_ALV_GRID METHOD GET_SELECTED_COLUMNS

 

CALL METHOD <g_grid>-> get_selected_columns
	IMPORTING
		ET_INDEX_COLUMNS = < Internal table of type LVC_T_COL >
     CALL METHOD g_grid->get_selected_columns
  IMPORTING
    ET_INDEX_COLUMNS =  LT_COL.

 

4)get_selected_cells


현재 선택된 복수의 셀 정보를 LVC_T_CELL 타입의 테이블로 반환한다. 즉 현재 선택된 셀들의 필드명, 인덱스 등의 정보를 가지고 온다.

 

CTRL + F6 : 인스턴스  G_GRID / 클래스 Cl_GUI_ALV_GRID METHOD GET_SELECTED_CELLS

 

CALL METHOD g_grid->get_selected_cells
	IMPORTING
		ET_CELL = < Internal table of type LVC_T_CELL >.

5) get_selected_rows


선택된 멀티 라인의 정보를 LVC_T_ROW 타입의 테이블로 반환한다.

 

CTRL + F6 : 인스턴스  G_GRID / 클래스 Cl_GUI_ALV_GRID METHOD GET_SELECTED_ROWS

 

CALL METHOD g_grid->get_selected_rows
	IMPORTING
		ES_INDEX_ROWS = < Internal table of type LVC_T_ROW >.

6) refresh_table_display


이미 화면에 조회된 ALV의 아웃풋 테이블을 다시 조회할 때 사용하는 메서드이다. 데이터가 변경되거나 다시 SELECT 구문을 수행한 경우 ALV 오브젝트를 생성하지 않고 데이터만 다시 보여준다.

 

맨 처음 만든 템플릿에 IF G_GRID IS INITIAL일때는 set_table_for_first_display를

ELSE일떄는 refresh_table_display로 넘어가도록 세팅을 해주었는데 이는 ALV 상에서 변화가 있을 때 바로 화면에서 반응할 수 있도록 설정해준 것이다.

 

CTRL + F6 : 인스턴스  G_GRID / 클래스 Cl_GUI_ALV_GRID METHOD REFRESH_TABLE_DISPLAY

 

CALL METHOD g_grid->refresh_table_display
	EXPORTING
		IS_STABLE = <  Internal table of type LVC_T_ROW >.
		I_SOFT_REFRESH = < variable of TYPE cHAR01 >

 

파라미터 의미
IS_STABLE 라인과 칼럼 위치를 기억하여 재조회하고 이전의 위치에 화면을 보이게 한다.
I_SOFT_REFRESH Sort, Filter, Sum 등 현 ALV GRID의 레이아웃 세팅을 그대로 유지하면서 refresh를 실행한다.

7) set_frontend_layout


ALV GRID 레이아웃을 변경한다. 이 메서드를 호출하고 REFRESH_TABLE_DISPLAY 메서드를 호출하면 변경된 레이아웃이 적용된다.

 

CTRL + F6 : 인스턴스  G_GRID / 클래스 Cl_GUI_ALV_GRID METHOD GET_FRONTED_LAYOUT

 

CALL METHOD g_grid-> set_frontend_layout
	EXPORTING
		IS_LAYOUT = <  structure of type LVC_T_LAYO >.

 

728x90

'공부 > SAP' 카테고리의 다른 글

constants || data, TYPE Pool 설명  (0) 2024.01.29
ALV GRID 만들기  (1) 2024.01.24
report program <12 단원 복습>  (1) 2024.01.22
SAP 단축키  (0) 2023.01.02