Wer sich mit den SAP-Formularen beschäftigen muss, der weiß, dass einiges nicht so trivial ist, wie man es von anderen Systemen her kennt.
Aus SAP-Script, 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 ABAP-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.
Der Aufruf für das Unterprogramm erfolgt per SAP-Script aus dem Druckprogramm wie folgt:
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.
Ergebnis: Wenn Lieferant Sitz in DE hat, dann wird der AEB-Hinweis gedruckt.
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.
TABLES: ekko,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_tab–value(10) TO in_tab–value(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_tab–value AND mandt = sy–mandt.
*Wenn Rückgabewert 0 (also alles i.O.), dann mache…
IF sy–subrc = 0.
read table out_tab index 1.
move Lfa1–Land1 to out_tab–value.
modify out_tab index sy–tabix.
ELSE.
READ TABLE out_tab INDEX 1.
MOVE ‘nothing’ TO out_tab–value.
MODIFY out_tab INDEX sy–tabix.
ENDIF.
ENDFORM.
************************ ENDE Ermittlung Land Lieferant
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
Die Tables-Variante hat bei der Übergabe an SAP-Script leider auch noch den Nachteil, dass sie nur 80 Zeichen zurückliefert. Dieses Problem habe ich aktuell. Eine Alternative zur Tables-Anweisung habe ich noch nicht finden können, jedenfalls keine hilfreiche Variante. Ich bleibe aber dran und löse das Rätsel, wenn ich eine Lösung habe. VG!
Hier ist, wie versprochen, eine Anleitung für die Übergabe mehrerer Variablen:
http://www.dacomsys.de/zahlungskonditionen-auf-sap-formular-drucken-80-zeichen-problem/
VG!