Zahlungskonditionen (Skonto) auf SAP Formular drucken – das 80 Zeichen Problem

In diesem Artikel geht es darum, die Zahlungskonditionen (Skonto) auf das SAP-Bestellformular aufzudrucken. Leider ist genau dies in SAP nicht so trivial wie manch andere Infos, bspw. die Incoterms, auf das zu bringen.

Um die Zahlungsbedingungen auszulesen, bietet SAP einen Funktionsbaustein (FuBa) an. Dieser nennt sich SD_PRINT_TERMS_OF_PAYMENT. Damit findet man schon einige Informationen im Internet. Das eigentliche Problem ergibt sich aber erst später, nämlich dann, wenn man aus dem Druckprogramm die Daten wieder an das Formular sendet. Die Grenze bzw. Länge für die Zeichenkette (STRUCTURE itcsy) ist leider auf 80 Zeichen beschränkt. Man muss es also stückeln bzw. mehrere Variablen nutzen.

Wie man ein Unterprogramm erstellt und dieses aus dem SAP-Formular aufruft, habe ich bereits im Artikel Aus einem Formular per SAP Script ein Unterprogramm aufrufen und Parameter übergeben beschrieben. Dort kam bereits die Frage nach der Lösung des Problems der 80-Zeichen-Beschränkung. Hier also nebenbei auch die Lösung dazu.

So soll es aussehen, wenn alles fertig ist.

SAP_Zahlungsbedingungen_1

Schritte zur Lösung:

  1. Unterprogramm im SAP-Druckprogramm erstellen und Funktionsbaustein nutzen
  2. SAP-Formular für Datenübergabe und Datenübernahme modifizieren

 

Schritt 1 – Das Unterprogramm mit dem Funktionsbaustein:

Unterprogramm erstellen! Siehe dazu Artikel Aus einem Formular per SAP Script ein Unterprogramm aufrufen und Parameter übergeben

So sieht es dann aus:

*&——————————————————————————————————————————————–*
*& Form  GET_terms_of_payment
*&——————————————————————————————————————————————–*
*& Unterprogramm zur Ermittlung der Zahlungsbedingungen der Bestellung
*& Übergabe Bedingungskürzel aus SAP Script von Bestellformular (MAIN)
*& ans Programm und Rückgabe der Zahlungsbedingung an SAP Script
*&——————————————————————————————————————————————–*
* Beginn des Unterprogramms mit In- und Ausgabestruktur für die Werte
FORM get_terms_of_payment TABLES intxt STRUCTURE itcsy
outtxt STRUCTURE itcsy.
TABLES: t052.
DATA: it_t052 LIKE t052,
line TYPE c LENGTH 200,
text_tab LIKE STANDARD TABLE OF line,
temp_text TYPE c LENGTH 200,
TYPE c LENGTH 200.

READ TABLE intxt INDEX 1.
SELECT SINGLE FROM t052 CLIENT SPECIFIED INTO it_t052
WHERE zterm intxtvalue AND mandt symandt.


CALL FUNCTION ‚ME_PRINT_T052‘
EXPORTING
i_t052    it_t052
language  sylangu
TABLES
zbtxt     text_tab
EXCEPTIONS
not_found 1.


*Ausgabe

IF sysubrc 0.

* Als Hilfe für das Zählen vom Index
* habe ich mir eine Variable index_count erstellt
DATA index_count TYPE integer.
index_count 1.
READ TABLE outtxt INDEX 1.


LOOP AT text_tab INTO temp_text. 


READ TABLE outtxt INDEX index_count.
MOVE temp_text TO outtxtvalue.
MODIFY outtxt FROM outtxt INDEX index_count.
index_count index_count + 1.


ENDLOOP.

ELSE.
READ TABLE outtxt INDEX 1.
MOVE ’nothing‘ TO outtxtvalue.
MODIFY outtxt INDEX sytabix.
ENDIF.
ENDFORM.                    “ ENDE GET_terms_of_payment

 

Schritt 2 – Die Modifikation des SAP-Formulars für Datenübergabe und Datenübernahme an und von dem Unterprogramm und die Lösung des 80-Zeichen-Problems:


/*    Unterprogramm GET_TERMS_OF_PAYMENT
/*    aus dem SAP Druckprogramm Z_SAPFM06P aufrufen
 
/:    PERFORM GET_TERMS_OF_PAYMENT IN PROGRAM Z_SAPFM06P

/*    per USING wird ein Wert an das Unterprogramm übergeben,
/*    hier der Wert der Zahlungskonditionen, den man im
/*    Bestellkopf gewählt hat
/*    (oben im Bild mit 0003 dargestellt).


/:    USING &EKKO-ZTERM&

/*    CHANGING übernimmt die Werte aus dem Unterprogramm,
/*    hier gibt es 3 Container oder Variablen, denn ich übergebe
/*    aus dem Unterprogramm 3 Werte/Zeilen
/*    für die Zahlungskonditionen


/:    CHANGING &OUTTXT1&

/:    CHANGING &OUTTXT2&
/:    CHANGING &OUTTXT3&

/*    ENDPERFORM schließt den Aufruf des Unterprogramms
/*    und Werteübergabe/-nahme aus dem und in das Formular ab


/:    ENDPERFORM

/*    ** ENDE Ermittlung Zahlungsbedingung-TXT **


/*    Wenn im Unterprogramm ein Fehler auftrat,
/*    wird nothing zurückgeliefert,
/*    d.h. es wird an dieser Stelle geprüft…
/*    WENN nicht nothing geliefert, mache…


/:    IF &OUTTXT1& NE ’nothing‘

/*    Schreibe auf Formular …
/*  und dazu den Inhalt aus Rückgabeparameter 1


A4    Zahlungsbedingungen:,,&OUTTXT1&

/*    Zeilenumbruch und Text einrücken…
/*  und schreibe … Inhalt aus Rückgabeparameter 2
/*  und dann noch 3

/=    ,,,,,,,,,,&OUTTXT2&

/=    ,,,,,,,,,,&OUTTXT3&
/:    ENDIF

SAP_Zahlungsbedingungen_2

Kommentar verfassen

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