Es gibt eine Reihe von sehr nützlichen Dingen, die Sie mit Dateien in InputScripts tun können.
- Sie können Daten aus einer Datei lesen und sie in R/3 eingeben.
- Sie können Daten aus R/3 über die Transaktionen extrahieren und die so generierten Dateien in Excel oder ähnlichen Programmen verwenden.
- Sie können eine html Datei generieren und diese in R/3 anzeigen, indem Sie den GuiXT Viewer verwenden.
Wenn Sie solche Anwendungen planen, dann beachten Sie bitte, dass diese Methode sehr gut für 100 Datensätze in einer Datei funktioniert, dass aber andere Methoden (Batch input, ABAP Programme) aus Performance-Gründen möglicherweise eine bessere Wahl bei größeren Datenmengen sind. Technisch gibt es keine Einschränkungen bei den Dateigrössen oder Laufzeiten. Die “Scriptingmethode”, die hier beschrieben ist, ist vor allem geeignet, um 50 Materialsätze über eine Exceltabelle zu verändern oder um Daten aus 120 Kostenstellen zu extrahieren. Besonders für adhoc Aufgaben stellt der InputAssistant eine leicht zu handhabende Möglichkeit dar, um eine Menge Zeit zu sparen, die Sie andernfalls für die Ausführung per Hand oder für die Programmierung verwenden müßten. Übersicht Wir verwenden die folgenden Anweisungen des InputAssistant:
- öffnen und schließen einer Datei: OpenFile, CloseFile;
- Werte aus einer Datei in Variablen einlesen: ReadFile;
- einen neuen Satz in eine Datei schreiben: AppendFile;
- mit Variablen arbeiten: Set, if;
- Ablaufkontrolle innerhalb eines InputScripts: Screen, Enter, goto, label, return.
Beispiel 1
- Wir nehmen an, dass wir eine Textdatei mit Materialnummern haben. Wir möchten eine zweite Datei erstellen, die die Materialnummer zusammen mit der Sparte, Warengruppe und Berechtigungsgruppe für jedes Material enthält.
Zuerst brauchen wir einen Ort, wo wir das Script beginnen können, z.B. das R/3 Basismenü MENUS00.E0040.txt: Pushbutton (toolbar) “Materialdatei erstellen” “/NMM03″ Process=”Materialdatei_erstellen.txt”
Das InputScript Materialdatei_erstellen.txt sieht folgendermaßen aus::
// Materialdatei erstellen (Beispiel für R/3 Rel. 4.5) Parameter mat_file1 “C:\GuiXT\Input.txt” Parameter mat_file2 “C:\GuiXT\Output.txt”
// Start Screen SAPLMGMM.0060 OpenFile “&[mat_file1]“ OpenFile “&[mat_file2]” “-Output”
label Read_File ReadFile “&[mat_file1]” mat_matnr
if not V[mat_matnr] CloseFile “&[mat_file1]“ CloseFile “&[mat_file2]“ Return “Materialdatei wurde generiert” “&[mat_file2]“ endif
Set F[Material] “&V[mat_matnr]“ Enter
// Bild auswählen Screen SAPLMGMM.0070 Set C[Grunddaten 1] “X” Enter
// Grunddaten 1 Screen SAPLMGMM.4000 Set V[mat_division] “&F[Sparte]“ Set V[mat_matgroup] “&F[Warengruppe]“ Set V[mat_autgroup] “&F[Berechtigungsgruppe]“
AppendFile “&V[mat_file2]” mat_matnr mat_division mat_matgroup mat_autgroup
Enter “/NMM03″
// MM03 Neustart, zum Beginn des Skripts gehen Screen SAPLMGMM.0060 goto Read_File
Die Laufzeit für 100 Materialnummern betrug 67 Sekunden in unserem Testsystem (zentrales System auf einem PC mit 266 MHz Pentium und 256 MB RAM).
Example 2 Angenommen wir haben eine Textdatei mit Daten, die GL Dokumente darstellen. Wir möchten dieses Dokumente mit Transaktion FB01 nach R/3 übernehmen. Wenn es Fehlermeldungen der R/3 Transaktion gibt, dann werden diese in ein Logfile gespeichert, zusammen mit weiteren Daten. MENUS00.E0040.txt: Pushbutton (toolbar) “GL upload” “/NFB01″ Process=”FB01_GL.txt”
Das InputScript FB01_GL.txt lautet folgendermaßen: // Dateinamen Parameter FB01FILE “C:\GL Test\FB01_data.txt” Parameter FB01ERR “C:\GL Test\FB01_err.txt”
// Start der Dateiausführung OpenFile “&[FB01FILE]” “Delimiter=;” OpenFile “&[FB01ERR]” “-Output”
Set V[FB01_errors] 0 Set V[FB01_records] 0
Screen SAPMF05A.0100
label start
// Gibt es eine Fehlermeldung im vorherigen Datensatz? if V[
_lasterror]
// Fehlermeldungszähler hochsetzen Set V[FB01_errors] &[FB01_errors] + 1
// Fehler Logfile schreiben AppendFile “&[FB01ERR]” s_date s_text s_pstky1 s_account1 s_amount1 s_pstky2 s_account2 s_amount2 _lasterror
// Fehlerzähler zurücksetzen (!). Automatisches Rücksetzen nur bei Start des InputScripts Set V[_lasterror] endif
ReadFile “-StripQuotationMarks” “&[FB01FILE]” s_date s_text s_pstky1 s_account1 s_amount1 s_pstky2 s_account2 s_amount2
// Ist ein weiterer Datensatz auszuführen? if V[s_date]
// Zähler hochsetzen Set V[FB01_records] &[FB01_records] + 1
Set F[Document date] &[s_date] Set F[Doc.header text] &[s_text] Set F[Company Code] “0001″ Set F[Type] “SA” Set F[Currency/rate] “USD”
Set F[Pstky] &[s_bschl1] Set F[Account] &[s_account]
Enter OnError=”/NFB01″
else
// Ausführung beendet, Dateien schließen CloseFile “&[FB01FILE]“ CloseFile “&[FB01ERR]“
if V[FB01_errors=0] Return “Processing done, no errors, &[FB01_records] documents in total” else
// Fehlermeldungen in Error log anzeigen View “&[FB01ERR]“
Return “Processing done: &[FB01_errors] errors, &[FB01_records] documents in total” endif endif
Screen SAPMF05A.0300 Set F[Amount] &[s_amount1] Set F[PstKy] &[s_pstky2] Set F[GL/ account] &[s_account2]
Enter OnError=”/NFB01″
Screen SAPMF05A.0300 Set F[Amount] &[s_amount2] Enter “/11″ OnError=”/NFB01″
Screen SAPMF05A.0100 goto start
Die Datei FB01_data.txt könnte folgendermaßen aussehen: 01122000;”GL text1″;40;113100;100;50;113101;100 02122000;”GL text2″;40;113100;200;50;113777;200 15122000;”GL text3″;40;113100;300;50;113101;300 32122000;”GL text4″;40;113100;400;50;113101;400 14122000;”GL text5″;40;113100;500;50;113101;500 01122000;”GL text6″;40;113100;100;50;13101M;100 02122000;”GL text7″;40;113100;200;50;113777;200 15122000;”GL text8″;40;113100;300;50;113101;300 32122000;”GL text9″;40;113100;400;50;113101;400
|