In
zahlreichen
SAP Transaktionen wird ein "table control" verwendet, um Daten
in tabellarischer Form anzuzeigen oder eingeben zu lassen. Mit dem InputAssistant
können Sie eigene Spalten in einem "table control" hinzufügen, und zwar
sowohl zur Anzeige von Informationen als auch zur Dateneingabe. Die in
den eigenen Spalten eingegebenen Werte können in einem InputScript
verarbeitet werden.
Die
Anzeige von Daten in eigenen Tabellenspalten ist nicht allzu schwierig,
während die Dateneingabe mehr Aufwand erfordert. Wir beschäftigen uns im
ersten Teil des Tutorials mit der Anzeige, im zweiten mit der
Dateneingabe.
Unsere Beispielanwendung
zur Anzeige ist folgende: In Transaktion VA01 (Auftragserfassung) wollen
wir eine neue Drucktaste "Anzeigen Daten vorhergehende Bestellung"
anbieten, über die der Benutzer drei neue Spalten einblenden kann. In
den neuen Spalten werden pro Material der neu erfassten Bestellung
einige Daten der vorhergehenden Bestellung des jeweiligen Materials
durch den gleichen Kunden angezeigt: jeweils bestellte Menge, Datum und Auftragsnummer. Wir rufen
dazu pro Bestellposition ein BAPI auf und füllen unsere Spalten mit den
zurückgelieferten Werten.
Die nachfolgenden Bilder zu
diesem Beispiel wurden in einem SAP ERP 2004 IDES System unter
Verwendung von SAP GUI 7.1 erstellt. Sie können die Scripte aber ohne
Änderung auch in diversen anderen SAP Releaseständen verwenden, zum
Beispiel in einem
4.6C System mit SAP GUI 6.20 oder 6.40.
VA01 Auftragserfassung: Mit unserer
neuen Drucktaste
"Anzeigen Daten vorhergehende Bestellung" können drei zusätzliche
Spalten angezeigt werden
In drei neuen Spalten werden die
vorhergehende Bestellmenge, das Bestelldatum und die Auftragsnummer pro
Material angezeigt
Zur
Implementierung gehen wir am besten in zwei Schritten vor. Als erstes
realisieren wir die Anzeige der zusätzlichen Spalten über eine
Drucktaste:
GuiXT
// GuiXT Script SAPMV45A.D4001.TXT
// nur für Transaktion VA01, Reiter Verkauf
if Q[Transaction=VA01] and Q[Page=Verkauf]
// Drucktaste am Ende der Tabelle anzeigen, rechts neben dem Button
// "Liefergruppenkorrelation APO" (nur als Ikone angezeigt)
// hierbei keine feste Position verwenden, da die Tabelle
// je nach Window-Grösse unterschiedlich viele Zeilen hat
if not V[VA_show_cols]
Pushbutton P[Liefergruppenkorr.]+(0,15) _
"@3S@Anzeigen Daten vorhergehende Bestellung" process="VA_show_cols.txt"
else
Pushbutton P[Liefergruppenkorr.]+(0,15) _
"@3T@Schliessen Daten vorhergehende Bestellung" process="VA_hide_cols.txt"
// drei neue Spalten hinzufügen
Column "V.Menge" size=10 name="VA_pq" position=4 -readOnly -alignRight
Column "V.Datum" size=10 name="VA_pd" position=5 -readOnly -alignRight
Column "V.A.-Nr." size=10 name="VA_po" position=6 -readOnly -alignRight
endif
endif
Die Variable V[VA_show_cols]
können wir im Einstiegsbild der Transaktion VA01 zurücksetzen, ansonsten
bleibt die gewählte Einstellung auch bei erneutem Aufruf der Transaktion
erhalten.
Die beiden InputScripte
sind sehr einfach; sie setzen nur die Variable zur Anzeige der Spalten:
GuiXT
// InputScript VA_show_cols.txt
Set V[VA_show_cols] "X"
Return
GuiXT
// InputScript VA_hide_cols.txt
Set V[VA_show_cols] ""
Return
Mit dem ersten Schritt haben wir drei
leere Tabellenspalten hinzugefügt, die der Benutzer über eine neue
Drucktaste anzeigen und wieder schliessen kann
Man kann die
Spalten auch mit einer geeigneten Ikone hervorheben, zum Beispiel so:
Zusätzliche Ikone im Spaltentitel
Hierzu
verwenden wir (wie generell bei Textelementen möglich) die Notation "@xx@text..."
wobei xx die SAP Ikonen-Id ist.
Nun
fehlen uns nur noch die Daten in den neuen Spalten. Jeder Zelle in den
neuen Spalten ist eine Variable zugeordnet, deren Name sich aus dem
durch "name=" angegebenen Namen, einem Punkt sowie der Zeilennummer
ergibt. Beispiel:
Dabei bezieht
sich der Zeilenindex auf die gesamte Tabelle, nicht nur auf den gerade
angezeigten Bereich. Falls der Benutzer zum Beispiel in der Tabelle auf
Zeile 4 vorwärtsgeblättert hat, sind nur die oben blau dargestellten
Zeilen sichtbar, und die Variablennamen im angezeigten Bereich beginnen
mit Zeile 4.
Zum Füllen der
Spaltenvariablen sind zwei verschiedene Vorgehensweisen möglich.
Entweder füllt man die Variablen für sämtliche Zeilen, auch für
die gerade nicht sichtbaren, zu Beginn der Transaktion. Man muss dann
beim Blättern durch die Tabelle nichts mehr tun. Das funktioniert
allerdings nur, wenn sich der Inhalt der Tabelle in der Transaktion
nicht ändern kann. In unserem Fall (VA01) brauchen wir ein anderes
Verfahren, da die Materialnummer jederzeit überschrieben werden kann,
und auch Zeilen gelöscht oder eingefügt werden können. In solchen Fällen
ist es am besten, nur den jeweils sichtbaren Bereich der Tabelle (also
den oben blau dargestellten) bei der Anzeige zu füllen.
Hierzu
benötigen wir eine Schleife über den sichtbaren Bereich der Tabelle:
GuiXT
// Alle sichtbaren Tabellenzeilen verarbeiten
GetTableAttribute T[Alle Positionen] firstVisibleRow="fvr"
Set V[i] 1 // Zeilennummer in der Anzeige
Set V[k] &V[fvr] // absolute Zeilennummer in der gesamten Tabelle
//(also k=4 im Beispiel oben)
label prev_order_beg
// Zeile gefüllt?
Set V[Pos] "&cell[Alle Positionen,Pos,&V[i]]"
if not V[Pos]
goto prev_order_end
endif
// Die angezeigte Zeile i verarbeiten. Die absolute Zeilennummer ist k
... Set V[colvar.&V[k]] "...neuer Wert..."
// nächste Zeile
Set V[i] &V[i] + 1
Set V[k] &V[k] + 1
goto prev_order_beg
label prev_order_end
Innerhalb
dieses Rahmens müssen wir jetzt noch die eigentlichen Daten lesen.
Hierzu rufen wir pro Zeile die Funktion "BAPI_SALESORDER_GETLIST"
auf. Die Eingabeparameter für das BAPI sind die Kundennummer, die
Materialnummer und der Vertriebsbereich. Das BAPI liefert eine Tabelle
mit den vorhergehenden Bestellungen dieses Materials zurück, absteigend
sortiert nach Datum. Aus der ersten Tabellenzeile können wir daher die
gewünschten Daten entnehmen.
Das ganze
Script sieht damit wie folgt aus:
GuiXT
// GuiXT Script SAPMV45A.D4001.TXT
// nur für Transaktion VA01, Reiter Verkauf
if Q[Transaction=VA01] and Q[Page=Verkauf]
// Drucktaste am Ende der Tabelle anzeigen,
// rechts neben dem Button "Liefergruppenkorrelation APO"
// (nur als Ikone angezeigt)
// hierbei keine feste Position verwenden, da die Tabelle
// je nach Window-Grösse unterschiedlich viele Zeilen hat
if not V[VA_show_cols]
Pushbutton P[Liefergruppenkorr.]+(0,15) _
"@3S@Anzeigen Daten vorhergehende Bestellung" process="VA_show_cols.txt"
else
Pushbutton P[Liefergruppenkorr.]+(0,15) _
"@3T@Schliessen Daten vorhergehende Bestellung" process="VA_hide_cols.txt"
// drei neue Spalten hinzufügen
Column "V.Menge" size=10 name="VA_pq" position=4 -readOnly -alignRight
Column "V.Datum" size=10 name="VA_pd" position=5 -readOnly -alignRight
Column "V.A.-Nr." size=10 name="VA_po" position=6 -readOnly -alignRight
// Alle sichtbaren Tabellenzeilen verarbeiten
GetTableAttribute T[Alle Positionen] firstVisibleRow="fvr"
Set V[i] 1
Set V[k] &V[fvr]
// Alte Werte löschen
Set V[VA_pq.*] ""
Set V[VA_pd.*] ""
Set V[VA_po.*] ""
Set V[customer] "&F[Auftraggeber]"
Set V[customer] 10000000000 + &V[customer]
Set V[customer] &V[customer](2-11)
label prev_order_beg
// Zeile gefüllt?
Set V[Pos] "&cell[Alle Positionen,Pos,&V[i]]"
if not V[Pos]
goto prev_order_end
endif
Set V[matnr] "&cell[Alle Positionen,Material,&V[i]]"
if not V[matnr]
goto prev_order_end
endif
// über SAP BAPI vorhergehende Bestellungen lesen
Call "BAPI_SALESORDER_GETLIST" in.CUSTOMER_NUMBER="&V[customer]" _
in.Verkauf_ORGANIZATION="&F[Vertr.bereich]" in.MATERIAL="&V[matnr]" _
table.SALES_ORDERS="so"
// die erste Zeile enthält die jüngste Bestellung
CopyText fromText="so" toString="sowa" line=1
if Q[ok] // andernfalls hat der Kunde das Material noch nie bestellt
// gewünschte Felder in unsere Spaltenvariablen übertragen
// "Menge": Das BAPI liefert sie in "dezimal gepacktem"
// Format mit 3 Nachkommastellen
Set V[quantity] "&V[sowa](BAPIORDERS-REQ_QTY)" -unpack
Set V[quantity] "&V[quantity]" / 1000 decimals=0
Set V[VA_pq.&V[k]] "&V[quantity]"
// "Datum": Wird im Format YYYYMM geliefert, wir machen DD.MM.YYYY daraus
Set V[date] "&V[sowa](BAPIORDERS-DOC_DATE)"
Set V[VA_pd.&V[k]] "&V[date](7-8).&V[date](5-6).&V[date](1-4)"
// "Auftragsnummer": mit führenden Nullen geliefert,
//die wir über eine Rechenoperation entfernen
Set V[ordno] "&V[sowa](BAPIORDERS-SD_DOC)"
Set V[ordno] &V[ordno] + 0
Set V[VA_po.&V[k]] "&V[ordno]"
endif
Set V[i] &V[i] + 1
Set V[k] &V[k] + 1
goto prev_order_beg
label prev_order_end
endif // V[VA_show_cols]
endif // VA01 + page=Verkauf
Unser
zweites Beispiel behandelt die Dateneingabe in zusätzlichen
Tabellenspalten. In Transaktion ME51N (Bestellanforderung anlegen)
wollen wir das Feld "Einkaufsorganisation" als neue Tabellenspalte
anbieten. Im Standard ist die Eingabe der Einkaufsorganisation im
Detailbild der Bestellposition auf dem Reiter "Bezugsquelle" möglich,
erfordert also jeweils die Auswahl der Position und in der Detailansicht
eventuell den Klick auf den richtigen Reiter.
Bemerkung:
In neuen SAP Systemen kann der
Benutzer über die Drucktaste "Pers. Einstellungen" entweder ein
"grid control" oder ein "table control" auswählen. Nur im "table
control" ist die hier vorgestellte Technik anwendbar. In dem GuiXT
Script fragen wir daher als erstes ab, ob überhaupt eine Tabelle
angezeigt wird.
Standard: Der Benutzer gibt die
Einkaufsorganisation auf dem Reiter "Bezugsquelle" des
Positionsdetailbildes ein
Mit der neu
eingefügten Spalte "EOrg" wird die Eingabe der Einkaufsorganisation
unmittelbar in der Tabelle ermöglicht:
Erweiterte Tabelleneingabe: Der
Benutzer gibt die Einkaufsorganisation in die neue Tabellenspalte "EOrg"
ein
Transaktion
ME51N besitzt einige Besonderheiten, verglichen mit anderen SAP
Transaktionen:
Es gibt
kein Einstiegsbild, das man zum Rücksetzen interner Variablen nutzen
könnte
Der
Benutzer kann verschiedene Anwendungsteile ein- und ausblenden (Langtext,
Positionstabelle, Positionsdetails)
Eine weitere
Schwierigkeit, die auch in zahlreichen anderen Transaktionen auftritt,
besteht darin, dass der Benutzer auch nach F3, F12 oder F15 (Zurück,
Abbrechen, Beenden) noch in einem Popup-Bild "Sichern" kann. Auch in
diesem Fall soll unser InputScript ablaufen, das die Werte aus der
Spalte "EOrg" in das Eingabefeld im Detailbild der jeweiligen Position
einträgt.
Beginnen wir
mit dem GuiXT Script:
GuiXT
if Q[Transaction=ME51N]
// nur falls Tabelle sichtbar ist (könnte durch Benutzer
// ausgeblendet sein, oder "grid control" aktiviert)
if T[Table]
// Tabelle noch leer? Dann alle Variablen zurücksetzen
GetTableAttribute T[Table] firstVisibleRow=fvr
if V[fvr=1]
Set V[material] "&cell[Table,Material,1]"
if not V[material]
Set V[ME51N_*] ""
endif
endif
// Zusatzspalte mit Bezug auf Positionsnummer
Column "EOrg" position=8 size=4 name="ME51N_EKORG" _
keyColumn="Banf-position" techName="MEREQ3322-EKORG"
// Merken Zusatzspalte aktiv
Set V[ME51N_active] "X"
endif
// Zusatzspalte aktiv? sonst Script beenden
if not V[ME51N_active=X]
Stop
endif
// Eingabefeld im Detailbild ausblenden, sonst müssen Tabelle
// und das Eingabefeld synchron gehalten werden
if F[EinkOrganisation]
del F[EinkOrganisation]
endif
// bei Sichern eigenes InputScript aufrufen
on "/11" process="ME51N_D_save.txt"
// bei Prüfen ebenfalls
on "/39" process="ME51N_D_save.txt"
using MODE = "C"
// falls der Benutzer die Transaktion verlässt, das Popup abfangen
on "/3" process="ME51N_D_leave.txt"
on "/12" process="ME51N_D_leave.txt"
on "/15" process="ME51N_D_leave.txt"
endif
Einige
Erläuterungen zu dem Script:
Alle
internen Variablen ME51N_* werden zurückgesetzt, falls die Tabelle
noch leer ist
Unsere
neue Tabellenspalte "EOrg" verwendet die Positionsnummer
als Schlüsselspalte (key column=...). Das ist nötig, da der Benutzer
nachträglich einzelne Positionen löschen kann, und dann ändert sich
der Index aller nachfolgenden Zeilen in der Tabelle. GuiXT verwendet
die angegebene Schlüsselspalte sobald sie vom System gefüllt wurde.
Durch techName=...
wird eine Suchhilfe für die Spalte festgelegt
Das
Standardeingabefeld für die Einkaufsorganisation im Detailbild
löschen wir. Falls der Benutzer auch dort etwas eingeben könnte,
wäre es schwierig, die beiden Eingaben zu synchronisieren, und für
den Benutzer wäre die doppelte Eingabemöglichkeit eher verwirrend.
Falls der
Benutzer die "Prüfen" Funktion aufruft, sollen ebenfalls zunächst
die zusätzlichen Eingaben in die Originalfelder gestellt werden,
damit auch diese Eingaben geprüft werden. Wir verwenden das gleiche
Script "ME51N_D_save.txt" wie für "Sichern" und setzen einen
Parameter MODE =
"C" zur Unterscheidung.
Die Exit-Funktionen "/3", "/12", "/15"
fangen wir ebenfalls ab und starten ein eigenes InputScript
"ME51N_D_leave.txt".
In GuiXT
Versionen vor Version 2007 Q1 1 war es nötig, zusätzlich zu
On /11, On /3,... auch die
entsprechenden Menüeinträge explizit aufzuführen durch
On "/Menu=3,1", ... Das ist jetzt nicht
mehr nötig, es wird automatisch die dem Menüeintrag zugeordnete
entsprechende F-Taste prozessiert.
Das
"ME51N_D_leave.txt" Script wartet in dem Popup auf eine
Benutzereingabe, um bei Anwahl von "Sichern" das eigene InputScript zu
starten:
GuiXT
// InputScript "ME51N_D_leave.txt"
// popup "Soll der erfasste Beleg vorher gesichert werden?"
Screen SAPLSPO1.0100
On "=YES" process="ME51N_D_save.txt"
using POPUP = "X"
using MODE = "S"
Wir starten
bei "Ja" im Popup ebenfalls das Sichern-Script und setzen den Parameter POPUP = "X".
Das Sichern-Script bricht dann zunächst das Popup ab und läuft
anschliessend so ab wie bei "Sichern" im Hauptbild.
Im "Sichern"-Script
wird geprüft, ob die Positionstabelle und das Detailbild geöffnet
sind. Das Detailbild wird am Ende wieder geschlossen, falls es durch das
InputScript geöffnet wurde, damit der Benutzer bei der "Prüfen" Funktion
in der vollen Tabellenanzeige bleiben kann.
GuiXT
// InputScript "ME51N_D_save.txt"
Parameter POPUP "N" // "X falls von Popup gestartet
Parameter MODE "S" // S= Sichern C = Prüfen
// Den automatischen Neuaufruf der Transaktion bei Fehlern
// abschalten, sonst würden die eingegebenen Daten verloren gehen
ProcessingOption returnOnError=Off
// Merken ob das InputScript das Detailbild selbst öffnen musste
Set V[ME51N_detail] ""
// Vom Popup gestartet?
if U[POPUP=X]
Enter "=CANC" // Popup abbrechen und erst sichern
else
Enter
endif
// Während der Verarbeitung des InputScript soll ein
// entsprechender Titel sichtbar sein
if U[Mode=S]
Set V[ME51N_Title] "Sichern der Bestellanforderung... Bitte warten"
else
Set V[ME51N_Title] "Prüfen der Bestellanforderung... Bitte warten"
endif
Screen saplmegui.0014
Title "&V[ME51N_Title]"
// Positionstabelle aufgeklappt?
if T[Table]
goto Pos_table_open
endif
// Positionstabelle aufklappen
Enter "=MEV4001BUTTON"
Screen saplmegui.0014
Title "&V[ME51N_Title]"
label Pos_table_open
// Zeilenindex
Set V[absRow] 1 // Absolute Zeilennummer
Set V[relRow] 1 // Relative Zeilennummer
// Positionsdetails aufgeklappt?
if S[REQ_Pos_DETAIL]
goto position_details_open
endif
// Positionsdetails aufklappen
Enter "=MEV4002BUTTON"
Set V[ME51N_detail] "X"
Screen saplmegui.0014
Title "&V[ME51N_Title]"
label position_details_open
GetTableAttribute T[Table] firstVisibleRow=FVisZeile
if V[FVisZeile=1]
goto scroll_beg_done
endif
// Auf erste Zeile positionieren
Enter "/scrollToLine=1" table="T[Table]"
label new_screen
Screen saplmegui.0014
Title "&V[ME51N_Title]"
label scroll_beg_done
GetTableAttribute T[Table] _
firstVisibleRow=FVisZeile lastVisibleRow=LVisZeile _
lastRow=LastRow
Set V[relRow] 1
label new_Zeile
// Ende der Tabelle?
if V[absRow>&V[LastRow]]
goto end_of_table
endif
// keine weiteren Zeilen mehr in der Anzeige?
if V[absRow>&V[LVisZeile]]
Enter "/scrollToLine=&V[absRow]" table="T[Table]"
goto new_screen
endif
Set V[Pos] "&cell[Table,Requisn. Pos,&V[relRow]]"
if not V[Pos]
goto end_of_table
endif
Set V[ME51N_EKORG] "&V[ME51N_EKORG.&V[Pos]]"
Set V[ME51N_EKORG_previous] "&V[ME51N_EKORG.&V[Pos]_previous]"
// keine neue Eingabe in der EOrg-Spalte??
if V[ME51N_EKORG=&V[ME51N_EKORG_previous]]
Set V[absRow] &V[absRow] + 1
Set V[relRow] &V[relRow] + 1
goto new_Zeile
endif
// Eingabe sichern für spätere Vergleiche
Set V[ME51N_EKORG.&V[Pos]_previous] "&V[ME51N_EKORG]"
// Cursor in die Zeile setzen und Details anzeigen
SetCursor cell[Table,Requisn. Pos,&V[relRow]]
Enter "/2"
Screen SAPLMEGUI.0014
Title "&V[ME51N_Title]"
if F[EinkOrganisation]
goto screen_EKORG
endif
// Auf Reiter "Bezugsquelle" wechseln
Enter "=TABREQDT7"
Screen SAPLMEGUI.0014
Title "&V[ME51N_Title]"
label screen_EKORG
Set F[EinkOrganisation] "&V[ME51N_EKORG]"
Set V[absRow] &V[absRow] + 1
Set V[relRow] &V[relRow] + 1
goto new_Zeile
label end_of_table
// Detailbild im InputScript aufgeklappt?
if not V[ME51N_detail=X]
goto screen_collapse_done
endif
// Detailbild zuklappen
Enter "=MEV4002BUTTON"
Screen SAPLMEGUI.0014
Title "&V[ME51N_Title]"
label screen_collapse_done
// Sichern oder Prüfen?
if U[MODE=S]
Enter "/11"
else
Enter "/39"
endif
// Aus Popup gestartet? sonst sind wir jetzt fertig
if not U[POPUP=X]
Leave
endif
// Transaktion verlassen
Screen SAPLMEGUI.0014
Enter "/3"
// Falls Popup nochmal erscheint: nicht Sichern, ist ja schon durchgeführt
Screen SAPLSPO1.0100
Enter "=NO"
Noch einige Erläuterungen
zu "Goto" und "Label" in einem InputScript:
Bei der Verwendung von "goto"
und "label" muss man beachten, ob das "label" vor oder nach einer
"Screen"-Anweisung gesetzt wird. Bei den folgenden beiden Varianten ist
(1) richtig, (2) dagegen falsch:
(1)
GuiXT
Screen saplmegui.0014
// Positionstabelle aufgeklappt?
if T[Table]
goto Pos_table_open
endif
// Positionstabelle aufklappen
Enter "=MEV4001BUTTON"
Screen saplmegui.0014
label item_table_open
(2)
GuiXT
Screen saplmegui.0014
// Positionstabelle aufgeklappt?
if T[Table]
goto item_table_open
endif
// Positionstabelle aufklappen
Enter "=MEV4001BUTTON"
label item_table_open
Screen saplmegui.0014
In der zweiten Variante (label
vor Screen) wird kein "Enter"
durchlaufen für die erste "Screen"
Anweisung. Das InputScript zeigt dann den Screen einfach an und
wartet auf eine Benutzereingabe, statt automatisch weiterzulaufen.
Ein anderer möglicher
Fehler wäre, die Screen
Anweisung in if..endif einzuschliessen:
GuiXT
Screen saplmegui.0014
// Positionstabelle aufgeklappt?
if not T[Table]
// Positionstabelle aufklappen
Enter "=MEV4001BUTTON"
Screen saplmegui.0014
endif
Das führt zu einer GuiXT-Syntaxfehlermeldung,
da alle if..endif
innerhalb eines Screen
Blocks abgeschlossen sein müssen.
Nach diesen negativen
Beispielen noch eine korrekte Alternative: Wir verwenden "goto",
um jeweils zu der gleichen
Screen Anweisung zurückzuspringen, nachdem wir über einen
Funktionscode die Tabelle oder die Detailsicht aufgeklappt haben:
GuiXT
...
label main_screen
Screen saplmegui.0014
Title "&V[ME51N_Title]"
// Positionstabelle aufgeklappt?
if not T[Table]
// Postionstabelle aufklappen
Enter "=MEV4001BUTTON"
goto main_screen
endif
// Positionsdetails aufgeklappt?
if not S[REQ_ITEM_DETAIL]
// Positionsdetails aufklappen
Enter "=MEV4002BUTTON"
goto main_screen
endif
GetTableAttribute T[Table] firstVisibleRow=FVisRow
if V[FVisRow=1]
goto scroll_beg_done
endif
// auf erste Zeile positionieren
Enter "/scrollToLine=1" table="T[Table]"
label new_screen
Screen saplmegui.0014
Title "&V[ME51N_Title]"
label scroll_beg_done
...
Hier ist es wichtig, das
Label "main_screen"
vor die Screen Anweisung zu setzen. Falls
es hinter der Screen-Anweisung steht,
fährt GuiXT nach dem Enter mit der
Verarbeitung fort und durchläuft ein weiteres Enter.
Mehr als ein Enter pro Screen
macht aber keinen Sinn; es führt zu einer GuiXT-Fehlermeldung und das
erste Enter wird verschluckt. Generell gilt
daher die Regel, pro Screen höchstens
einmal ein Enter abzusetzen, und in
der Regel auch genau einmal. Nur in den folgenden beiden Fällen macht
eine Screen-Anweisung ohne Enter
Sinn: Entweder wenn man in einem Popup-Screen auf die Eingabe des
Benutzers warten will und dann im InputScript weitermacht, wie wir es in "ME51N_D_leave.txt"
benutzt haben.