Felder von einem Tabellenreiter zum andern verschieben

Bilder mit Reitern werden häufig in komplexen Transaktionen mit vielen verschiedenen Feldern verwendet.  Die Reiter stellen eine Möglichkeit dar, gleichartige Felder zu gruppieren. Nicht jede Anwenderin schätzt allerdings diese Gruppierungen, wenn sie zum Beispiel einen einfachen Weg sucht, die relevanten Felder aufzufinden, ohne durch zu viele Reiter hindurch klicken zu müssen.    

Mit GuiXT und InputAssistant können Sie R/3 Bildschirme mit Reitern anpassen, hierzu brauchen Sie allerdings ein gewisses Knowhow. Der Hauptgrund, warum diese Arbeit mit Reitern nicht so einfach ist, wie man sich das wünscht, liegt darin, dass R/3 die Reiter nicht nur auf der Bildschirmoberfläche verwendet, als eine bestimmte Art, die Daten darzustellen, sondern R/3 verbindet die Reiterstruktur mit der Anwendungslogik.  Aus diesem Grund ist es wichtig, etwas über die Logik der Transaktion zu verstehen, wenn Sie, zum Beispiel, einige Felder von einem Reiter zu einem anderen verschieben wollen. Es besteht die Gefahr, dass Ihre Lösung nur für einen bestimmten Pfad durch die Transaktion funktioniert, mit einem anderen Pfad aber nicht. Wir empfehlen Ihnen daher, keine zu komplexen Änderungen vorzunehmen, die in den InputScripts schwer nachvollziehbar sind.

 
Beispiel 1

Wir beginnen mit einem typischen Beispiel. Angenommen, Sie möchten in der Transaktion VA01 “Kundenauftrag anlegen” einige Felder aus dem etwas versteckten Reiter “Bestelldaten” auf den ersten Reiter “Verkauf” verschieben.

Sap Guixt tabs01 d Felder von einem Tabellenreiter zum anderen verschieben
 VA01 Standard, Navigation zu Bestelldaten

Sie möchten eine schnellere Dateneingabe erreichen für die Felder

  • Name
  • Ihr Zeichen
  • Bestellart (SCHR=Schriftlich or TELE=Telefonisch)

Sap Guixt tabs02 d Felder von einem Tabellenreiter zum anderen verschieben
VA01 Standard, Reiter  “Bestelldaten

Die Lösung, die wir hier vorstellen, sieht folgendermaßen aus:

Sap Guixt tabs03 d Felder von einem Tabellenreiter zum anderen verschieben
VA01 with GUiXT:  “Bestelldaten auf dem ersten Reiter “Verkauf”

Sie sehen hier auch, dass wir die Eingabe für die Bestellart als zwei Radiobuttons “schriftlich” und “telefonisch” anstelle einer codierten Eingabe präsentieren.

Die hier vorgestellte Lösung hat den Vorteil, dass Sie sowohl die schnelle Dateneingabe mit den neuen Feldern als auch den Standard VA01 Reiter “Bestelldaten” verwenden können. Die Dateneingabe in irgendeines dieser Felder wird automatisch zum anderen transferiert. Es ist keine ganz leichte Aufgabe, dies zu garantieren, selbst nach Fehlermeldungen und Warnungen, und Sie benötigen das GuiXT Element “Link”, um eine relativ übersichtliche Lösung zu erstellen.

Hier sind die Skripte, die Sie dafür benötigen. (2 GuiXT Skripte  und ein InputScript). Zusätzliche Kommentare finden Sie in den Skripten und weiter unten in diesem Artikel. Bezüglich der Platzierung des neuen Rahmens und der neuen Felder vergleichen Sie das Special Topic Wie man mit skrollbaren Bildschirmbereichen umgeht

SAPMV45A.D4001.TXT

//———————————————————————————–
// Beispiel: Kundenauftrag anlegen mit VA01,
// 3 Felder von Reiter “Bestelldaten” nach “Verkauf” verschoben
//———————————————————————————–
// Die Lösung, die hier vorgestellt wird, ermöglicht sowohl die Eingabe
// in den neuen als auch in den Standard Feldern
// Um alle Felder zu synchronisieren,
// selbst nach Eingabewiederholung nach Fehlermeldungen,
// wird die “Link” Anweisung anstelle von “Set” verwendet
//———————————————————————————–
// Erfordert GuiXT version 2001 Q3 07 und höher
// Beispiel basiert auf R/3 IDES 4.6C
//———————————————————————————–

