SAP Jobsuche bei DV-Treff
sapclaudi
vor 9 Jahre
Guten Tag,

zunächst vielen Dank für die Aufnahme in diese tolle Forum. Ich bin ursprünglich ABAP-Entwicklerung mit Schwerpunkt FI, habe mich aber nun seit 3 Wochen intensiv mit GuiXT und SAP Scripting beschäftigt - dank einiger sehr guter Hinweise hier. Nun stehe ich aber an einem Punkt, an dem ich nicht weiterkomme und bitte um Hilfe:

Ich habe ein GuiXT Skript für die TA KB11N geschrieben, das Daten aus einer ExcelListe bucht. Klappt soweit, bis ein Fehler (z.B. Kostenstelle nicht vorhanden) auftaucht. Dann läuft das Skript nicht weiter. Hier die betroffene Stelle:

...

Set F[BuchDatum] "&V[BuchDatum]"

Set F[Belegtext] "&V[Belegtext]"

Set F[Kostenst..2] "&V[Kostenst2]"

Enter "/11" OnError="Continue"

if V[_lasterror]

goto error

endif

... da bleibt er einfach stehen. Hier das ganze Skript:

// Select Excel File

SelectFile name="xlsfile" filter="*.xls;*.xlsx" directory="T:\MVS"

//done?

if not Q🆗

Return "I:Keine Datei ausgewählt" -statusline

endif

//Open file in Excel

CallVBS XL_open "&V[xlsfile]"

//Start with row 1

Set V[k] 0

//Zähler

Set V[k_ok] 0

Set V[k_skip] 0

Set V[k_err] 0

// Manuelle Umbuchung von Primärkosten erfassen

label erfassung

Enter "/nkb11n"

Screen SAPLK23F1.1220

label read_row_from_excel

Set V[k] &V[k] + 1

CallVBS XL_getrow &V[k]

//Zeilen alle eingelesen

if not V[Kostenst1]

goto all_done

endif

// status ok? Dann skip

if V[Status=OK]

Set V[k_skip] &V[k_skip] + 1

goto read_row_from_excel

endif

Set F[Kostenst.] "&V[Kostenst1]"

Set F[Kostenart] "&V[Kostenart]"

Set F[Betrag] "&V[Betrag]"

Set F[Belegdatum] "&V[Belegdatum]"

Set F[BuchDatum] "&V[BuchDatum]"

Set F[Belegtext] "&V[Belegtext]"

Set F[Kostenst..2] "&V[Kostenst2]"

Enter "/11" OnError="Continue"

if V[_lasterror]

goto error

endif

//Initialbildschirm

Screen SAPLK23F1.1220

// Set Status-Fields

Set V[Message] "&V[_message]"

Set V[Status] "OK"

Set V[Error] ""

CallVBS XL_updaterow &V[k]

//initialisieren

Set V[Message] ""

Set V[Status] ""

Set V[_lasterror] ""

// Zähler

Set V[k_ok] &V[k_ok] + 1

//nächster Beleg

goto erfassung

Ich hoffe, daß ScriptMan mir vielleicht helfen kann ?!? 😍

Herzlichen Dank vorab und viele Grüße,

Claudia

Förderer

ScriptMan
vor 9 Jahre
Hallo Claudia,

da wollen wir doch deine Hoffnung nicht enttäuschen. 😊

Innerhalb von nur 3 Wochen so ein ausgereiftes GuiXT-Projekt auf die Beine zu stellen: Mein Respekt!

Ich arbeite nicht mit GuiXT - Controls, die du verwendet hast. Aber dort bleibt das Skript auch nicht stehen und daher kein Problem. Ich habe eine Vermutung, die ich zuerst wie folgt schildern möchte:

1. Jedes Screen-Kommando erwartet irgendwann auch ein Enter-Kommando. Deshalb sollten diese beiden immer als ein Paar auftreten.

2. Ein einzelnes Enter-Kommando ohne ein vorheriges Screen-Kommando ist zulässig und wird manchmal auch gebraucht.

3. Ich vermute, dass der Inhalt von V[_lasterror] erst am Ende des Skriptes gefüllt wird und während der Abarbeitung nicht ohne weiteres gefüllt und ausgewertet werden kann.

Zusammengefasst könnte dein Skript wie folgt aussehen:

// Select Excel File

SelectFile name="xlsfile" filter="*.xls;*.xlsx" directory="T:\MVS"

//done?

if not Q🆗

Return "I:Keine Datei ausgewählt" -statusline

endif

//Open file in Excel

CallVBS XL_open "&V[xlsfile]"

//Start with row 1

Set V[k] 0

//Zähler

Set V[k_ok] 0

Set V[k_skip] 0

Set V[k_err] 0

// Manuelle Umbuchung von Primärkosten erfassen

Statusmessage -remove

set V[_lasterror] ""

set V[_msgtype] ""

label erfassung

Screen SAPLK23F1.1220

Enter "/nkb11n"

Screen SAPLK23F1.1220

label read_row_from_excel

Set V[k] &V[k] + 1

CallVBS XL_getrow &V[k]

//Zeilen alle eingelesen

if not V[Kostenst1]

