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

REUSE ALV POPUP TO SELECT3.jpg

Die Struktur 'ZSD_SELKZ_VBELN' ist im Data-Dictionary als Struktur angelegt.

Ausgabe Popup

REUSE ALV POPUP TO SELECT4.jpg

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

REUSE ALV POPUP TO SELECT V2.jpg

Ausgabe Popup

REUSE ALV POPUP TO SELECT V1.jpg

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

REUSE ALV POPUP TO SELECT5.jpg

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.

Web-Links