Classic Lists & ALV

Formatting: COLOR, INTENSIFIED, INVERSE, HOTSPOT, UNDER, NO-GAP, NO-ZERO, CURRENCY, UNIT, EDIT MASK, LEFT-JUSTIFIED.

18.1 Classic list output with WRITE

Formatting: COLOR, INTENSIFIED, INVERSE, HOTSPOT, UNDER, NO-GAP, NO-ZERO, CURRENCY, UNIT, EDIT MASK, LEFT-JUSTIFIED. SKIP, ULINE, NEW-PAGE, FORMAT control layout. Up to 20 detail lists (sy-lsind). Lists are not available in ABAP Cloud.

TOP-OF-PAGE.
  WRITE: / 'Carrier', 10 'Connection', 25 'Date', 40 'Price'.
  ULINE.

START-OF-SELECTION.
  LOOP AT gt_flights INTO DATA(ls_f).
    WRITE: / ls_f-carrid COLOR COL_KEY,
             10 ls_f-connid,
             25 ls_f-fldate,
             40 ls_f-price CURRENCY ls_f-currency.
    HIDE: ls_f-carrid, ls_f-connid.        " remember values for drill-down
  ENDLOOP.

AT LINE-SELECTION.
  WRITE: / 'You selected', ls_f-carrid, ls_f-connid.   " secondary list, sy-lsind = 1

18.2 ALV overview

ALV (ABAP List Viewer) displays tables with sorting, filtering, totals, layouts, and Excel export for free.

REUSE_ALV_GRID_DISPLAY / _LIST_DISPLAY Function modules, field catalog Legacy, still common OO, needs a screen + container Editable grids, complex dialogs CL_SALV_TABLE (SALV object model) OO, simple, no field catalog needed Recommended for read-only reports ALV with Integrated Data Access on HANA Huge data sets, paging pushed to DB Fiori elements list report Browser, RAP/OData

18.3 REUSE_ALV_GRID_DISPLAY (legacy)

DATA lt_fcat TYPE slis_t_fieldcat_alv.
DATA ls_layout TYPE slis_layout_alv.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
    i_structure_name = 'SFLIGHT'
  CHANGING
    ct_fieldcat      = lt_fcat.

ls_layout-zebra = abap_true.
ls_layout-colwidth_optimize = abap_true.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program = sy-repid
    is_layout          = ls_layout
    it_fieldcat        = lt_fcat
  TABLES
    t_outtab           = gt_flights
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

18.4 CL_SALV_TABLE (recommended)

Event handling (e.g. double-click):

DATA lo_alv TYPE REF TO cl_salv_table.
TRY.
    cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
                            CHANGING  t_table      = gt_flights ).

    lo_alv->get_functions( )->set_all( abap_true ).           " toolbar
    lo_alv->get_columns( )->set_optimize( abap_true ).
    lo_alv->get_display_settings( )->set_striped_pattern( abap_true ).
    lo_alv->get_display_settings( )->set_list_header( 'Flights' ).

    DATA(lo_col) = CAST cl_salv_column_table( lo_alv->get_columns( )->get_column( 'PRICE' ) ).
    lo_col->set_long_text( 'Ticket price' ).
    lo_alv->get_columns( )->get_column( 'MANDT' )->set_technical( abap_true ).   " hide

    lo_alv->get_aggregations( )->add_aggregation( columnname = 'PAYMENTSUM' ).
    lo_alv->get_sorts( )->add_sort( columnname = 'CARRID' subtotal = abap_true ).

    lo_alv->get_layout( )->set_key( VALUE #( report = sy-repid ) ).
    lo_alv->get_layout( )->set_save_restriction( if_salv_c_layout=>restrict_none ).

    lo_alv->display( ).
  CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error cx_salv_existing INTO DATA(lx_salv).
    MESSAGE lx_salv TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.
CLASS lcl_events DEFINITION.
  PUBLIC SECTION.
    METHODS on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING row column.
ENDCLASS.
CLASS lcl_events IMPLEMENTATION.
  METHOD on_double_click.
    MESSAGE |Row { row }, column { column }| TYPE 'I'.
  ENDMETHOD.
ENDCLASS.

" after factory:
DATA(lo_handler) = NEW lcl_events( ).
SET HANDLER lo_handler->on_double_click FOR lo_alv->get_event( ).

18.5 ALV with IDA (HANA)

Only the visible rows are fetched; sorting, filtering, and aggregation run in the database.

cl_salv_gui_table_ida=>create( iv_table_name = 'SFLIGHT' )->fullscreen( )->display( ).
cl_salv_gui_table_ida=>create_for_cds_view( 'ZI_SALESORDER' )->fullscreen( )->display( ).