Beleg Dirty nach Addin-Aufruf

bbusch

Mitglied
Hallo,

ich habe folgendes Problem:

Nach der Belegspeicherung wird über die Kombination
- Makro "Nach Einfügung / Nach Änderung"
- Kontextmenü mit gsAppServiceCall
ein Addin aufgerufen. In diesem Addin wird ein Benutzerdefiniertes Feld im Beleg geändert und das Belegobjekt danach gespeichert.

In der Erfassung wird der Beleg anschließend als 'Dirty' behandelt (die Schaltfläche "Beleg abschließen" ist aktiv).
Dies ist nicht gewünscht und sollte m.E. durch die Belegspeicherung im Code und den Übergabeparameter "Vollstaendig : Ersetzen" eigentlich nicht sein. Außerdem meine ich, dass dies in früheren Versionsständen nicht so war.

Hat jemand einen Tipp wie dies gelöst werden kann?

Danke
 
Der beste Weg wäre die Daten vor dem Speichern abzufragen oder programmatisch zu füllen. Dann muss man sich die Daten merken (dazu gibt es mehrere Beispiel im Wiki oder Kochbuch) und im besten Fall in der entsprechenden BelegEngine-DCM in der Transaktion speichern. Und das Merken und Speicher entfällt sogar bei benutzerdefinierten Feldern.

Was müssen Sie in Ihrem Fall berücksichtigen?
Sie müssen die Option "mit Abschluss drucken und schließen" berücksichtigen (=False -> Beleg bleibt in der Erfassung, Belegobjekt vorhanden, = True -> Erfassung wird geleert -> nur leeres Belegobjekt vorhanden).
Wenn Sie den Beleg außerhalb der Erfassung speichern, ändern Sie den Timestamp des Datensatzes. Wird der Beleg weiter bearbeitet erhalten Sie beim Speichern den Fehler ...der Beleg wurde bereits geändert. Kein Speichern möglich...

Im Grunde haben Sie nun genau den Fall, den wir beim Drucken haben. Man kann den Beleg drucken. Es werden Druck-Felder aktualisiert, das Belegobjekt wird an den Client zurückgeschickt und die Erfassung wird nicht dirty.

Schauen Sie sich den Kontextmenüeintrag VKBelegErfassung.Drucken (Sage.Wawi) an. Hier gibt es zwei Makros:
1. einen gsAppServiceCall
2. einen DataServiceExecute SetBelegRowVersion

Der zweite Aufruf aktualisiert den Timestamp und setzt das Dirty-Flag auf False. Eine Möglichkeit dies aus Access zu setzen gibt es nicht (nur die Möglichkeit IsDirty = True zu setzen.
 
Hallo Herr Langmaack,

es geht hierbei nicht einfach nur um eine Benutzereingabe, die gespeichert werden soll.
Vor dem Speichern einzugreifen ist keine Option, die Lösung erfordert einen bereits gespeicherten Beleg, der dann um weitere Informationen ergänzt werden muss.

Der Punkt mit dem Flag [IstAbschlussEndgueltig] ist bekannt und wird bereits berücksichtigt.

Dem Hinweis auf 'SetBelegRowVersion' werde ich mal nachgehen, vielen Dank.
 
Zurück
Oben