Code: Alles auswählen.
DATA r_alv TYPE REF TO cl_salv_table.
DATA r_docker TYPE REF TO cl_gui_docking_container.
INITIALIZATION.
CREATE OBJECT r_docker
EXPORTING
repid = sy-cprog
extension = 500
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Fehlerbehandlung
ENDIF.
r_docker->dock_at(
EXPORTING
side = cl_gui_docking_container=>dock_at_bottom
EXCEPTIONS
cntl_error = 1
OTHERS = 2
).
IF sy-subrc <> 0.
* Fehlerbehandlung
ENDIF.
START-OF-SELECTION
* Datenbeschaffung durch select
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = r_docker
IMPORTING
r_salv_table = r_alv
CHANGING
t_table = <fs_tab>
).
CATCH cx_salv_msg .
ENDTRY.
r_alv->display( ).
Code: Alles auswählen.
WRITE 'Fehler beim Aufbau des ALV'.
Code: Alles auswählen.
* ------------------------------------------------------------------
* | |
* | Report Y_SIMPLE_ALV |
* | |
* |------------------------------------------------------------------
* | |
* | Das Programm ist eine Demo für einen |
* | simplen Selektion-Screen und SALV Listausgabe. |
* | |
* |------------------------------------------------------------------
* | Anforderer: XXX |
* |------------------------------------------------------------------
* | Programmierer, Datum - Änderungen, Datum |
* ------------------------------------------------------------------
REPORT Y_SIMPLE_ALV.
TABLES: mara.
* ------------------------------
*--------------------------------| Definitionen + Deklarationen |--------------------------------
* ------------------------------
* Tabellentypen
TYPES: BEGIN OF ty_mara,
matnr TYPE matnr,
erdat TYPE erdat,
groes TYPE groes,
ntgew TYPE ntgew,
END OF ty_mara.
* Datentabellen
DATA: gt_auswertung TYPE STANDARD TABLE OF ty_mara.
* Workareas
* Hilfsvariablen
* salv Listausgabe
DATA: go_alv TYPE REF TO cl_salv_table,
go_column TYPE REF TO cl_salv_column_table,
go_columns TYPE REF TO cl_salv_columns_table,
go_functions TYPE REF TO cl_salv_functions_list, " toolbar
go_display TYPE REF TO cl_salv_display_settings,
go_layout TYPE REF TO cl_salv_layout,
go_selections TYPE REF TO cl_salv_selections, " multiselect
go_sort TYPE REF TO cl_salv_sorts, " von Anfang an sortiert ausgeben
gx_salv_msg TYPE REF TO cx_salv_msg, " exceptions
gx_salv_not_found TYPE REF TO cx_salv_not_found,
gx_salv_existing TYPE REF TO cx_salv_existing,
gx_salv_data_error TYPE REF TO cx_salv_data_error,
gs_layoutkey TYPE salv_s_layout_key.
* ------------------
*----------------------------------------| Selektion-Screen |------------------------------------
* ------------------
SELECTION-SCREEN: BEGIN OF BLOCK param WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_matnr FOR mara-matnr. " Mat-Nr
SELECTION-SCREEN: END OF BLOCK param.
SELECTION-SCREEN: BEGIN OF BLOCK limit WITH FRAME TITLE TEXT-002.
PARAMETERS: p_limit TYPE p_dbacc. " max. Anzahl Treffer
SELECTION-SCREEN: END OF BLOCK limit.
* -------------------
*----------------------------------------| Datenaufbereitung |-----------------------------------
* -------------------
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_auswertung
FROM mara
WHERE matnr IN s_matnr
ORDER BY matnr.
* ---------
*---------------------------------------------| Ausgabe |----------------------------------------
* ---------
IF sy-subrc = 0.
PERFORM get_alv_settings.
go_alv->display( ).
ELSE.
PERFORM no_entries. " Fehlermeldung wenn keine Daten gefunden wurden
ENDIF.
*mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
*---------------------------------------------------------------------*
* Form get_alv_settings
*---------------------------------------------------------------------*
* Ergebnisumfeld und -tabelle erstellen
*----------------------------------------------------------------------*
FORM get_alv_settings.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = go_alv
CHANGING
t_table = gt_auswertung ).
CATCH cx_salv_msg INTO gx_salv_msg.
MESSAGE 'Die Listenausgabe konnte nicht generiert werden' TYPE 'E'.
ENDTRY.
* Zeilen farblich unterscheiden
TRY.
go_display = go_alv->get_display_settings( ).
go_display->set_striped_pattern( abap_true ).
CATCH cx_salv_data_error INTO gx_salv_data_error.
ENDTRY.
* Spaltenbreite optimieren
TRY.
go_columns = go_alv->get_columns( ).
go_columns->set_optimize( 'X' ).
CATCH cx_salv_data_error INTO gx_salv_data_error.
ENDTRY.
* Tabelle direkt sortiert ausgeben (damit auch gleiche Spalteninhalte zusammenfügen)
TRY.
go_sort = go_alv->get_sorts( ).
CATCH cx_salv_data_error INTO gx_salv_data_error.
ENDTRY.
TRY.
go_sort->add_sort('MATNR').
CATCH cx_salv_data_error INTO gx_salv_data_error.
CATCH cx_salv_not_found INTO gx_salv_not_found.
CATCH cx_salv_existing INTO gx_salv_existing.
ENDTRY.
* Funktionstasten (Sortieren, Filtern, Excel-Export etc.)
go_functions = go_alv->get_functions( ).
go_functions->set_all( abap_true ).
* Dem Benutzer erlauben, eigene Anzeigevarianten zu speichern
go_layout = go_alv->get_layout( ).
gs_layoutkey-REPORT = sy-repid.
go_layout->set_key( gs_layoutkey ).
go_layout->set_default( abap_true ).
go_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
* Dem Benutzer erlauben, mehrere Zellen/Zeilen/Spalten zu selektieren
go_selections = go_alv->get_selections( ).
CALL METHOD go_selections->set_selection_mode
EXPORTING
VALUE = if_salv_c_selection_mode=>multiple.
* Titel
go_display = go_alv->get_display_settings( ).
go_display->set_list_header( 'Auswertung aller Materialien im selektierten Bereich' ).
* Eigenes Menü (GUI-Status)
CALL METHOD go_alv->set_screen_status(
EXPORTING
REPORT = sy-repid
pfstatus = 'STANDARD'
set_functions = go_alv->c_functions_all ).
ENDFORM. "get_alv_settings
*mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
*---------------------------------------------------------------------*
* Form no_entries
*---------------------------------------------------------------------*
* Falls keine Daten gefunden werden ein PopUp anzeigen
*----------------------------------------------------------------------*
FORM no_entries.
IF gt_auswertung IS INITIAL.
MESSAGE 'Keine Daten gefunden!' TYPE 'I'.
ENDIF.
ENDFORM. "no_entries
Aber wenn du die Version der ALV-Erzeugung verwendest wo kein Container mitgegeben wird kannst du z.B. keine kleinen Exception-Symbole ( LED statt Ampel ) verwenden, weil der Salv dann in der Method set_exception_column den Eintrag im Parameter group ignoriert.Legxis hat geschrieben:Wenn du nur einen einfachen Selektion-Screen und dann einen SALV haben willst, wieso dann so kompliziert mit Container und eigenem Dynpro? Geht doch auch automatisch
Der Aufbau des Docking-Containers muss, glaub ich, auch im START-OF-SELECTION durchgeführt werden.
Sonst funktioniert nämlich nur der allererste Aufruf, weil der Report-Prozessor nach der Anzeige der Ergebnisse und bei der Rückkehr zum Selection-Screen das Programm in Wirklichkeit neu startet. Die Eingaben im Selection-Screen werden dabei über ein eigenes Memory übergeben und alle anderen Variablen gelöscht. Soweit ich weiß (nicht ausgetestet) wird dabei das INITIALIZATION nicht mehr durchlaufen, weil sonst die Werte aus dem Selection-Screen wieder auf den Anfangswert gesetzt werden würden. Somit verlierst du auch die Instanzierung des Docking-Containers.
Und du solltest, wie black_adept schreibt, ein eigenes Dynpro für die Ausgabe verwenden.