if Q[Transaction=VA01] and Q[Page=Verkauf]

  Set V[BestAuftraggeber] “&[Auftraggeber]“
  Set V[BestWarenempfänger] “&[Warenempfänger]“

  // Bei neuem Auftrag alle Felder zurücksetzen
  if not V[BestAuftraggeber] and not V[BestWarenempfänger]
    Set V[Best*] ” “
  endif

  // Verwenden eines “Offset” der sich auf ein Feld innerhalb des Reiters bezieht
  // um den richtigen Anzeigeort zu bestimmen

  Offset F[AusliefWerk]+(0,46)

  Box (0,0) (6,34) “Bestelldaten”
  InputField (1,1) “Name” (1,12) “Size=20″ “Name=BestName”
  InputField (2,1) “Ihr Zeichen” (2,12) “Size=12″ “Name=BestZeichen”

  Radiobutton (4,1) “schriftlich” “Name=BestArt” “Value=SCHR”
  Radiobutton (5,1) “telefonisch” “Name=BestArt” “Value=TELE”

  // Update: Bestelldaten zuerst eingeben
  On “/11″ “Fcode=KBES” “Process=Bestellung_Update.txt”
  On “/Menu=1,6″ “Fcode=KBES” “Process=Bestellung_Update.txt”

  // F3 mit Cancel (F12) gleichsetzen, um ein Update des Popup screen zu vermeiden
  // (das normale F3 könnte wenn nötig auch simuliert werden)

  On “/3″ “Fcode=/12″
  On “/Menu=3,5″
“Fcode=/12″

endif


SAPMV45A.D4002.TXT
if Q[Page=Bestelldaten]
  Link [Ihr Zeichen] V[BestZeichen]
  Link [Name] V[BestName]
  Link [Bestellart] V[BestArt]
endif

Bestellung_Update.txt
// Fehlermeldungen in Standard Screens anzeigen
No return on error

// Skip information “Sales area redetermined”
Screen sapmsdyp.0010
  Enter

Screen sapmv45a.4002
  Link [Ihr Zeichen] V[BestZeichen]
  Link [Name] V[BestName]
  Link [Bestellart] V[BestArt]

  Enter /11

Anmerkungen

  1. Verwenden Sie mindestens GuiXT 2001 Q3 07, denn die “Link” Anweisung ist in früheren Versionen noch nicht verfügbar
  2. Wir beschränken das Skript auf Transaktion VA01 und den Reiter “Verkauf”
  3. Es lohnt sich, nach der richtigen Stelle zu suchen, an der die Variablen zurück gesetzt werden. Der Eingangsbildschirm einer Transaktion ist manchmal gut geeignet, aber nicht immer: In VA01bleibt der Anwender auf dem zweiten Hauptbild, nachdem er den Auftrag fertig gestellt hat. Da R/3 dann die Felder “Auftraggeber” und “Warenempfänger” leert, ist dies eine gute Stelle, auch Ihre Variablen zurück zu setzen. In manchen Fällen kann es auch sinnvoll sein, die Eingabewerte zu behalten.
  4. Die “Offset” Anweisung ermöglicht es, eine ganze Gruppe von Eingabefeldern ohne Aufwand an eine andere Platzierung zu verschieben. Ein weiterer Vorteil ist, dass die neuen Eingabefelder durch “Offset” mit einem Feld auf dem Reiter verankert sind. Das ist besonders wichtig bei skrollbaren Reitern. >Details
  5. Ein Update können Sie erreichen durch /11 oder CTRL+S oder durch Klick auf das Update Icon. Diese drei Möglichkeiten basieren auf einem /11 function code. Eine vierte Möglichkeit ist der Klick auf “Sichern” im Menü, was den Befehl ON /Menu=1,6 bedingt. 
  6. Etwas schwierig ist der Umgang mit der Update Option im F3 Popup Menü. Hier haben wir uns für die einfache Variante entschieden und /12 für /3 zugewiesen, was keinen erkennbaren Unterschied für den Anwender macht.
  7. Die “Link” Anweisung weist den Wert der Variablen den Eingabefeldern zu und updated die Variablen automatisch, sobald der Anwender einen neuen Wert eingibt.
  8. Die Information “Der Vertriebsbereich …wurde neu ermittelt” wird normalerweise angezeigt, wenn der Anwender zum ersten Mal Enter drückt. Wenn er den Update Button drückt, gleich nachdem er die Daten eingegeben hat, dann wird diese Information übersprungen.

Beispiel 2

Wir erweitern Beispiel 1, so dass es auch für Transaktion VA02 (Kundenauftrag ändern) und Transaktion VA03 (Kundenauftrag anzeigen) gilt. Die Technik ist ähnlich wie in Beispiel 1. Zusätzlich navigieren wir zuerst zu dem Bildschirm “Kundenauftrag Daten” mit der Anweisung

Enter “=KBES” “Process=Bestellung_zusaetzliche_Felder.txt”

um die Variablen V[BestZeichen], V[BestName], V[BestArt] mit Werten zu belegen.  

SAPMV45A.D0102.TXT

// Eingangsbildschirm VA02/VA03 
//  Variablen zurücksetzen
Set V[Best*] ” “

SAPMV45A.D4001.TXT

