Ich habe ein Programm geschrieben, dass über eine interne Tabelle loopt und dann pro Eintrag ein Programm ausführt, dass eine Datenbankänderung bewirkt.
Nach der Rückkehr in das aufrufende Programm habe ich ein "Commit work and wait" eingefügt, damit die Daten fest auf der Datenbank gespeichert sind. Aber dies funktioniert nicht.
Hier mein Coding. Code:
LOOP AT ivbrk.
SUBMIT rnasto01 EXPORTING LIST TO MEMORY
* via selection-screen
WITH einri EQ ivbrk-isheinri
WITH rb_cnum EQ 'X'
WITH selkz EQ ' '
WITH rb_csel EQ ' '
WITH r_belnr EQ ivbrk-vbeln
WITH r_falnr EQ ivbrk-ishfalnr
WITH storndat EQ dat
WITH stoid EQ ' '
WITH storno EQ 'X'
WITH ausdruck EQ ausdruck
WITH test_pr EQ ' '
WITH mult_sc EQ ' '
WITH selkzf EQ ' '
WITH seltxf EQ ' '
WITH p_silent EQ 'X'
WITH p_calld EQ 'X'
AND RETURN.
commit work and wait.
ENDLOOP.
In diesem Fall soll das Programm Alle Rechnungen nacheinander stornieren.
Es werden aber nicht alle Rechnung storniert.
Wenn das Programm mittels einer Schleife 2 Mal ausführe, storniert mir das Programm zwar alle Rechnungen, aber manche auch doppelt. (Wie auch immer das geht).
Hat jemand eine Idee? Ich bin am Verzweifeln.
bin mir nicht so ganz sicher, aber vermutlich wird wird bereits durch das Verlassen des submit-Report ein commit abgesetzt, da der interne Modius geschlossen wird. Vermutlich musst Du den commit/wait dort setzen, wo der V1-Verbucher den Beleg verbucht, also in dem submit-Report.
Ichhabe mir manchmal schon so geholfen, dass ich in einerr DO-Schleife so lange die Datenbank mit der Belegnummer gelesen habe, bis sie vom Verbucher dort eingetragen war und dann mit meiner Schleife weitergemacht. Ist zwar unschön, aber manchmal hilfts.