Gelöst Bearbeitung in der Belegerfassung verhindern

Guten Tag,

ich habe die Anforderung in der Belegerfassung das Ändern der Menge sowie Löschen und Hinzufügen der Position zu unterbinden.

Das darf jedoch bei Belegen und Positionen mit einem Kennzeichen (Eintrag im Benutzerdefinierten Feld) verhindert werden.

Hat jemand einen Tipp für mich, wie ich das umsetzen kann?

In der DCM kann ich mich nur an den Prozess anhängen, aber leider nicht verhindern...

Gruß Vitalij
 
Ändern der Menge:
DCM VKBelegPositionProxyChangeArtikelposition: Fehler-Eintrag in die Errorcollection der DCM
Hinzufügen von Positionen:
DCM VKBelegPositionProxyAddArtikelposition und VKBelegPositionProxyPaste: Fehler-Eintrag in die Errorcollection der DCM
Löschen von Positionen:
DCM VKBelegPositionProxyDeletePosition: Setzen des Cancel-Flags der DCM und Fehler-Eintrag in die Errorcollection der DCM
Sollte es für den Einkauf gelten sind natürlich die DCMs des Einkaufs zu verwenden.
 
Wenn ich das so umsetze, wird die Menge trotztem eingetragen und nicht auf den ursprünglichen Wert gesetzt.
Auch die Fehlermeldung wird beim erneuten Ändern der Menge mehrfach eingetragen.
upload_2018-1-9_15-22-7.png

Code sieht so aus:
upload_2018-1-9_15-23-34.png
 
Fehler ohne Feldbezug bleiben erhalten. Nur beim Feldbezug und Änderung des Feldes wird die Fehlermeldung vom Client aus dem Fehlerstack entfernt. Sie könnten also in die Property Source des Erroritems dies "Positionen|" + position.Bag.StringValues("$uuid") + "|Menge" eintragen. Dann hätten Sie den Feldbezug.

Es gibt keine Möglichkeit den alten Wert über die Oberfläche zurückzusetzen. Dies kann nur programmatisch erfolgen. Sie müssten also ein eigenes Feld (sinnvollerweise ein benutzerdefiniertes Feld, da der Datentransfer vom System übernommen wird) anlegen (und an Datenstruktur und Multi-Data-Edit anhängen und die entsprechenden DCMs zum Datentransfer implementieren, wenn es denn kein benutzerdefiniertes Feld ist) und in der DCM VKBelegProxyAfterLoad das Feld füllen und dann in der o.a. DCM in das Feld zurückschreiben (dabei sind die "normalen" Referesh-Methoden bei Mengenänderung des Positionsobjektes zu beachten).

Falls ich Ihre Fehlermeldung richtig interpretiere und bei einem importieren Beleg generell keine Mengenänderungen vorgenommen werden dürfen, gibt es eine weitere, weitaus elegantere Methode die Änderung zu verhindern. Man kann das Feld auch auf Disabled setzen. Dazu verwenden Sie die DCM VKBelegProxyBelegPositionEnable und hängen das Feld "Menge" kommasepariert an die Property "DisabledFieldList"
 
Vielen Dank Herr Langmaack, das hat funktioniert!

Eine Sache noch:
wenn ich das Einfügen einer Position in der DCM abblocke, und den Fokus in eine andere Zeile setze, dann wird eine leere Position hinzugefügt, habe hierzu einen Workaround beim Löschen erstellt. Ist es noch ein Fehler oder habe ich einen Bug eingebaut...?
upload_2018-1-9_17-0-40.png

Code:
upload_2018-1-9_17-0-56.png
 
Zuletzt bearbeitet:
Das kommt vom Client. Ist auch so, wenn Sie z.B. im Demomandanten die Artikelnummer "abc" eingeben und dann in die nächste Zeile klicken. Leere Positionszeilen werden von Sage auf Serverseite behandelt. Für Sie sollte da nichts zu tun sein.
 
Zurück
Oben