ALV-Vorlage REUSE ALV GRID DISPLAY LVC
Siehe Reporting.
Siehe Report-Vorlage mit Form-Routinen.
Siehe Report-Vorlage mit Lokaler Klasse.
Siehe ALV-Vorlage CL GUI ALV GRID.
Siehe ALV-Vorlage REUSE ALV GRID DISPLAY LVC.
Siehe ALV-Vorlage CL SALV* (Factory).
Siehe Vorlage Upload/Download Datei Frontend.
Siehe Vorlage Upload CSV-Datei mit Job-Steps und Suche nach Stichwort in Programmen.
Siehe Kategorie: ALV.
Siehe Kategorie: ABAP-Vorlagen.
Die Nutzung dieses ALV-Funktionsbausteins "REUSE_ALV_GRID_DISPLAY_LVC" ist häufig sehr effektiv. Mit der entsprechenden Vorlage (Wie hier) kommt man sehr schnell zu Ergebnissen, das Coding ist relativ übersichtlich, gut kopierbar von einem Report zum nächsten, optisch ansehnlich, es sind eingabefähige ALV-Listen möglich und die Funktionalität des Funktionsbausteins kann bei Bedarf auch objektorientiert durch ALV-Methoden erweitert werden.
Allerdings funktioniert dieser Funktionsbaustein nicht in globalen Klassen, da bei diesem Funktionsbaustein auch Form-Routinen genutzt werden und die sind in Klassen nicht zulässig. Als Workaround könnte man in globalen Klassen einen Z-Funktionsbaustein aufrufen, der das Coding vom Funktionsbaustein REUSE_ALV_GRID_DISPLAY_ALV enthält. Siehe Nutzung Form-Routinen im Funktionsbaustein. Möchte man dem LVC-Baustein im Z-Funktionsbaustein einen GUI-Status oder GUI-Title zuordnen, sind diese im Programm der Funktionsgruppe (dem Hauptprogramm des Includes des Z-Funktionsbausteins) zu speichern. Meist wird man in Klassen jedoch die objektorientierten ALV-Ausgaben programmieren. Die Kombination von Klassen und dem LVC-Baustein in einem Z-Funktionsbaustein wird eher für hartgesottene Fans des LVC-Bausteins sein, die sich nicht mit den objektoriertierten ALV-Varianten anfreunden können. Hier ist Mut zu machen an die SAP-Entwickler und den Einarbeitungsaufwand nicht zu scheuen, sich in die objektorientierten ALV-Varianten einzuarbeiten und die eigene Werkzeugkiste um die objektorientierte ALV-Technologie zu erweitern und sich dann eine Vorlage zu erstellen, die als Kopiervorlage für neue objektorientierte ALV-Ausgaben dient.
- Was ist noch zu tun nach dem Einfügen des Codings ab "Data & Types
- Die Felder im Type TY_ITAB durch die benötigten Felder ersetzen.
- Die Parameter/Select-Options einfügen.
- Die Form-Routine GET_DATA anpassen mit der Datenselektion.
- Die Form-Routine ALV_ITAB_FCAT mit Feldern des Feldkatalogs einfügen.
"Data & Types
**************** * DATA & TYPES * **************** Types: begin of ty_itab, kunnr type kna1-kunnr, end of ty_itab. Types: tty_itab type standard table of ty_itab. Data: gt_itab type Standard table of ty_itab ##NEEDED.
"Parameters
************** * PARAMETERS * ************** SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: p_vari TYPE disvariant-variant. "Layout SELECTION-SCREEN END OF BLOCK b1.
"Initialization
****************** * INITIALIZATION * ****************** INITIALIZATION. PERFORM initialization.
"At Selection-Screen
*********************** * AT SELECTION-SCREEN * *********************** at selection-screen.
"At Selection-Screen on value-request for p_vari
*----------------------------------------------------------------------* * AT SELECTION-SCREEN ON VALUE-REQUEST FOR <field> *----------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM at_selection_screen_for_vari USING if_salv_c_layout=>restrict_none "benutzerspz. und allg. Layoutvarianten CHANGING p_vari.
"Start-of-Selection
********************** * START-OF-SELECTION * ********************** start-of-selection. perform get_data changing gt_itab. ******************** * END-OF-SELECTION * ******************** end-of-selection. ************************ * Aufruf der ALV-Liste * ************************ perform alv_itab using gt_itab.
"Form-Routinen
"Form Initialization
*&---------------------------------------------------------------------* *& Form INITIALIZATION *&---------------------------------------------------------------------* * Default Routinen *----------------------------------------------------------------------* FORM initialization. DATA: ls_variant TYPE disvariant. "Anzeigevariante (externe Verwendung) "SET TITLEBAR 'TITLE' WITH 'Neuer Reporttitel'. "CONSTANTS: lc_handle_num1 TYPE c VALUE '1'. "nur nötig, wenn es in einem Report > 1 ALV-Listen gibt * Defaultlayoutvariante wird in das Feld P_VARI geschrieben ls_variant-report = sy-repid. "ls_variant-handle = lc_handle_num1. CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' EXPORTING i_save = 'A' CHANGING cs_variant = ls_variant EXCEPTIONS not_found = 2. IF sy-subrc = 0. p_vari = ls_variant-variant. ENDIF. ENDFORM. "INITIALIZATION
"Form at_selection_screen_for_vari
*&---------------------------------------------------------------------* *& Form AT_SELECTION_SCREEN_FOR_VARI *&---------------------------------------------------------------------* * Liste aller Layoutvarianten wird angeboten und gewählt *----------------------------------------------------------------------* FORM at_selection_screen_for_vari USING iv_restrict TYPE salv_de_layout_restriction CHANGING cv_vari TYPE disvariant-variant. DATA: ls_layout TYPE salv_s_layout_info, ls_key TYPE salv_s_layout_key. ls_key-report = sy-repid. * ls_key-HANDLE = 'NUM1'. "Wenn mehrere ALV-Liste im Report, die mit HANDLE unterschieden werden ls_layout = cl_salv_layout_service=>f4_layouts( s_key = ls_key restrict = iv_restrict ). cv_vari = ls_layout-layout. ENDFORM. " AT_SELECTION_SCREEN_FOR_VARI
"Form alv_itab
**&--------------------------------------------------------------------- **& Form alv_itab *&--------------------------------------------------------------------- * ALV Function Mod. 'REUSE_ALV_GRID_DISPLAY_LVC' *---------------------------------------------------------------------- FORM alv_itab using it_itab type tty_itab. type-pools: slis. data: lv_repid type sy-repid, lt_fcat type LVC_T_FCAT, ls_layout type LVC_S_LAYO, * ls_sort type LVC_S_SORT, * lt_sort type LVC_T_SORT, * lt_excluding TYPE SLIS_T_EXTAB, lt_events type slis_t_event, ls_variant type disvariant. lv_repid = sy-repid. **************** * Fill Variant * **************** ls_variant = value #( report = lv_repid username = sy-uname variant = p_vari ). *************** * Fill Layout * *************** perform alv_itab_layout changing ls_layout. ************* * Fill Sort * ************* *lt_sort = value #( base lt_sort * ( fieldname = ' ' "Identische Werte, die übereinander stehen, werden * spos = '1' "verbunden und nur der oberste Wert wird angezeigt * up = 'X' * group = 'UL' * subtot = 'X' ) ). "Zwischensummen *************** * Fill Events * *************** perform alv_itab_events "Definition Events und Form-Routinten für changing lt_events. "User-Command, Top-Of-List und Status ***************** * Fill Fieldcat * ***************** perform alv_itab_fcat "Definition Felder, die ausgegeben werden sollen changing lt_fcat. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_interface_check = 'I' i_callback_program = lv_repid is_layout_lvc = ls_layout "Layout ALV it_fieldcat_lvc = lt_fcat "Tabellen mit Feldern der Liste "IT_EXCLUDING = lt_excluding "Funktionscodes, die ausgeschlossen werden sollen "it_sort_lvc = lt_sort "Sortierung i_default = 'X' "Default Variante kann abgespeichert werden i_save = 'A' "Benutzerabhängige Varianten können gespeichert werden is_variant = ls_variant "Layoutvariante ziehen IT_EVENTS = lt_events "Event-Tabelle "i_screen_start_column = 10 "i_screen_start_line = 10 "i_screen_end_column = 50 "i_screen_end_line = 50 TABLES t_outtab = it_itab "Daten Ausgabetabelle EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. message i531(0u) with 'Problem beim Fuba REUSE_ALV_GRID_DISPLAY_LVC'. ENDIF. ENDFORM. " alv_itab
"Form alv_itab_layout
*&---------------------------------------------------------------------* *& Form ALV_ITAB_LAYOUT *&---------------------------------------------------------------------* *& ALV Layout füllen *&---------------------------------------------------------------------* FORM alv_itab_layout CHANGING cs_layout TYPE lvc_s_layo. * cs_layout-zebra = 'X'. "Liste wird im Zebra-Look ausgegeben * cs_layout-box_fname = 'SELKZ'. "Zeilen der Liste können markiert werden mit Spalte SELKZ * cs_layout-no_rowmark = abap_true. * cs_layout-no_toolbar = 'X'. "Keine Toolbar * cs_layout-excp_fname = 'AMPEL'. "'1'=rot, '2'=gelb, '3'=grün * cs_layout-excp_led = 'X'. " 'X'=LED, sonst Ampel * cs_layout-totals_bef = 'X'. "Summen vor Einzelsätzen cs_layout-cwidth_opt = 'A'. "Spaltenbreite wird optimiert cs_layout-ctab_fname = 'CELLCOL'. "Tabellenfeld mit Zellfarben ENDFORM.
"Form pf_status_set
*&---------------------------------------------------------------------* *& Form pf_status_set *&---------------------------------------------------------------------* * Kopie des Standardstatus STANDARD aus der Funktionsgruppe SALV *----------------------------------------------------------------------* form alv_itab_pf_status_set using it_extab type slis_t_extab. "#EC CALLED set pf-status 'STATUS' excluding it_extab. "set TITLEBAR 'TITLE'. endform. "pf_status_set
"Form alv_itab_events
*&---------------------------------------------------------------------* *& Form alv_itab_events *&---------------------------------------------------------------------* * ALV-Events *----------------------------------------------------------------------* form alv_itab_events changing pct_events type SLIS_T_EVENT. pct_events = VALUE #( ( name = 'USER_COMMAND' form = 'ALV_ITAB_USER_COMMAND' ) ( name = 'TOP_OF_PAGE' form = 'ALV_ITAB_TOP_OF_PAGE' ) ( name = 'PF_STATUS_SET' form = 'ALV_ITAB_PF_STATUS_SET' ) ). endform. " alv_itab_events
"Form alv_itab_fcat
*&---------------------------------------------------------------------* *& Form alv_itab_fcat *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* form alv_itab_fcat "LVC_S_FCAT changing ct_fcat type LVC_T_FCAT. ** Field = * ct_fcat = value #( base ct_fcat ( fieldname = ' ' * ref_field = ' ' * ref_table = ' ' * key = abap_true * ) ). * ** Field = * ct_fcat = value #( base ct_fcat ( fieldname = ' ' * ref_field = ' ' * ref_table = ' ' * ) ). ** Field = * ct_fcat = value #( base ct_fcat ( fieldname = ' ' * ref_field = ' ' * ref_table = ' ' * ) ). * ** Field = * ct_fcat = value #( base ct_fcat ( fieldname = ' ' * ref_field = ' ' * ref_table = ' ' * ) ). * ** Field = * ct_fcat = value #( base ct_fcat ( fieldname = ' ' * ref_field = ' ' * ref_table = ' ' * ) ). * ** Field = * ct_fcat = value #( base ct_fcat ( fieldname = ' ' * ref_field = ' ' * ref_table = ' ' * ) ). * ** Field = * ct_fcat = value #( base ct_fcat ( fieldname = ' ' * ref_field = ' ' * ref_table = ' ' * ) ). * * fieldname = ' ' "Fieldname Itab ALV, obligatory field * ref_field = ' ' "Referencefield * ref_table = ' ' "Referecetable * rollname = ' ' "Dataelement (alternativ to referencefield and referencetable) * cfieldname = ' ' "Reference currency fields * qfieldname = ' ' "Referenz quantity fields * SCRTEXT_L = ' ' * SCRTEXT_M = ' ' * SCRTEXT_S = ' ' "max 10 letters * REPTEXT = ' ' * SELTEXT = ' ' * tooltip = ' ' "Tooltip * convexit = 'ALPHA' "Konvertierungsexit ALPHA (Columnvalues without leading 0) * outputlen = 10 "Outputlength * emphasize = 'C300' "Color column Beige * edit = abap_true "Field with input * f4availabl = abap_true "F4-Valuehelp will be forced * do_sum = abap_true "Sum values on field * icon = abap_true "Display value as Icon * checkbox = abap_true "Display field as checkbox (space/X intern) * key = abap_true "Display field as key (blue color and stable colum while scrolling left/right) * no_zero = abap_true "No display 0-values endform. " alv_fcat
"Form user-command
*&--------------------------------------------------------------------- *& Form USER_COMMAND *&--------------------------------------------------------------------- * User Command *---------------------------------------------------------------------- form alv_itab_user_command "#EC CALLED using r_ucomm type sy-ucomm rs_selfield type slis_selfield. Data: ls_itab type ty_itab. DATA: lo_ref_alv TYPE REF TO cl_gui_alv_grid, lt_index_columns TYPE lvc_t_col, lv_valid TYPE c. "#EC NEEDED * geänderte Daten holen * Referenz auf ALV holen CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = lo_ref_alv. * Gibt die geänderte ITAB zurück * Wenn die Feldprüfung für geänderte Daten nicht erfolgreich, dann ist lv_valid = space CALL METHOD lo_ref_alv->check_changed_data IMPORTING e_valid = lv_valid. * Liest die selektierten Spalten CALL METHOD lo_ref_alv->get_selected_columns IMPORTING et_index_columns = lt_index_columns. * Prüfe ob ein Doppelklick auf eine Zeile erfolgte case r_ucomm. when '&IC1'. * Read line of clicked item read table gt_itab index rs_selfield-tabindex into ls_itab. * case rs_selfield-fieldname. * * when ' '. * endcase. endcase. endform. " USER_COMMAND_ITAB
"Form top_of_page
*--------------------------------------------------------------------- * FORM top_of_page *--------------------------------------------------------------------- * Fülle Header für ALV-Listen *---------------------------------------------------------------------- FORM alv_itab_top_of_page. "#EC CALLED DATA: lt_listheader TYPE slis_t_listheader, lv_datum(10) TYPE c. * Schreibe Anzahl Datensätze Reporte in Grid Titel Data(lv_lines) = lines( gt_itab ). * Datum in Ausgabeform bringen WRITE sy-datum TO lv_datum. lt_listheader = value #( ( typ = 'S' key = 'Datum' info = lv_datum ) ( typ = 'S' key = 'Anzahl Datensätze' info = lv_lines ) ). CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = lt_listheader. * I_LOGO = * I_END_OF_LIST_GRID = ENDFORM.
"Form get_data
*&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * Lesen Daten *----------------------------------------------------------------------* FORM get_data CHANGING ct_itab type tty_itab. if sy-subrc <> 0. MESSAGE i550(fre). "Keine Datensätze gefunden leave list-processing. endif. ENDFORM.