[gelöst] Produktion/Auftragsplanung Fehlermeldung in SP1

19. Juni 2007 02:41

Moin moin,

nun hab ich mal wieder ne Frage.

Im Nav 4 SP1-Demomandanten sind ja schon einige Fertigungsaufträge angelegt.
Beim Ausführen der Funktion Aufträge erstellen in Produktion/Planung/Auftragsplanung (Form 5522) taucht folgendes merkwürdige Phänomen auf:
in der nativen Version (Client Only) funktioniert alles bestens (nachdem die Spalte "Liefern von" überall, wo nötig, ausgefüllt wurde.
in der SQL-Version jedoch, bei absolut gleichen Einstellungen, bricht das Programm mit der Fehlermeldung, dass Codeunit.Run innerhalb einer Schreibtransaktion nur ausgeführt werden darf, wenn der Rückgabewert nicht verwendet wird, ab.
Der Debugger steht dann in der Funktion TryCarryOutReqLineAction der Codeunit 333 in der Zeile

IF ReqWkshMakeOrders.RUN(ReqLine) THEN BEGIN ....

in der nativen Version läuft Navision anstandslos über diese Zeile hinweg. was ich im Einzelschrittmodus geprüft habe.

Kennt jemand dieses Phänomen?

Suche mit dem Stichwort Auftragsplanung ergab hier leider kein Ergebnis.
Zuletzt geändert von Michael Schumacher am 21. Juni 2007 17:29, insgesamt 1-mal geändert.

20. Juni 2007 13:57

Hallo Michael,

vor einige Zeit haben wir die Codeunit 333 im Hinblick auf den SQL-Server angepasst. Die genauen Hintergründe hierzu kann ich Dir nicht mehr sagen (mal wieder schlecht dokumentiert :roll: ).
Daher weiss ich also auch nicht, ob das Dein Problem behebt.
Aber vielleicht hilft dir der folgende Code ja tatsächlich :?:

Da sich bisher noch keiner zu Deinem Problem geäußert hat - kann es ja auf jeden Fall nicht schaden :wink:

Code:
WITH ReqLine DO BEGIN
  ReqWkshMakeOrders.Set(PurchOrderHeader,EndOrderDate,PrintPurchOrders);
  TempJnlLineDim.SETRANGE("Journal Line No.","Line No.");
  ReqWkshMakeOrders.SetTryParam(
    ReqTemplate,
    LineCount,
    NextLineNo,
    PrevPurchCode,
    PrevShipToCode,
    OrderCounter,
    OrderLineCounter,
    TempFailedReqLine,
    TempJnlLineDim);

//  IF ReqWkshMakeOrders.RUN(ReqLine) THEN BEGIN
  Ok := ReqWkshMakeOrders.RUN(ReqLine);
//Anpassung für SQL-Server +++++++++++++++++++
  ReqWkshMakeOrders.GetTryParam(
    PurchOrderHeader,
    LineCount,
    NextLineNo,
    PrevPurchCode,
    PrevShipToCode,
    OrderCounter,
    OrderLineCounter);

  IF Ok THEN BEGIN

    Window.UPDATE(3,OrderCounter);
    Window.UPDATE(4,LineCount);
    Window.UPDATE(5,OrderLineCounter);

  END;

  EXIT(Ok);
//END;
//EXIT(FALSE)
//Anpassung für SQL Server -------------------------------------
END;


PS: Ausserdem haben wir hier noch mit
RECORDLEVELLOCKING in Verbindung mit PlanningResiliency "gespielt"

Falls die entsprechenden Code-Bereiche für dich noch von Interesse sind, kannst Du ja bescheid sagen.

Gruß
Ralf Müller

20. Juni 2007 18:18

@neckit:
Diese Änderung bewirkt leider nicht das gewünschte, da mit "OK:=...."
ja immer noch der Rückgabewert abgefragt wird. genau das darf aber eben nicht.
möglicherweise ist deine Anmerkung bez. Recordlevellocking der Knackpunkt. also: "beischeid" ;-)

20. Juni 2007 22:21

Hallo Michael,

hier kommt der "Bescheid":

Den OnRun-Trigger haben wir wie folgt geändert:
Code:
//+++++++++++++++++++++++++++++++++++++
IF RECORDLEVELLOCKING AND PlanningResiliency THEN
  LOCKTABLE;
//-------------------------------------
CarryOutReqLineAction(Rec);


In der "Code"-Funktion haben wir dann noch folgendes geändert:
Code:
  //IF RECORDLEVELLOCKING THEN
  IF RECORDLEVELLOCKING AND NOT(PlanningResiliency) THEN


Bin gespannt, ob ein einfacher Anwender mal dem "Meistro" helfen kann 8-)
oder es leider doch vergebens war :-(
Viel Glück

Gruß
Ralf Müller

20. Juni 2007 22:37

neckit hat geschrieben:Bin gespannt, ob ein einfacher Anwender mal dem "Meistro" helfen kann 8-)
oder es leider doch vergebens war :-(

<OffTopic>
Nur keine Scheu!
Wir vom Team sind auch nur ganz normale Programmierer, die auch mal an ihre Grenzen stoßen. 8-)
Wir sind doch keine Halbgötter, nur weil wir hier in dieser Community für Recht und Ordnung sorgen :roll:
Und warum sollten wir dann nicht in der Community nachfragen, die wir auch betreuen? :wink:
</OffTopic>

20. Juni 2007 22:49

<OffTopic>
Schon klar Timo - war auch nur Spaß!

Bei den ganzen Tips und Hilfen - von Dir, Michael und natürlich auch allen anderen - die ich schon hier aus dem Forum ziehen konnte, macht es natürlich besondere Freude, wenn man auch mal was zurückgeben kann.

Das soll heißen - Danke für das tolle Forum. :!:

Gruß
Ralf Müller
</OffTopic>

[Edit: Ich war mal so frei und habe diesen Beitrag als <OffTopic> gekennzeichnet. Gruß, Timo]

20. Juni 2007 23:01

<OffTopic>
neckit hat geschrieben:Schon klar Timo - war auch nur Spaß!
Das war mir schon klar, nur passte es gerade und da wollte ich es einfach mal loswerden ;-)

neckit hat geschrieben:Das soll heißen - Danke für das tolle Forum. :!:
Vielen herzlichen Dank für das Kompliment.
Wie immer reiche ich es gleich weiter an alle Mitglieder, welche sich hier aktiv einbringen und diese Community zu dem gemacht haben, was es heute ist:
Die größte deutschsprachige "Microsoft related" Microsoft Dynamics Community!
Zwischendurch fiel auch schonmal die Bezeichnung "... das deutschsprachige MiBuSo."
</OffTopic>

21. Juni 2007 17:27

So, ich habs,

Es sind nicht nur die hier durch neckit gezeigten Änderungen (übrigens in SP3 bereits enthalten), sondern noch ein paar weitere, die alle aufzuführen hier aber zu umfangreich wird.
Hier der Überblick:
In SP3 funktioniert es ohne Fehler, also habe ich verglichen, was der Unterschied ist.
Im Report 99001020 sind ein paar Unterschiede, 1:1 übernommen
in der Codeunit 333 alle Änderungen bis auf 3 übernommen.
diese 3 sind 2 Funktionsaufrufe, die einen weiteren Parameter (0D) in SP3 haben und das Auslagern der Lieferanschriftbefüllung in eine Funktion im PurchHeader, die es in SP1 noch nicht gibt.
Nach Implementieren dieser Änderungen funktioniert die Auftragserzeugung perfekt.