Funktionsbaustein POPUP GET VALUES

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Der Funktionsbaustein POPUP_GET_VALUES ist sehr komfortabel, um eine kompakte Dialog-Abfrage auf dem Bildschirm auszugeben, um vom User ein oder mehr Felder abzufragen.

Sehr praktisch an diesem Funktionsbaustein ist, dass die Länge des Abfragefeldes passend generiert wird, eine Typprüfung stattfindet, wenn das richtige Feld als Parameter gefüllt wird und es erscheint eine Wertehilfe, wenn das entsprechende Feld im referenzierenden Tabellenfeld ebenfalls eine Wertehilfe besitzt.

Noch mächtiger und ausführlich dokumentiert ist der Funktionsbaustein POPUP_GET_VALUES_USER_HELP.

Einfacher Screen

Hier soll eine Abfrage des Kundenauftrags erfolgen.

POPUP GET VALUES1.jpg

Vorlage Coding

DATA: lt_fields     TYPE STANDARD TABLE OF sval,
      lv_returncode TYPE c,
      lv_vbeln      type vbak-vbeln.

* Inputfeld Kundenauftrag (Beispiel)
lt_fields = value #( base lt_fields 
                     ( tabname   = 'VBAK'
                       fieldname = 'VBELN'
                       field_obl = abap_true ) ).  
 
CALL FUNCTION 'POPUP_GET_VALUES'
  EXPORTING
*   NO_VALUE_CHECK        = ' '
    popup_title           = 'Abfrage'
    start_column          = '5'
    start_row             = '5'
 IMPORTING
    returncode            = lv_returncode  "space/'A'=Abbruch
 TABLES
    fields                = lt_fields
 EXCEPTIONS
    error_in_fields       = 1
    OTHERS                = 2.
 
IF sy-subrc <> 0.
  MESSAGE i531(0u) WITH 'Problem mit Fuba POPUP_GET_VALUES'.
ENDIF.
  
IF lv_returncode = 'A'.
  RETURN.
ENDIF.
  
lv_vbeln = lt_fields[ 1 ]-value.

Eingabebereitschaft Felder ändern (FIELD_ATTR)

  • Wenn man Felder im Popup-Screen anzeigt, werden sie in aller Regel eingabebereit sein. Das ist die Defaulteinstellung. Aber manchmal möchte man Felder nur anzeigen, aber sie sollen nicht eingabebereit sein. Oder man will Felder eingabebereit haben, aber sie sollen eine Formatierung haben, um sie semantisch hervorzugeben.
  • Hier im Beispiel werden 2 Felder nur zur Anzeige auf den Bildschirm gebracht und 2 weitere mit einer besonderen Formatierung.
  • FIELD_ATTR = '02' bewirkt, dass ein Feld ein reines Anzeigefeld ist
  • FIELD_ATTR = '01' bedeutet, dass ein Feld blau (intensiv) formatiert ausgegeben wird.
  • Bleibt FIELD_ATTR leer, ist das Feld normal eingabefähig, wie hier die Felder ab "TranspMittelart"

POPUP GET VALUES2.jpg

lt_fields = VALUE #( BASE lt_fields
                     ( tabname   = gc_zmm_inbship
                       fieldname = 'ERDAT'          
                       value     = sy-datum
                       field_attr = '02' ) ).     "Nur Anzeige

lt_fields = VALUE #( BASE lt_fields
                     ( tabname   = gc_zmm_inbship
                       fieldname = 'ERNAM'          
                       value     = sy-uname
                       field_attr = '02' ) ).     "Nur Anzeige
 
lt_fields = VALUE #( BASE lt_fields
                     ( tabname   = gc_zmm_inbship
                       fieldname = 'BOLNR' 
                       field_attr = '01' ) ).     "Blaue Formatierung

lt_fields = VALUE #( BASE lt_fields
                     ( tabname   = gc_zmm_inbship
                       fieldname = 'TRAID'
                       field_attr = '01' ) ).     "Blaue Formatierung

lt_fields = VALUE #( BASE lt_fields
                     ( tabname   = gc_zmm_inbship
                       fieldname = 'TRATY'  ) ). 

lt_fields = VALUE #( BASE lt_fields
                     ( tabname   = gc_zmm_inbship
                       fieldname = 'COMMENTS' ) ).

...

Beispiel mit Lieferungsabfrage und DO-ENDDO-Schleife

  • Manches mal macht es Sinn Abfragen abzuprüfen, wenn sich der User z. B. vertippt hat und dann wiederholt das Popup anzuzeigen für die Abfrage, damit der User dann nicht alle Eingaben verliert, die der User bis dahin ausgefüllt hat.
  • Hier wird eine Liefernummer abgefragt, geprüft und dann das Popup in einer DO-ENDO-Schleife angezeigt, bis die Lieferung existiert oder der User abbricht.
 METHOD GET_DELIVERY_FROM_POPUP.

   DATA: lt_fields     TYPE STANDARD TABLE OF sval,
         lv_returncode TYPE c.

   lt_fields = value #( base lt_fields ( tabname   = 'LIKP'
                                         fieldname = 'VBELN'
                                         field_obl = 'X' ) ).

   DO.
     CALL FUNCTION 'POPUP_GET_VALUES'
       EXPORTING
         popup_title     = 'Delivery Selection'
         start_column    = '5'
         start_row       = '5'
       IMPORTING
         returncode      = lv_returncode  "space/'A'=Abbruch
       TABLES
         fields          = lt_fields
       EXCEPTIONS
         error_in_fields = 1
         OTHERS          = 2.

     IF sy-subrc <> 0.
       MESSAGE i531(0u) WITH 'Problem with Fuba POPUP_GET_VALUES'.
     ENDIF.

     IF lv_returncode = 'A'.
       return.
     ENDIF.
 
     READ TABLE lt_fields INTO ls_fields INDEX 1.
     ev_vbeln_lf  = ls_fields-value.

*    Lese Lieferung und von erster Position Werk/Site und Lagerort
     SELECT
       likp~vbeln,
       lips~werks,
       lips~lgort
       INTO (@ev_vbeln_lf,
             @ev_werks,
             @ev_lgort)
       FROM likp
       inner join lips
         on lips~vbeln = likp~vbeln
       up to 1 rows
       WHERE likp~vbeln = @ev_vbeln_lf
       order by lips~posnr.
     endselect.

     IF sy-subrc = 0.
       return.
     else.
       message i146(IS) with ev_vbeln_lf. "Lieferung & existiert nicht
     ENDIF.

   ENDDO.

 ENDMETHOD.

Literatur