//———————————————————————————–
// Beispiel: Kundenauftrag anlegen mit VA01, 3 Felder von Reiter “Bestelldaten” nach “Verkauf” verschoben
//———————————————————————————–
// Die Lösung, die hier vorgestellt wird, ermöglicht sowohl die Eingabe
// in den neuen als auch in den Standard Feldern
// Um alle Felder zu synchronisieren,
// selbst nach Eingabewiederholung, nach Fehlermeldungen,
// wird die “Link” Anweisung anstelle von “Set” verwendet
//———————————————————————————–
// Erfordert GuiXT version 2001 Q3 07 und höher
// Beispiel basiert auf R/3 IDES 4.6C
//———————————————————————————–

if Q[Transaction=VA01] and Q[Page=Verkauf]

   Set V[BestAuftraggeber] “&[Auftraggeber]“
   Set V[BestWarenempfänger] “&[Warenempfänger]“

   // Bei neuem Auftrag alle Felder zurücksetzen
  
if not V[BestAuftraggeber] and not V[BestWarenempfänger]
      Set V[Best*] ” “
   endif

   // Verwenden eines “Offset” der sich auf ein Feld innerhalb des Reiters bezieht
  // um den richtigen Anzeigeort zu bestimmen
 
Offset F[AusliefWerk]+(0,46)

  Box (0,0) (6,34) “Bestelldaten”
  InputField (1,1) “Name” (1,12) “Size=20″ “Name=BestName”
  InputField (2,1) “Ihr Zeichen” (2,12) “Size=12″ “Name=BestZeichen”

  Radiobutton (4,1) “schriftlich” “Name=BestArt” “Value=SCHR”
  Radiobutton (5,1) “telefonisch” “Name=BestArt” “Value=TELE”

  // Update: Bestelldaten zuerst eingeben
 
On “/11″ “Fcode=KBES” “Process=Bestellung_Update.txt”
  On “/Menu=1,6″ “Fcode=KBES” “Process=Bestellung_Update.txt”

  // F3 mit Cancel (F12) gleichsetzen, um ein update des popup screen zu vermeiden
  // (das normale F3 könnte wenn nötig auch simuliert werden)
 
On “/3″ “Fcode=/12″
  On “/Menu=3,5″ “Fcode=/12″

endif

if Q[Transaction=VA02] and Q[Page=Verkauf]

   // Zusätzliche Felder lesen
 
if not V[Best_additional_fields_done=X]
     Set V[Best_additional_fields_done] “X”
     Enter “KBES” “Process=Bestellung_zusaetzliche_Felder.txt”
  endif

  // Verwenden eines “Offset” der sich auf ein Feld innerhalb des Reiters bezieht
  // um den richtigen Anzeigeort zu bestimmen

  Offset F[AusliefWerk]+(0,46)

  Box (0,0) (6,34) “Bestelldaten”
  InputField (1,1) “Name” (1,12) “Size=20″ “Name=BestName”
  InputField (2,1) “Ihr Zeichen” (2,12) “Size=12″ “Name=BestZeichen”

  Radiobutton (4,1) “schriftlich” “Name=BestArt” “Value=SCHR”
  Radiobutton (5,1) “telefonisch” “Name=BestArt” “Value=TELE”

  // Update: Bestelldaten zuerst eingeben
  On “/11″ “Fcode=KBES” “Process=Order_Update.txt”
  On “/Menu=1,6″ “Fcode=KBES” “Process=Order_Update.txt”

  // F3 mit Cancel (F12) gleichsetzen, um ein update des popup screen zu vermeiden
  // (das normale F3 könnte wenn nötig auch simuliert werden)

  On “/3″ “Fcode=/12″
  On “/Menu=3,5″ “Fcode=/12″

endif

if Q[Transaction=VA03] and Q[Page=Verkauf]

  // Zusätzliche Felder lesen
  if not V[Best_ZusaetzlicheDatenGeholt=X]
    Set V[Best_ZusaetzlicheDatenGeholt] “X”
    Enter “KBES” “Process=Bestellung_zusaetzliche_Felder.txt”
  endif

  // Verwenden eines “Offset” der sich auf ein Feld innerhalb des Reiters bezieht
  // um den richtigen Anzeigeort zu bestimmen

  Offset F[AusliefWerk]+(0,46)

  Box (0,0) (6,34) “Bestelldaten”
  Text (1,1) “Name” 
  Text (1,12) “&[BestName]” “-Border” “Size=20″
  Text (2,1) “Ihr Zeichen” 
  Text (2,12) “&[BestZeichen]” “-Border” “Size=12″

  if V[BestArt=SCHR]
    Text (4,1) “Bestellung per Brief/Fax”
  endif
  if V[BestArt=TELE]
    Text (5,1) “Bestellung per Telefon”
  endif

endif

Bestellung_zusaetzliche_Felder.txt
Screen sapmv45a.4002
  Set V[BestZeichen] “&F[Ihr Zeichen]“ 
  Set V[BestName]      “&F[Name]“ 
  Set V[BestArt]      “&F[Bestellart]“ 

// Zurück zur Übersicht
  Enter “/3 “

 

 

www.synactive.com

Sap Guixt weiter Felder von einem Tabellenreiter zum anderen verschieben

Felder von einem Tabellenreiter zum anderen verschieben