Globale interne Tabelle in Schnittstelle positionsabhängig in Formular ausgeben (AdobeForms)

Aus SAP Wiki ツ


Anforderung

Bei bestehenden Formularen, die mit einem Standard Druckprogramm gedruckt werden und Ergänzungscode im Codeabschnitt der Schnittstelle erfolgt, besteht oft die Anforderung den Positionsdaten um weitere Felder zu ergänzen.

So könnte es z.B. sein, dass irgendein Positionstext des Beleges noch gedruckt werden soll. Da es ein Standard Druckprogramm ist, kann dort also keine Anpassungen ohne Modizifierungen geschehen. Aus diesem Grund macht man sich die Möglichkeit zu Nutze eben eine globale Variable d.h. eine interne Tabelle in der Schnittstelle zu deklarieren und abhängig der Positionen den Text zu ermitteln.

Das Ziel ist hier also durch die Positionen zu loopen und in der internen Tabelle mind. die Positionsr. und eben den entsprechenden Text in ein String zu speichern.

Wenn dieses Vorspiel erledigt ist, kommt die eigentliche Erklärung oder Sinn dieser Wiki-Seite:
=> Es zu schaffen, dass das Formular weiß wie es durch diese globale interne Tabelle laufen kann, ohne die Positionsdaten des Standard Druckprogramms zu modifizieren.

Kurz ist noch zu erwähnen, wenn ein Z-Druckprogramm genutzt wird, sollte man es an dieser Stelle anpassen und so weit es geht den Codeabschnitt in der Schnittstelle ignorieren. Persönliche Meinung ist, wenn für jedes neue Formular auch neue Schnittstellen gibt, hat man hier u.U. redudanten Code oder zumindestens selbe Methodenaufrufe, wenn man den wenigstens den Code auslagert (Erfahrung bei einem Kunden).

Schritt-für-Schritt Anleitung

Schritt 1: Globale Variable definieren

Bei dem Beispiel der Positionstexte empfiehlt es sich eine Struktur in SE11 anzulegen, die allgemein für Texte, egal ob Kopf-,Positions- oder auf weitere tiefere Ebene genutzt werden kann.

Anschließend ist die globale interne Tabelle für die Positionstexte anzulegen:

Sfp if global data.png

Schritt 2: Im Codeabschnitt die globale interne Tabelle abhängig der Position den Text ermitteln

Die interne globale Tabelle sollte bei dem Beispiel mit den Positionsdaten mindestens so aussehen:

POSNR TEXT
0010 Text ermittelt mit FuBa "READ_TEXT"
0020 Hier wäre der Text für Posi 20
0030 und für 30
0040 sowie für 40
0050 du weißt schon ;-)

Es empfiehlt sich klar solches Coding in globale Klassen auszugliedern.

Schritt 3: Globale interne Tabelle als Einzelsatz bei Positionsdaten im Kontext hinzufügen

Im Kontextbereich wird nach dem Positionsdaten gesucht. Hier wird das Objekt aufgerissen und Rechtsklick auf "DATA" gemacht. Es wird "Einzelsatz" gewählt und die globale interne Tabelle genommen. Anschließend ist im Reiter "With Key-Bedingungen" die Bedingung zu setzen, dass jeder Einzelsatz für POSNR Feld der globalen Variable = POSNR der Tabelle der Positionsdaten gilt:

Sfp kontext singleentry.png

Schritt 4: Formular um Feld für den Text im Positionsbereich erweitern

Hier ist ein Objekt mit Typ "Textfeld" zu erstellen und an passender Stelle zu setzen. Anschließend ist als Binding das Feld zu nehmen, dass den Text hat.

Fazit

Aus meiner Sicht ist das eine gute Lösung den dynamischen Positionsteil um weitere Inhalte zu erweitern, wenn nur ein Standard Druckprogramm genutzt wird oder vom Kunden vorgegeben wird auf Z-Druckprogramme zu verzichten.