Häufig
sind die Felder einer Transaktion auf mehrere Reiter verteilt.
Zur schnellen Dateneingabe kann es sinnvoll sein, Felder aus mehreren
Reitern auf einem einzigen zusammenzuführen. Das ist schwieriger, als
nur innerhalb eines Bildschirmbildes Felder anders anzuordnen, da die
Logik der Transaktion eine Rolle spielt.
Die
wesentlichen Techniken sehen Sie in diesem Tutorial. Unser Ziel
ist, für
die Transaktionen
AS01:
Hinzufügen Anlagenstammsatz
AS02:
Ändern Anlagenstammsatz
AS03:
Anzeigen Anlagenstammsatz
die Felder
zur Vermögensbewertung bereits auf dem ersten Reiter "Allgemein"
zur Verfügung stellen. Die Standardtransaktion AS02 sieht wie folgt aus:
Wir wollen
die rot umrahmten Felder stattdessen auf dem Reiter
"Allgemein" zur Verfügung stellen. Auf dem Reiter
"Vermögenst." werden sie gelöscht, die Grundstücksfelder
nach oben geschoben und der Reiter umbenannt in
"Grundstücke".
Der neue
Reiter "Allgemein" sieht dann so aus:
Sie sehen,
dass wir dabei zwei Eingabefelder in eine Auswahl von Radiobuttons
umgewandelt haben (Gruppen "Eigentumsart" und "Bewertung
nach").
Vorgehen:
Wir
ändern das Layout auf den beiden Reitern wie gewünscht ab
(Löschen der Vermögensfelder auf Reiter
"Vermögenst.", Hochschieben der Grundstücksfelder,
Aufnahme der neuen Felder auf dem Reiter
"Allgemein").
Durch
Aufruf geeigneter InputScripts sorgen wir dafür, dass die Felder
im Anzeige- und Änderungsmodus gefüllt werden. Hierzu gehen wir
bei erstem Aufruf des Reiters "Allgemein" in einem
InputScript auf den Reiter "Vermögenst.", setzen die
Werte in InputScript-Variablen, und kehren zum Reiter
"Allgemein" zurück. Bitte beachten Sie, dass das
InputScript auch dann Zugriff auf alle Felder hat, wenn diese
durch ein GuiXT Script bei der Anzeige des Reiters weggeblendet
sind.
Analog
sorgen wir bei Hinzufügen und Ändern dafür, dass bei
"Sichern" zunächst unsere zusätzlichen Felder
übertragen werden
Besonderes
Augenmerk gilt der Behandlung von Fehlern bei der Eingabe. Wir zeigen
Fehlermeldungen zu unseren neuen Eingabefeldern ebenfalls auf dem
Reiter "Allgemein" an, sodass der Benutzer unmittelbar
korrigieren kann.
Eine
.zip-Datei mit den hier verwendeten Scripten können Sie für eigene
Tests nutzen: as_zip.zip.
Auf
den Einstiegsbildern von AS01 sowie AS02/AS03 setzen wir alle
benutzten Variablen zurück. Durch die Namenskonvention, unsere InpustScript-Variablen für die drei Transaktionen mit "AS_"
beginnen zu lassen, ist das einfach machbar:
GuiXT
// GuiXT Script "saplaist.d1000.txt"
// Transaktionen AS01 / AS02 / AS03
// Benutzte InputScripts:
//
// AS_read.txt Daten lesen
// AS_save.txt Sichern
// AS_check.txt Prüfen
//-------------------------------------------
// Alle Variablen V[AS_*] werden auf dem Einstiegsbild
// der Transaktion zurückgesetzt
// Zur Sicherheit Variablen auch löschen, wenn
// die Anlagennummer sich geändert hat (falls Aufruf aus Liste o.ä.)
if not V[AS_Anlage=&F[Anlage]]
Set V[AS_*] ""
Set V[AS_Anlage] "&F[Anlage]"
endif
// readonly-flag setzen bei Anzeige, um später für alle Transaktionen
// die gleichen InputField-Anweisungen zu verwenden
if Q[Transaction=AS03]
Set V[AS_readonly] "-readOnly"
endif
// Werte erstmalig lesen bei Ändern oder Anzeigen
if Q[Transaction=AS02] or Q[Transaction=AS03]
if not V[AS_read=X]
Set V[AS_read] "X"
Enter process="AS_read.txt"
// Script hier verlassen, da Screen nicht angezeigt wird
Stop
endif
endif
// Reiter umbenennen, da nur noch die Grundstücksfelder dort vorhanden
Text P[Vermögenst.] "Grundstücke"
// Reiter Allgemein, eigene Felder einblenden
if Q[Page=Allgemein]
// Inneren Scrollbar unterdrücken
NoScrollBar
// Hinter letztem Gruppenrahmen beginnen
offset G[Buchungsinformationen]+(5,0)
box (0,0) (9,80) "Vermögenswerte"
pushbutton (1,78) "@0Q\QLangtext Vermögenswert@" "=LTXTNETA" size=(1,1)
inputfield (1,1) "Gliederungsschlüssel" (1,24) size=4 _
name="AS_Gliederungsschlüssel" "&V[AS_readonly]"techName="ANLA-VMGLI"
Text (1,30) "&V[AS_Gliederungsschlüsseltext]" -border
inputfield (2,1) "Vermögenswert" (2,24) size=16 _
name="AS_Vermögenswert" "&V[AS_readonly]" -numerical
Box (4,1) (8,20) "Eigentumsart"
radiobutton (5,2) "Eigentum" name="AS_Eigentumskennzeichen" _
value="1" "&V[AS_readonly]"
radiobutton (6,2) "Leasing" name="AS_Eigentumskennzeichen" _
value="2" "&V[AS_readonly]"
radiobutton (7,2) "Beteiligung" name="AS_Eigentumskennzeichen" _
value="3" "&V[AS_readonly]"
Box (4,30) (8,49) "Bewertung nach"
radiobutton (5,31) "Einheitswert" name="AS_ManBewertung" _
value="003" "&V[AS_readonly]"
radiobutton (6,31) "Mietwert" name="AS_ManBewertung" _
value="001" "&V[AS_readonly]"
//Anzeige der Anlage
if Q[transaction=AS02] or Q[transaction=AS03]
offset (0,0)
image (5,90) (20,135) "&F[Anlage].jpg"
endif
endif
// Reiter Vermögenst., Felder löschen die jetzt auf "Allgemein" sind
if Q[Page=Vermögenst.]
del G[Vermögensbewertung]
pos G[Grundstücke und ähnliche Rechte] (5,1)
endif
if Q[Transaction=AS01] or Q[Transaction=AS02]
// Bei Sichern in AS01/AS02 eigenes Script aufrufen
on "/11" process="AS_save.txt"
on "/Menu=1,7" process="AS_save.txt"
// Kein Sichern auf Popup zulassen, wie /12 handhaben
on "/3" fCode="/12"
on "/15" fCode="/12"
// Bei "Enter" im Reiter "Allgemein" die Zusatzeingaben schon überprüfen
if Q[Page=Allgemein]
on Enter process="AS_check.txt"
endif
endif
Das
InputScript "AS_read.txt" liest
die Vermögensfelder von dem entsprechenden Reiter und kehrt zu
"Allgemein" zurück. Auch Textfelder können wir dabei
mitnehmen.
GuiXT
// InputScript AS_read.txt
// Auf Reiter "Vermögensbewertung" verzweigen
Enter "=TAB05"
// AS02, Vermögensbewertung
Screen SAPLAIST.1000
Set V[AS_Gliederungsschlüssel] "&F[Gliederungsschlüssel]"
Set V[AS_Gliederungsschlüsseltext] "&F[T092T-VMTXT]"
Set V[AS_Eigentumskennzeichen] "&F[Eigentumskennzeichen]"
Set V[AS_ManBewertung] "&F[Grund man. Bewertung]"
Set V[AS_Vermögenswert] "&F[Man.Vermögenswert]"
Enter "=TAB01"
Entsprechend
setzt "AS_save.txt" vor dem
Sichern die zusätzlichen Felder wieder in die Standardfelder. Für den
Fall von Fehlermeldungen kehren wir auf den Reiter
"Allgemein" zurück.
GuiXT
// InputScript AS_save.txt
// Sichern in Transaktionen AS02 und AS03
// Auf Reiter "Vermögensbewertung" verzweigen
Enter "=TAB05"
// Vermögensbewertung
Screen SAPLAIST.1000
// Alte Werte merken, um sie im Fehlerfall wieder einzutragen
Set V[AS_corr_Gliederungsschlüssel] "&F[Gliederungsschlüssel]"
Set V[AS_corr_Vermögenswert] "&F[Man.Vermögenswert]"
// Neue Werte eintragen
Set F[Gliederungsschlüssel] "&V[AS_Gliederungsschlüssel]"
Set F[Eigentumskennzeichen] "&V[AS_Eigentumskennzeichen]"
Set F[Grund man. Bewertung] "&V[AS_ManBewertung]"
Set F[Man.Vermögenswert] "&V[AS_Vermögenswert]"
// Sichern, im Fehlerfall weiter
Enter "/11" onError=Continue
// Werte wieder zurücksetzen, da einige fehlerhaft
Set F[Gliederungsschlüssel] "&V[AS_corr_Gliederungsschlüssel]"
Set F[Man.Vermögenswert] "&V[AS_corr_Vermögenswert]"
// Zurück auf ersten Reiter mit Fehlermeldung
Message "&V[_lasterror]" -statusline Enter "=TAB01"
Nicht
unbedingt nötig ist schließlich das hier implementierte Prüfen der
Eingabe bei "Enter" durch ein eigenes InputScript "AS_check.txt".
Die Prüfung erfolgt ja auf alle Fälle bei "Sichern". Für
den Benutzer ist es jedoch angenehmer, wenn die Werte bereits beim
ersten "Enter" geprüft werden.
GuiXT
// InputScript AS_check.txt
// Prüfen der Eingabe
// Auf Reiter "Vermögensbewertung" verzweigen
Enter "=TAB05"
// Vermögensbewertung
Screen SAPLAIST.1000
// Alte Werte merken, um sie im Fehlerfall wieder einzutragen
Set V[AS_corr_Gliederungsschlüssel] "&F[Gliederungsschlüssel]"
Set V[AS_corr_Vermögenswert] "&F[Man.Vermögenswert]"
// Neue Werte eintragen
Set F[Gliederungsschlüssel] "&V[AS_Gliederungsschlüssel]"
Set F[Eigentumskennzeichen] "&V[AS_Eigentumskennzeichen]"
Set F[Grund man. Bewertung] "&V[AS_ManBewertung]"
Set F[Man.Vermögenswert] "&V[AS_Vermögenswert]"
// Datenfreigabe
Enter onError=Continue
goto Fehler
// Vermögensbewertung
Screen SAPLAIST.1000
// Text entnehmen
Set V[AS_Gliederungsschlüsseltext] "&F[T092T-VMTXT]"
// Vermögenswert mit Standard-Aufbereitung
Set V[AS_Vermögenswert] "&F[Man.Vermögenswert]"
// Zurück auf ersten Reiter
Enter "=TAB01"
// Script verlassen, Eingaben sind OK
Leave
// Behandlung der Fehlermeldung
label Fehler
// Werte wieder zurücksetzen, da einige fehlerhaft, um Reiter zu verlassen
Set F[Gliederungsschlüssel] "&V[AS_corr_Gliederungsschlüssel]"
Set F[Man.Vermögenswert] "&V[AS_corr_Vermögenswert]"
// Zurück auf ersten Reiter mit Fehlermeldung
Message "&V[_lasterror]" -statusline
Enter "=TAB01"