Following snippets enable you to manipulate most ALV functionalities:

DATA:     alv_table TYPE REF TO cl_salv_table,
          alv_ds TYPE REF TO cl_salv_display_settings,
          alv_cols TYPE REF TO cl_salv_columns,
          alv_col TYPE REF TO cl_salv_column,
          alv_func TYPE REF TO cl_salv_functions_list,
          alv_ddic TYPE salv_s_ddic_reference.

*... Create Instance
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = alv_table
    CHANGING
      t_table      = ptab_out.

* add grid lines and background colors
  alv_table->get_display_settings( RECEIVING value = alv_ds ).
  alv_ds->set_vertical_lines( EXPORTING value = 'X' ).
  alv_ds->set_horizontal_lines( EXPORTING value = ' ' ).
  alv_ds->set_striped_pattern( EXPORTING value = 'X' ).
  alv_ds->set_list_header( value = 'Jubiläumsliste' ).

* enable default ALV functions
  alv_table->get_functions( RECEIVING value = alv_func ).
  alv_func->set_all( EXPORTING value = 'X' ).

* set headings (set field references)
  alv_table->get_columns( RECEIVING value = alv_cols ).
* fir column size to match values width
  alv_cols->SET_OPTIMIZE( EXPORTING value = 'X' ).

  "Eintrittsdatum IT 0000
  PERFORM setheadertext USING 'EINDAT_IT00'
      'EintrIT00' 'Eintr IT00' 'Eintritt IT0000'.

  "Austrittsdatum IT 0000
  PERFORM setheadertext USING 'AUSDAT_IT00'
        'AustrIT00' 'Austr IT00' 'Austritt IT0000'.

  "Eintrittsdatum IT 0001
  PERFORM setheadertext USING 'EINDAT_IT01'
        'EintrIT01' 'Eintr IT01' 'Eintritt IT0001'.

  "Eintrittsdatum IT 0016
  PERFORM setheadertext USING 'EINDAT_ERST_IT16'
        'ErstE.IT16' 'ErstEintr IT16' 'Ersteintritt IT0016'.

  PERFORM setheadertext USING 'EINDAT_KONZ_IT16'
        'KonzE.IT16' 'KonzEintr IT16' 'Konzerneintritt IT0016'.

  "PERFORM setheaderfieldreference USING 'EINDAT_ERST_IT16' 'P0016' 'EINDT'.
  "PERFORM setheaderfieldreference USING 'EINDAT_KONZ_IT16' 'P0016' 'KONDT'.

  PERFORM setheadertext USING 'EINDAT_IT41'
        'EintrIT41' 'Eintr IT41' 'Eintritt IT0041'.

  "Theoretischer Eintritt
  PERFORM setheadertext USING 'EINDAT_RECHN'
        'Rechn.Ein' 'Rechn.Eintritt' 'Rechnerischer Eintritt'.
  PERFORM setheadertext USING 'ALTER'
        'Alter' 'Alter' 'Alter'.
  PERFORM setheadertext USING 'DIEJA'
        'DienstJ.' 'Dienstjahre' 'Dienstjahre'.
  PERFORM setheaderfieldreference USING 'SACHN' 'P0001' 'SACHP'.
  PERFORM setheadertext USING 'KTEXT'
        'KstBez' 'Kost.Bez.' 'Kostenstellenbezeichnung'.
  PERFORM setheaderfieldreference USING 'ADRS_LINE1' 'P0006' 'STRAS'.
  PERFORM setheaderfieldreference USING 'ADRS_LINE2' 'P0006' 'ORT01'.

* make columns fit to size
  alv_cols->set_optimize( ).

  IF it16 IS INITIAL.
    alv_cols->get_column( EXPORTING columnname = 'EINDAT_IT41'
                          RECEIVING value = alv_col ).
    alv_col->set_visible( EXPORTING value = ' ' ).
  ENDIF.

  IF it41 IS INITIAL.
    alv_cols->get_column( EXPORTING columnname = 'EINDAT_ERST_IT16'
                          RECEIVING value = alv_col ).
    alv_col->set_visible( EXPORTING value = ' ' ).

    alv_cols->get_column( EXPORTING columnname = 'EINDAT_KONZ_IT16'
                          RECEIVING value = alv_col ).
    alv_col->set_visible( EXPORTING value = ' ' ).
  ENDIF.

*... Display Table
  alv_table->display( ).


*------------------------------------------
* Change reference field for column header
*------------------------------------------
FORM setheaderfieldreference USING
                value(out_field)
                value(ddic_table)
                value(ddic_field).

  TRY.
      alv_cols->get_column( EXPORTING columnname = out_field
                            RECEIVING value = alv_col ).

    CATCH cx_salv_not_found.
      WRITE: / 'ERROR: Spalte ', out_field, ' nicht gefunden.'.
  ENDTRY.

  alv_ddic-table = ddic_table.
  alv_ddic-field = ddic_field.
  alv_col->set_ddic_reference( value = alv_ddic ).

ENDFORM.                    "setHeaderFieldReference

*------------------------------------------
* Set short, middle and long title for column
*------------------------------------------
FORM setheadertext USING
                value(out_field)
                value(title_short)
                value(title_med)
                value(title_long).

  DATA: ts(10) TYPE c,
        tm(20) TYPE c,
        tl(40) TYPE c.

  TRY.
      alv_cols->get_column( EXPORTING columnname = out_field
                            RECEIVING value = alv_col ).

    CATCH cx_salv_not_found.
      WRITE: / 'ERROR: Spalte ', out_field, ' nicht gefunden.'.
  ENDTRY.

  IF STRLEN( title_short ) GT 10.
    ts = title_short(10).
  ELSE.
    ts = title_short.
  ENDIF.

  IF STRLEN( title_med ) GT 20.
    tm = title_med(20).
  ELSE.
    tm = title_med.
  ENDIF.

  IF STRLEN( title_long ) GT 40.
    tl = title_long(40).
  ELSE.
    tl = title_long.
  ENDIF.

  alv_col->set_short_text( value = ts ).
  alv_col->set_medium_text( value = tm ).
  alv_col->set_long_text( value = tl ).

ENDFORM.                    "setHeaderFieldReference

method get_column .

  data: ls_column type salv_s_column_ref.

  read table me->t_columns into ls_column
    with key columnname = columnname.
  if sy-subrc ne 0.
    raise_column_not_found(
      method     = 'GET_COLUMN'
      columnname = columnname ).
  endif.

  value = ls_column-r_column.

endmethod.                    "get_column