[gelöst] Ein anderer Anwender hat den Datensatz geändert...

13. Februar 2008 15:09

Hallo liebe Forengemeinde,

ich habe ein großes Problem.
Ich habe eine Anpassung programmiert und auch bei einem Kunden installiert.
Beim drucken von Angeboten sollen die Einstellungen aus der Requestform im jeweiligen Angebot gespeichert werden.

Auf meiner Testdatenbank funktioniert diese Anpassung auch. Aber der Kunde bekommt jedes Mal die Fehlermeldung "Ein anderer Anwender hat..." und kann deshalb keine Angebote mehr ausdrucken.

Die Werte speichere ich etwa so in den Verkaufskopf:

Report - onPostReport()
Code:
recVKKopf.Wert1 := Wert1;
recVKKopf.Wert2 := Wert2;
recVKKopf.MODIFY;


Gibt es da nicht irgend eine Anweisung das man den Fehler unterdrücken kann?

Ich hoffe mir kann schnell jemand helfen, ich soll gleich den Fehler beheben...
Zuletzt geändert von Steev am 13. Februar 2008 17:19, insgesamt 2-mal geändert.

13. Februar 2008 16:34

Schade,
es kann mir wohl keiner helfen?

Ich habe jetzt mal beim Kunden die Funktion vorerst auskommentiert.
Gibt es da nicht irgendwelche Datenbankfunktionen die die Transaktionen abschließen? (Auser Commit, das habe ich schon ausprobiert)

13. Februar 2008 16:37

Hast du es schonmal mit einem MODIFY nach dem VALIDATE ausprobiert?

13. Februar 2008 16:43

Ja, das war eigendlich nur ein Fehler, anstatt des VALIDATE habe ich da auch ein MODIFY stehen.

Gerade das Modify stellt ja das Problem dar.

Ohne das Modify wird der Fehler gar nicht auftreten da ich den Datensatz ja nicht ändere und somit auch keine Schreibtransaktion eröffne.

Mit Modify kommt die Fehlermeldung:

Ein anderer Anwender hat den Datensatz verändert nachdem er angezeigt wurde...

13. Februar 2008 16:45

Führe nach dem Druck auf der Mainform ein CurrForm.UPDATE(FALSE) aus.

13. Februar 2008 16:47

Hi,

ist die Tabelle der Variable recVKKopf in diesem Report mehrfach vorhanden? -> also als Dataitem, oder andere Variable etc?

Greifst du im Report nach dem Modify nochmal auf die Tabelle zu?

-- edit --
Ach, ich sehe gerade, dass du den Fehler bereits beim Modify bekommst. Machst du also vor diesem Modify mit einer anderen Variable auf diese Tabelle ein Modify?

Gruese
feri
Zuletzt geändert von feri am 13. Februar 2008 16:49, insgesamt 1-mal geändert.

13. Februar 2008 16:49

@Natalie:
Das habe ich auch gedacht,
leider weis die mainform aber nicht wann der Report ausgedruckt ,und damit auch nicht wann der Datensatz verändert wurde.
Weil der Report ja nicht direkt über den Button aufgerufen wird sondern über die Codunit "Document-Print".
Jetzt weis ich nicht wie ich dann die Form updaten soll. onTimer ist ja wohl sehr sinnfrei.

13. Februar 2008 16:56

Ich schließe mich mal feri's Frage an. Machst du irgendwo vor dem Report noch ein MODIFY auf die Tabelle?

13. Februar 2008 17:05

Nein, es liegt daran das die Form des Verkaufsangebots noch weiterläuft während der Datensatz modifiziert wird. Und dann kommt auch die Fehlermeldung.

Ich schreibe mir gerade eine Funktion der ich die Form übergebe und die die Form nach dem speichern updatet. Das sollte Funktionieren.

13. Februar 2008 17:06

Muss eigentlich funktionieren. Der Lieferscheindruck aus der geb. Lieferung macht das gleiche ja auch mit dem Feld "Anzahl gedruckt". Schau da mal nach.

oder um die Sache zu umgehen, würde ich den Filter in einer Seperaten Tabelle speichern, die an den Beleg rangelinkt ist.

13. Februar 2008 17:10

Wie wird der Report vom Benutzer angestoßen? Das geht doch über den Drucken-Button auf der Mainform, oder?
Wenn ja, dann packe das CurrForm.UPDATE(FALSE) dahinter.

13. Februar 2008 17:12

Das habe ich schon probiert, aber gespeichert wird ja erst onPostReport und damit lange nachdem die Anweisung hinter dem Aufruf der Druck-Codeunit.

Ich bin gleich mit der Methode fertig. Mal sehen ob das so funktioniert wie ich mir das denke.

13. Februar 2008 17:16

Steev hat geschrieben:Das habe ich schon probiert, aber gespeichert wird ja erst onPostReport und damit lange nachdem die Anweisung hinter dem Aufruf der Druck-Codeunit.

Ich verstehe das Problem nicht - du sollst auf höchster Ebene, nämlich im MenuItem-OnPush-Trigger nach dem bisherigen Prozedere einfach ein CurrForm.UPDATE(FALSE) einfügen - bis zu diesem Zeitpunkt sind all deine Druckroutinen gelaufen.

13. Februar 2008 17:18

Ja, das klappt. Ich habe einfach nur eine Form-Variable mit der gleichen Tabellenansicht erstellt und diese dann nach dem speichern geupdatet.