goto all_done //Diese Sprungmarke ist hier n.v.

endif

// status ok? Dann skip

//if V[Status=OK]

// Set V[k_skip] &V[k_skip] + 1

//

// goto read_row_from_excel

//endif

Set F[Kostenst.] "&V[Kostenst1]"

Set F[Kostenart] "&V[Kostenart]"

Set F[Betrag] "&V[Betrag]"

Set F[Belegdatum] "&V[Belegdatum]"

Set F[BuchDatum] "&V[BuchDatum]"

Set F[Belegtext] "&V[Belegtext]"

Set F[Kostenst..2] "&V[Kostenst2]"

Enter "/11" OnError="Continue"

//if V[_lasterror]

// goto error

//endif

Statusmessage title="Fehlermitteilungen" SystemMessages="E"

//Initialbildschirm

//Screen SAPLK23F1.1220

// Set Status-Fields

Set V[Message] "&V[_message]"

Set V[Status] "OK"

Set V[Error] ""

CallVBS XL_updaterow &V[k]

//initialisieren

Set V[Message] ""

Set V[Status] ""

Set V[_lasterror] ""

// Zähler

Set V[k_ok] &V[k_ok] + 1

//nächster Beleg

goto erfassung

Lass uns mal wissen, wie es ausgegangen ist. Ansonsten gibt es hier im Forum ein Unterforum namens GuiXT. Wenn du deine Frage dorthin stellst, wird sie von viel mehr GuiXT-Anwendern gesehen.

Viel Spaß beim Testen!

ScriptMan

sapclaudi
vor 9 Jahre
Hallo Scriptman,

vielen Dank für die Antwort ! Ich hab jetzt ein funktionierendes Skript, das die Messages und Fehlermeldungen in Excel zurückschreibt. Hier das Skript:

--------------------

// Select Excel File

SelectFile name="xlsfile" filter="*.xls;*.xlsx" directory="T:\MVS"

//done?

if not Q🆗

Return "I:Keine Datei ausgewählt" -statusline

endif

//Open file in Excel

CallVBS XL_open "&V[xlsfile]"

//Start with row 2

Set V[k] 1

//Zähler

Set V[k_ok] 0

Set V[k_skip] 0

Set V[k_err] 0

// Manuelle Umbuchung von Primärkosten erfassen

label erfassung

//Screen SAPLK23F1.1220

Enter "/nkb11n"

Screen SAPLK23F1.1220

label read_row_from_excel

Set V[k] &V[k] + 1

CallVBS XL_getrow &V[k]

//Zeilen alle eingelesen ?

if not V[Kostenst1]

goto all_done

endif

// status ok? Dann skip

if V[Status=OK]

Set V[k_skip] &V[k_skip] + 1

goto read_row_from_excel

endif

Set F[Kostenst.] "&V[Kostenst1]"

Set F[Kostenart] "&V[Kostenart]"

Set F[Betrag] "&V[Betrag]"

Set F[Belegdatum] "&V[Belegdatum]"

Set F[BuchDatum] "&V[BuchDatum]"

Set F[Belegtext] "&V[Belegtext]"

Set F[Kostenst..2] "&V[Kostenst2]"

Enter "/11" OnError="Continue"

Screen SAPLK23F1.1220

//Excel-Update

if V[_lasterror]

Set V[Status] "Error"

Set V[Error] "&V[_lasterror]"

Set V[k_err] &V[k_err] + 1

else

Set V[Message] "&V[_message]"

Set V[Status] "OK"

Set V[Error] ""

Set V[k_ok] &V[k_ok] + 1

endif

CallVBS XL_updaterow &V[k]

//initialisieren

Set V[Message] ""

Set V[Status] ""

Set V[_lasterror] ""

goto erfassung

label all_done

Set V[k] &V[k] - 2

message "I: Anzahl Belege &V[k], davon &V[k_skip] uebersprungen, &V[k_ok] umgebucht, &V[k_err] fehlerhaft"

------------------

Es hing wohl wirklich mit der Platzierung der Screen-Anweisung zusammen. Allerdings habe ich Deinen Vorschlag der Message-Box noch nicht übernommen. Mache ich zu einem späteren Zeitpunkt mal, außerdem sollen die Meldungen ja in die Excel-Datei überschrieben werden.

Vielen Dank für Deine Hilfe !!!!

Claudia

ScriptMan
vor 9 Jahre
Hallo Claudia,

schön wenn es läuft. Irgendwo habe ich gelesen, dass die Variablen möglichst zwischen Screen und Enter ausgewertet werden sollen. Und das traf hier genau zu.

Das mit Statusmessage sollte nur eine Anregung sein. Ich habe nicht ahnen können, was sich hinter CallVBS XL_updaterow &V[k] verbirgt.

http://scn.sap.com/thread/1699675  dazu programmieren.

Was mich aber am meisten erstaunt hat, ist, dass eine ABAP-Entwicklerin sich mit solchen Themen wie GuiXT und SAP GUI Scripting auseinandersetzt. Vielleicht wird das dieser und der zukünftigen Technologie namens SAP Screen Personas, die bereits ganz stark im Kommen ist, einen Aufwind geben.

Viele Grüße,

ScriptMan