[Gelöst] Auftrag im Code öffnen, Zeile anpassen freigeben

26. Oktober 2016 16:46

Ich habe folgende Funktion programmiert:
ChangeLocation(VAR ParSalesLine : Record "Sales Line";ParNewLocationCode : Code[20])

LSalesHeader.GET(ParSalesLine."Document Type",ParSalesLine."Document No.");
// Öffnen
LReleaseSalesDoc.Reopen(LSalesHeader);
// Lagerort ändern
ParSalesLine.VALIDATE("Location Code",ParNewLocationCode);
ParSalesLine.MODIFY(TRUE);
// Freigeben
LReleaseSalesDoc.RUN(LSalesHeader);

Das funktioniert so nicht, weil der Reopen auch ein Modify auf die SalesLine macht und bei meinem Modify kommt dann die Meldung, dass ein anderer Benutzer schon den Datensatz geändert hat.

Bevor ich da jetzt ein oder zwei COMMITs reinhaue und bei einer Tabellensperre durch einen anderen Benutzer oder bei einem anderen Fehler einen unsauberen Rollback bekomme, der dann wieder manuelle Arbeit nach sich zieht - weiß jemand da evtl. die "Best Practice" - Lösung?
Zuletzt geändert von InfoWissler am 26. Oktober 2016 17:25, insgesamt 1-mal geändert.

Re: Auftrag im Code öffnen, Zeile anpassen, Auftrag freigebe

26. Oktober 2016 17:10

Hallo,

in der Tabelle 37 gibt es die Funktion "SuspendStatusCheck".
Vor deinem VALIDATE kannst du diese Funktion mit dem Parameter "true" aufrufen.
Damit kannst du die Statusprüfung, die in den diversen VALIDATE-Triggern der Tabelle aufgerufen wird, ausschalten, d.h. deine lokale Variable "LReleaseSalesDoc" benötigst du dann gar nicht.

Re: Auftrag im Code öffnen, Zeile anpassen, Auftrag freigebe

26. Oktober 2016 17:25

Das ist ja genial. Vielen Dank! Ich hatte die starke Hoffnung, dass es eine ebenso einfache wie gute Lösung gibt und das ist sie, super :-) Dann muss ich nur ganz sicher sein, dass die Funktion den Lagerort auch wirklich ändern können darf obwohl der Auftrag schon freigegeben ist, da grübel ich dann nochmal, aber eigentlich sollte es kein Problem sein - beim validieren des Lagerorts würde ja schon gemeckert, wenn da z.B. schon was geliefert oder fakturiert wurde.