[ABAP] SALV-Table: Darstellung (Ausgabeformat) einer Spalte über einen Konvertierungs-Exit anpassen

Beispiel 1: Zeitstempel formatieren (==TSTMP)

DATA: o_alv TYPE REF TO cl_salv_table.

DATA: it_tab TYPE ...

cl_salv_table=>factory( IMPORTING
                          r_salv_table = o_alv
                        CHANGING
                          t_table      = it_tab ).

* Der Inhalt der Spalte 'TIMESTAMP' soll anstelle des zusammengesetzten Standartformates für den p-Datentyp
* eine andere Darstellung, getrennt nach Datum und Uhrzeit, bekommen
* '20180101120101,1234567' -> '01.01.2018 12:01:01'
*
* Dazu wird der vorhandene Konvertierungs-Exit CONVERSION_EXIT_TSTMP_INPUT und CONVERSION_EXIT_TSTMP_OUTPUT
* aufgerufen, indem man das Kürzel '==TSTMP' (mittlere Buchstaben im Bezeichner CONVERSION_EXIT_... ) angibt.
*
* alle vorhandenen Konvertierungs-Exits: Transaktion SE37 -> Funktionsbaustein "CONVERSION_EXIT_*" -> Lupe
* Tabelle: TFDIR
o_alv->get_columns( )->get_column( 'TIMESTAMP' )->set_edit_mask( '==TSTMP' ).

o_alv->display( ).

Beispiel 2: Nachkommastellen abschneiden (==DEC0)

SELECT FROM marc
  FIELDS matnr, werks, eisbe
  INTO TABLE @DATA(it_marc)
  UP TO 100 ROWS.

IF sy-subrc = 0.
  TRY.
*   SALV-Table
      DATA: o_salv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING r_salv_table = o_salv
                              CHANGING  t_table      = it_marc ).

*   Grundeinstellungen
      o_salv->get_functions( )->set_all( abap_true ).
      o_salv->get_columns( )->set_optimize( abap_true ).
      o_salv->get_display_settings( )->set_list_header( 'MARC' ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

*   Spaltenüberschriften: technischer Name und Beschreibungstexte, Short Text und Medium Text leer lassen für Autosize
      LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
        DATA(o_col) = <c>-r_column.
        o_col->set_short_text( || ).
        o_col->set_medium_text( || ).
        o_col->set_long_text( |{ o_col->get_long_text( ) }| ).
      ENDLOOP.

* Sicherheitsbestand --> Nachkommastellen in der Darstellung abschneiden
      o_salv->get_columns( )->get_column( 'EISBE' )->set_edit_mask( value = '==DEC0' ).

      o_salv->display( ).
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.
ENDIF.

Links

[ABAP] Dynpro: Arbeit mit einer Listbox, welche im Screenpainter erzeugt wurde

Dynpro 0100 im Screenpainter definieren

Textfeld vom Typ Listbox einfügen

Variablendefinition im Top-Include des Reports/Modulpools

* globaler Bezeichner für Listbox definieren, dieser muss namensgleich dem
* Bezeichner des Screenpainter-Elements (Listbox) sein
* Über diesen Bezeichner erfolgt der Zugriff aus dem Code heraus
* --> beim Programmstart wird dieser automatisch dem Screenpainter-Elements
* (Listbox) zugeordnet
DATA: lb_listbox TYPE char255.
* globale Liste für Listboxwerte
DATA: it_lb_values TYPE vrm_values.

Dynpro 0100 PBO -> Initialisierung der Listbox

PROCESS BEFORE OUTPUT.

  MODULE status_0100.

  ...

MODULE status_0100 OUTPUT.

* Werteliste für Listbox initialisieren
  it_lb_values = VALUE vrm_values( ( key = 'A' text = 'Wert1' )
                                   ( key = 'B' text = 'Wert2' )
                                   ( key = 'C' text = 'Wert3' ) ).

* Werteliste der Listbox setzen
  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'LB_LISTBOX'
      values          = it_lb_values
    EXCEPTIONS
      id_illegal_name = 1
      OTHERS          = 2.

* Vorauswahl für die Listbox treffen, entsprechenden Key setzen
  lb_listbox = 'A'.

ENDMODULE.

Dynpro 0100 PAI -> Auslesen der Listbox-Auswahl

PROCESS AFTER INPUT.

  MODULE user_command_0100.

  ...

MODULE user_command_0100 INPUT.

  DATA(lv_lb_text) = VALUE char255( ).

* Text aus der Listbox anhand des Keys ermitteln
  TRY.
      lv_lb_text = it_lb_values[ key = lb_listbox ]-text.
    CATCH cx_root.
  ENDTRY.
  
  ...

ENDMODULE.

[ABAP] Grundstruktur für Report mit Dynpro

DATA: ok_code TYPE sy-ucomm.                      " OK-CODE für Benutzer-Kommandos (Buttons, Menü, ...)
DATA: o_cont TYPE REF TO cl_gui_custom_container. " Containerobjekt für andere GUI-Elemente

START-OF-SELECTION.
  " Screen 100 aufrufen, auf diesen muss sich ein
  " Custom-Control 'CNT_MAIN' befinden (Screenpainter)
  " und es muss ein PF-STATUS 'ST_100' und
  " ein GUI-TITLE 'ST_100_TITLE' vorhanden sein
  CALL SCREEN 100.

*---------------------------------------------------------------------*
*      Module  STATUS_0100  OUTPUT
*---------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'ST_100'.
  SET TITLEBAR 'ST_100_TITLE'.

  " cl_gui_custom_container erzeugen und in Container 'CNT_MAIN' ablegen
  " cl_gui_custom_container kann andere GUI-Elemente tragen
  IF o_cont IS NOT BOUND.
    o_cont = NEW cl_gui_custom_container( container_name = 'CNT_MAIN' ).
  ENDIF.
ENDMODULE.
*---------------------------------------------------------------------*
*      Module  USER_COMMAND_0100  INPUT
*---------------------------------------------------------------------*
*      text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    " wenn im PF-STATUS die Kommandos 'BACK' / 'CANCEL' / 'EXIT
    " gesetzt wurden, hier darau reagieren
    WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
      " Container freigeben
      IF o_cont IS BOUND.
        o_cont->free( ).
      ENDIF.

      " Programm beenden
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.