ABAP Standard Function

[ABAP] REUSE_ALV_GRID_DISPLAY / 빠르고 쉽게 ALV 출력하기

ASAP ABAP 2025. 1. 9. 12:23
반응형

개발을 하다보면, ALV를 정말 많이 만들곤 합니다. 하지만, ALV만들때 Custom control 객체를 만들고 또 그 위에 gird 객체를 올리는 등의 복잡한 과정이 필요합니다. 하지만 이를 간단하게 ALV를 출력하는 "REUSE_ALV_GRID_DISPLAY" function를 소개해보겠습니다.

 

기능설명

Internal Table에 있는 데이터들을 ALV로 간 단하게 보 여주기 위한 Function입니다. 앞에 서 설명한 REUSE_ALV_FIELDCATALOG_MERGE Function과 연계하여 사용하면 더욱 빠르고 쉽게 ALV를 출력할 수 있습니다. Screen Layout에서 Container를 따로 설정해주지 않아도 사용할 수 있습니다.

Signature

Importing Parameter
Exporting Parameter
Exception Parameter

예시 코드

TABLES: sflight.
TYPES: BEGIN OF ty_sflight,
	carrid TYPE sflight-carrid,
	connid TYPE sflight-connid,
	fldate TYPE sflight-fldate,
	price TYPE sflight-price,
	currency TYPE sflight-currency,
	planetype TYPE sflight-planetype,
END OF ty_sflight.

TYPE-POOLS: slis.

DATA: gt_sflight TYPE TABLE OF ty_sflight,
	  gs_sflight TYPE ty_sflight.
      
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
	  gs_layout TYPE slis_layout_alv,
	  gd_repid LIKE sy-repid,
	  g_save TYPE c VALUE 'X',
	  g_variant TYPE disvariant,
	  gx_variant TYPE disvariant.
      
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-b01.
	PARAMETERS p_sfl TYPE sflight-carrid.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
gs_sflight-carrid = p_sfl.
* SFLIGHT 테이블에서 데이터 선택 사용자가 입력한 값에 따른
SELECT carrid connid fldate price currency planetype
	FROM sflight
	INTO TABLE gt_sflight
	UP TO 100 ROWS
	WHERE carrid = gs_sflight-carrid.
* 필드 카탈로그 생성
PERFORM build_fieldcat.
* 레이아웃 설정
gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.
* ALV 그리드 표시 (별도의 화면을 구성하지 않아도 사용 가능)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
	EXPORTING
		i_callback_program = gd_repid
		"i_callback_top_of_page = 'TOP-OF-PAGE'
		"i_callback_user_command = 'USER_COMMAND'
		is_layout = gs_layout
		it_fieldcat = gt_fieldcat
		i_save = 'X'
		is_variant = g_variant
	TABLES
		t_outtab = gt_sflight
	EXCEPTIONS
		program_error = 1
		OTHERS = 2.

실행 화면

Internal Table의 값을 ALV로 출력한 화면과 SUM 함수를 통해 Total행을 출력한 화면

주의사항

  • I_CALLBACK_PROGRAM의 프로그램은 항상 INCLUDE의 이름이 아닌 Report, Function group, Module pool or Form routine pool이어야 합니다.
  • FieldCatalog Table의 TYPE이 cl_gui_alv_grid Class에서 흔히 쓰는 LVC_T_FCAT type이 아닌 slis_t_fieldcat_alv 이기 때문에 TYPE을 잘 확인하고 사용하셔야 합니다.
반응형