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.
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"
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
- Function Modules in ABAP: A Quick Reference Guide, von Tanmaya Gupta, S. 569 (EN)
- Common SAP R/3 Functions Manual, von William Lawlor, S. 262 (EN)

