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.




