Die Behandlung von Dateien in InputScripts
Dateien lesen und schreiben während automatisierter Transaktionsverarbeitung

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] &[F
B01_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


Die Behandlung von Dateien in InputScripts