Funktionsbaustein REUSE ALV POPUP TO SELECT
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Kategorie: ALV.
Der Funktionsbaustein REUSE_ALV_POPUP_TO_SELECT erstellt eine schöne kompakte Ausgabeliste einer internen Tabelle mit Auswahlmöglichkeit.
Problem Outputlänge
- Beim Funktionsbaustein REUSE_ALV_POPUP_TO_SELECT sollte man vorsichtig sein, dass er nicht die Spalten schmaler ausgibt als notwendig.
- Teilweise ist es notwendig bei der Spaltenbreite die Maximalbreite des Feldes vorzugeben mit OUTPUTLEN"
lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'BSTNK' rollname = 'ZSD_AMAZON' ) ).
- Hier hat das das Datenelement eine Länge von 20 Zeichen. Obwohl auch Werte mit 20 Zeichen auszugeben waren, wurde die Ausgabe abgeschnitten.
- Erst mit der Übergabe vom Fieldcat-Feld "OUTPUTLEN = 20" wurde die notwendige Breite erzwungen.
- Allerdings wurde das Datenelement ZSD_AMAZON zunächst mit der Länge 10 angelegt und erst nach der ersten ALV-Ausgabe auf Länge 20 geändert. Hier kann es sein, dass SAP aus Performancegründen diese Anpassung noch nicht berücksichtigt hatte und den alten Wert gepuffert hatte.
lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'BSTNK' rollname = 'ZSD_AMAZON' outputlen = 20 ) ).
- Ich habe keine Möglichkeit gefunden wie bei anderen ALV-Techniken die optimale Spaltenbreite automatisch entsprechend der maximal möglichen Ausgabelänge festzulegen.
Beispiel1 (Auswahl N Zeilen mit Selektionsbox)
Struktur
Die Struktur 'ZSD_SELKZ_VBELN' ist im Data-Dictionary als Struktur angelegt.
Ausgabe Popup
Bei der Ausführung des Codings erscheint ein Popup. In diesem Fall nur mit einem Datensatz. Es könnten aber auch N Datensätze sein.
Coding
TYPES: BEGIN OF ty_vbfa, vbelv TYPE vbfa-vbelv, posnv TYPE vbfa-posnv, vbeln TYPE vbfa-vbeln, posnn TYPE vbfa-posnn, vbtyp_n TYPE vbfa-vbtyp_n, END OF ty_vbfa. DATA: lt_vbfa TYPE STANDARD TABLE OF ty_vbfa. DATA: lv_exit type c. * Selektion Auslieferungen aus Belegfluß (Tabelle VBFA) SELECT vbelv, posnv, vbeln, posnn, vbtyp_n FROM vbfa WHERE vbelv IN @t_customer_orders AND vbtyp_n = 'J' "Auslieferung INTO TABLE @lt_vbfa. DATA: lt_vbeln_sel TYPE STANDARD TABLE OF zsd_selkz_vbeln. LOOP AT lt_vbfa ASSIGNING FIELD-SYMBOL(<fs_vbfa>) group by ( key1 = <fs_vbfa>-vbelv key2 = <fs_vbfa>-vbeln ). lt_vbeln_sel = value #( ( selkz = space vbeln_va = <fs_vbfa>-vbelv vbeln_vl = <fs_vbfa>-vbeln ) ). ENDLOOP. * REUSE ALV Baustein als POPUP aufrufen CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT' EXPORTING i_title = 'Auswahl Kundenaufträge und Lieferungen' i_selection = 'X' i_checkbox_fieldname = 'SELKZ' i_tabname = 'LT_VBELN_SEL' i_structure_name = 'ZSD_SELKZ_VBELN' IMPORTING e_exit = lv_exit TABLES t_outtab = lt_vbeln_sel EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. if sy-subrc <> 0. message i531(0u) with 'Fehler beim Funktionsb. REUSE_ALV_POPUP_TO_SELECT'. endif. if lv_exit = abap_true. return. endif.
Beispiel2 (Auswahl Zeile mit einfachem Klick)
Struktur
Ausgabe Popup
Coding
Data: lv_exit type char10, ls_selfield type slis_selfield. call function 'REUSE_ALV_POPUP_TO_SELECT' exporting i_title = 'Auswahl Fachbereich' i_selection = 'X' "i_zebra = 'X' i_tabname = 'LT_FUNC' i_structure_name = 'Z_CC_FUNKTIO' importing es_selfield = ls_selfield e_exit = lv_exit tables t_outtab = lt_func exceptions program_error = 1 others = 2. if sy-subrc <> 0. message i531(0u) with 'Fehler beim Funktionsb. REUSE_ALV_POPUP_TO_SELECT'. endif. if lv_exit is = abap_true. return. endif. read table lt_func into ls_func index ls_selfield-tabindex. "in ls_selfield-tabindex steht der Index der angeklickten Zeile
Beispiel3 (Selektionsboxen, Fieldcat und Ausschluss von Funktionscodes)
Ausgabe Popup
Coding
DATA: lt_fcat TYPE slis_t_fieldcat_alv, lt_excluding TYPE slis_t_extab. * Ausschluss von Funktionscodes in Symbolleiste lt_excluding = value #( ( fcode = '&ALL' ) ( fcode = '&SAL' ) ( fcode = '%SC+' ) ( fcode = '&OL0' ) ( fcode = '&CRB' ) ( fcode = '&CRB' ) ( fcode = '&CRL' ) ( fcode = '&CRR' ) ( fcode = '&CRE' ) ( fcode = '&ETA' ) ). * Fieldcat wird gefüllt (statt Struktur) lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'QMNUM' ref_fieldname = 'QMNUM' ref_tabname = 'QMEL' key = abap_true ) ). lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'ERDAT' ref_fieldname = 'ERDAT' ref_tabname = 'QMEL' ) ). lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'PARNR' ref_fieldname = 'PARNR' ref_tabname = 'IHPA' ) ). lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'QMCOD' ref_fieldname = 'QMCOD' ref_tabname = 'QMEL' ) ). lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'KURZTEXT' ref_fieldname = 'KURZTEXT' ref_tabname = 'QPCT' ) ). lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'TXT04' rollname = 'ZSD_MELDUNGSSTATUS' outputlen = 20 ) ). lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'TXT30' rollname = 'ZSD_MELDUNGSLANGTEXT' outputlen = 50 ) ). lt_fcat = VALUE #( BASE lt_fcat ( fieldname = 'TJ30T_TXT04' rollname = 'ZSD_J_TXT04' outputlen = 15 " input = abap_true "eingabefähig ) ). * REUSE ALV Baustein als POPUP aufrufen CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT' EXPORTING i_title = 'Auswahl QM-Meldung' i_selection = 'X' i_checkbox_fieldname = 'SELKZ' i_tabname = 'LT_NOTIFICATIONS' it_fieldcat = lt_fcat it_excluding = lt_excluding TABLES t_outtab = lt_notifications EXCEPTIONS OTHERS = 2. if sy-subrc <> 0. message i531(0u) with 'Fehler beim Funktionsb. REUSE_ALV_POPUP_TO_SELECT'. endif.