Aus einem Formular per SAP Script ein Unterprogramm aufrufen und Parameter übergeben

Wer sich mit den -Formularen beschäftigen muss, der weiß, dass einiges nicht so trivial ist, wie man es von anderen Systemen her kennt.

Aus , das in den SAP-Formularen genutzt wird, lässt sich nicht immer auf alle benötigten Daten zugreifen. Das hängt mit dem dahinterliegenden Druckprogramm zusammen. Eine gute Variante zur Problemlösung ist die Nutzung von Unterprogrammen, die mit dem Befehl PERFORM aufgerufen werden. Vielen sicher auch schon aus dem -Umfeld bekannt. Dabei können Parameter übergeben werden und Rückgabeparameter empfangen werden. Das funktioniert auch in Formularen mit SAP-Script.

Hier ist mal ein Beispiel dazu:

Es soll ein Hinweis für AEB (Allg. Einkaufsbedingungen) auf einem SAP-Bestellformular nur dann angezeigt werden, wenn der Lieferant seinen Sitz in Deutschland hat. Dazu wird ein Unterprogramm für das Druckprogramm (hier im Z-Kundennamensraum) erstellt, welches die Lieferantennummer aus dem Bestellformular per SAP-Script übergeben bekommt, das Land des Lieferanten sucht und es an das SAP-Script zurückgibt.

Wichtige Tabellen sind dabei:

  • Tab. EKKO enthält Bestelldaten mit Lieferantennummer
  • Tab. LFA1 enthält Daten zum Lieferanten

Zum Test der SELECT-Abfrage eignet sich übrigens die Transaktion ST04 ganz gut. Hier können SELECT-Abfragen getestet werden.

SAP - Perform-SAP-Script (3)

Der Aufruf für das Unterprogramm erfolgt per SAP-Script aus dem Druckprogramm wie folgt:

SAP - Perform-SAP-Script (2)

Per USING-Anweisung können Variablen an die FORM-Routine im aufgerufenen Unterprogramm (hier GET_SUPPLIER_COUNTRY in Z_SAPFM06P) übergeben werden, von wo aus sie dann verarbeitet und zurückgeliefert werden. Rückgabevariablen werden dabei über CHANGING definiert.

In diesem Beispiel wird im SAP-Script per PERFOM-Anweisung das ABAP-Unterprogramm GET_SUPPLIER_COUNTRY im Programm Z_SAPFM06P aufgerufen. Dabei wird per USING-Anweisung die Lieferantennummer an GET_SUPPLIER_COUNTRY übergeben, dort erfolgt die Suche nach dem Land und als Rückgabewert wird dieser Wert über die Variabel &LIFLAND& (Befehl CHANGING) zurückgeliefert. Damit kann im Bereich SAP-Scirpt nun auf DE geprüft werden und nur für deutsche Lieferanten wird dann die AEB-Aufschrift auf das Formular gedruckt.

SAP - Perform-SAP-Script (1)

Ergebnis: Wenn Lieferant Sitz in DE hat, dann wird der AEB-Hinweis gedruckt.

SAP - Perform-SAP-Script (6)

Umsetzung in Unterprogramm GET_Supplier_Country in Programm Z_SAPFM06P wie folgt:

Programmbeispiel:
*&———————————————————————*
*& FORM  GET_Supplier_Country
*&———————————————————————*
*& Unterprogramm zur Ermittlung vom Stammland des Lieferanten
*& Übergabe von Lieferanten-NR aus SAP-Script von BestForm (MAIN) 
*& an das Programm und Rückgabe des Landes an SAP-Script
*&———————————————————————*

***************************** Ermittlung Land Lieferant 

FORM GET_Supplier_Country tables in_tab structure itcsy
out_tab structure itcsy.
TABLESekko,lfa1.

*erste Zeile von IN_TAB lesen
READ TABLE in_tab INDEX 1.

*mit führenden Nullen auffüllen, da EKKO-LifNr führende Nullen enthält und LFA1-LifNr nicht!
UNPACK in_tabvalue(10TO in_tabvalue(10).

*führende Nullen entfernen, falls es mal gebraucht wird
*SHIFT in_tab-value(10) LEFT DELETING LEADING’0′.

*Selektion von LieferTAB – wo LiefNR gleich BELEG-LiefNR
select single from lfa1 CLIENT SPECIFIED where lifnr in_tabvalue AND mandt symandt.

*Wenn Rückgabewert 0 (also alles i.O.), dann mache…
IF sysubrc 0.
read table out_tab index 1.
move Lfa1Land1 to out_tabvalue.
modify out_tab index sytabix.
ELSE.
READ TABLE out_tab INDEX 1.
MOVE ’nothing‘ TO out_tabvalue.
MODIFY out_tab INDEX sytabix.
ENDIF.

ENDFORM.
************************ ENDE Ermittlung Land Lieferant 

3 Gedanken zu „Aus einem Formular per SAP Script ein Unterprogramm aufrufen und Parameter übergeben

  1. Hallo Cyrano,

    besten Dank für Dein Tutorial.

    Gibt es auch die Möglichkeit, in einem Unterprogramm mehrere Variablen an SAPscript zurückzugeben? Vielleicht auch eine Alternative zur obsoleten Tables-Anweisung?

    Vielen Dank und Gruß
    Eiswurf

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.