Doppelte Reservierungseinträge werden generiert, wenn Sie die Planungs-Engine für einen Artikel zweimal in Microsoft Dynamics NAV 2009 ausführen
Dieser Artikel gilt für Microsoft Dynamics NAV für alle Länder und alle Sprachgebietsschemas.
Symptome
Angenommen, Sie führen die Planungsmaschine für einen Artikel mit einem in Microsoft Dynamics NAV 2009 enthaltenen Bedarf aus. Sie führen die Planungsmaschine für den Artikel erneut aus. Wenn in diesem Fall der Bedarf nicht zum zweiten Mal in Folge berücksichtigt wird, werden doppelte Reservierungseinträge generiert.
Hinweis Dieses Problem tritt unabhängig davon auf, ob die Standorte die Lagerfunktion nutzen oder nicht. Dieses Problem tritt bei folgenden Produkten auf:Microsoft Dynamics NAV 2009 R2
Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Auflösung
Hotfix-Informationen
Ein unterstützter Hotfix ist jetzt von Microsoft verfügbar. Es dient jedoch lediglich der Behebung des in diesem Artikel beschriebenen Problems. Wenden Sie es nur auf Systeme an, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise weiteren Tests unterzogen. Wenn Sie von diesem Problem nicht schwerwiegend betroffen sind, empfehlen wir Ihnen daher, auf das nächste Microsoft Dynamics NAV Service Pack oder die nächste Microsoft Dynamics NAV-Version zu warten, die diesen Hotfix enthält.
Hinweis: In besonderen Fällen können die Gebühren, die normalerweise für Supportanrufe anfallen, storniert werden, wenn ein Mitarbeiter des technischen Supports für Microsoft Dynamics und verwandte Produkte feststellt, dass ein bestimmtes Update Ihr Problem lösen wird. Für zusätzliche Supportfragen und Probleme, die für das jeweilige Update nicht in Frage kommen, fallen die üblichen Supportkosten an.Installationsinformationen
Microsoft stellt Programmierbeispiele nur zur Veranschaulichung zur Verfügung, ohne ausdrückliche oder stillschweigende Gewährleistung. Dazu gehören unter anderem stillschweigende Garantien der Marktgängigkeit oder Eignung für einen bestimmten Zweck. In diesem Artikel wird davon ausgegangen, dass Sie mit der demonstrierten Programmiersprache und den Tools vertraut sind, die zum Erstellen und Debuggen von Prozeduren verwendet werden. Microsoft-Supporttechniker können dabei helfen, die Funktionalität einer bestimmten Prozedur zu erläutern, sie werden diese Beispiele jedoch nicht ändern, um zusätzliche Funktionalität bereitzustellen oder Prozeduren zu erstellen, die Ihren spezifischen Anforderungen entsprechen.
Hinweis Bevor Sie diesen Hotfix installieren, stellen Sie sicher, dass alle Benutzer des Microsoft Navision-Clients vom System abgemeldet sind. Dazu gehören Clientbenutzer von Microsoft Navision Application Services (NAS). Sie sollten der einzige Clientbenutzer sein, der angemeldet ist, wenn Sie diesen Hotfix implementieren. Um diesen Hotfix zu implementieren, benötigen Sie eine Entwicklerlizenz. Wir empfehlen, dem Benutzerkonto im Fenster „Windows-Anmeldungen" oder im Fenster „Datenbank-Anmeldungen" die Rollen-ID „SUPER" zuzuweisen. Wenn dem Benutzerkonto nicht die Rollen-ID „SUPER" zugewiesen werden kann, müssen Sie überprüfen, ob das Benutzerkonto über die folgenden Berechtigungen verfügt:Die Änderungsberechtigung für das Objekt, das Sie ändern möchten.
Die Ausführungsberechtigung für das Systemobjekt-ID-5210-Objekt und für das Systemobjekt-ID-9015-Objekt.
Hinweis Sie müssen keine Rechte an den Datenspeichern haben, es sei denn, Sie müssen eine Datenreparatur durchführen.
Codeänderungen
Hinweis: Testen Sie Codekorrekturen immer in einer kontrollierten Umgebung, bevor Sie die Korrekturen auf Ihren Produktionscomputern anwenden.
Um dieses Problem zu beheben, führen Sie die folgenden Schritte aus:Ändern Sie den Code in der Funktion „CloseReservEntry" im Reservation Engine Mgt. Codeunit (99000831) wie folgt:
Vorhandener Code...
ReservEntry2.MODIFY; ReservEntry2."Menge (Basis)" := ReservMgt.MatchSurplus(ReservEntry2,SurplusReservEntry,ReservEntry2."Menge (Basis)",NOT ReservEntry2.Positive, AvailabilityDate,Item."Order Tracking Policy"); WENN ReservEntry2."Menge (Basis)" = 0, DANN BEGINNEN ReservEntry2.DELETE(TRUE); ENDE SONST BEGINNEN ReservEntry2.MODIFY; IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." DANN BEGINNEN ModifyActionMessageDating(ReservEntry2); WENN Alles löschen DANN ReservMgt.IssueActionMessage(ReservEntry2,FALSE,ReservEntry) ANDERS ...Ersatzcode
...
ReservEntry2.MODIFY; ReservEntry2."Menge (Basis)" := ReservMgt.MatchSurplus(ReservEntry2,SurplusReservEntry,ReservEntry2."Menge (Basis)",NOT ReservEntry2.Positive, AvailabilityDate,Item."Order Tracking Policy"); WENN ReservEntry2."Menge (Basis)" = 0, DANN BEGINNEN ReservEntry2.DELETE(TRUE); ENDE SONST BEGINNEN // Fügen Sie die folgende Zeile hinzu. ReservEntry2.VALIDATE("Menge (Basis)"); ReservEntry2.MODIFY; IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." DANN BEGINNEN ModifyActionMessageDating(ReservEntry2); WENN Alles löschen DANN ReservMgt.IssueActionMessage(ReservEntry2,FALSE,ReservEntry) ANDERS ...Fügen Sie wie folgt einen neuen Schlüssel in der Tabelle „Inventarprofil" (99000853) hinzu:
{ ;Quellentyp,Quellenauftragsstatus,Quellen-ID,Name der Quellencharge,Quellenreferenz. Nr.,Quelle Prod. Auftragsposition, IstLieferung, Fälligkeitsdatum }
Fügen Sie einen neuen lokalen Parameter in der Funktion „DeleteTracking" in der Codeunit „Inventory Profile Offsetting" (99000854) wie folgt hinzu:
Vorhandener CodeLOKALE VERFAHREN DeleteTracking@25(VAR SKU@1000: Datensatz 5700;ToDate@1001: Datum);
Ersatzcode
LOKALE VERFAHREN DeleteTracking@25(VAR SKU@1000: Datensatz 5700;ToDate@1001: Datum;VAR SupplyInventoryProfile@1002: Datensatz 99000853);
Fügen Sie eine neue lokale Variable in der Funktion „DeleteTracking" in der Codeunit „Inventory Profile Offsetting" (99000854) hinzu und geben Sie die Variable dann wie folgt an:
Name : ResEntryWasDelete
Datentyp : Boolean
Ändern Sie den Code in der Funktion „DeleteTracking" in der Codeeinheit „Inventory Profile Offsetting" (99000854) wie folgt:
Vorhandener Code...
WENN FIND('-') DANN WIEDERHOLEN IF (("Reservierungsstatus" <> "Reservierungsstatus"::Reservierung) UND („Erwartetes Empfangsdatum" <= ToDate) UND („Versanddatum" <= ToDate)) ODER ((Binding = Binding::"Order-to-Order") AND ("Shipment Date" <= ToDate)) DANN BEGINNEN // Folgende Zeilen löschen. ActionMsgEntry.SETRANGE("Reservierungseintrag","Eintragsnr."); LÖSCHEN; ActionMsgEntry.DELETEALL; ENDE; // Ende der Zeilen. BIS NÄCHSTES = 0; ENDE; ...Ersatzcode
...
WENN FIND('-') DANN WIEDERHOLEN IF (("Reservierungsstatus" <> "Reservierungsstatus"::Reservierung) UND („Erwartetes Empfangsdatum" <= ToDate) UND („Versanddatum" <= ToDate)) ODER ((Binding = Binding::"Order-to-Order") AND ("Shipment Date" <= ToDate)) DANN BEGINNEN // Fügen Sie die folgenden Zeilen hinzu. ResEntryWasDeleted := TRUE; LÖSCHEN; ENDE SONST ResEntryWasDeleted := CloseTracking(ReservEntry,SupplyInventoryProfile,ToDate); WENN ResEntryWasDeleted, DANN BEGINNEN ActionMsgEntry.SETRANGE("Reservierungseintrag","Eintragsnr."); ActionMsgEntry.DELETEALL; ENDE; // Ende der Zeilen. BIS NÄCHSTES = 0; ENDE; ...Fügen Sie eine neue CloseTracking-Funktion in der Codeunit „Inventory Profile Offsetting" (99000854) wie folgt hinzu:
LOKALE VERFAHREN CloseTracking@92(ReservEntry@1000: Datensatz 337;VAR SupplyInventoryProfile@1001: Datensatz 99000853;ToDate@1002: Datum): Boolean;
VAR xSupplyInventoryProfile@1003: Datensatz 99000853; ReservationEngineMgt@1004: Codeeinheit 99000831; Geschlossen@1005: Boolean; BEGINNEN SIE MIT ReservEntry WENN „Reservierungsstatus" <> „Reservierungsstatus"::Tracking DANN EXIT(FALSE); xSupplyInventoryProfile.COPY(SupplyInventoryProfile); Geschlossen := FALSE; WENN („Erwartetes Empfangsdatum" <= ToDate) UND („Versanddatum" > ToDate) DANN BEGINNEN // Tracking existiert mit zukünftiger Nachfrage SupplyInventoryProfile.SETCURRENTKEY( „Quellentyp", „Quellenauftragsstatus", „Quellen-ID", „Quellen-Chargenname", „Quellen-Ref.-Nr.", „Quellen-Produktionsauftragszeile", „IsSupply"); SupplyInventoryProfile.SETRANGE("Quelltyp","Quelltyp"); SupplyInventoryProfile.SETRANGE("Source Order Status","Source Subtype"); SupplyInventoryProfile.SETRANGE("Quell-ID","Quell-ID"); SupplyInventoryProfile.SETRANGE("Name des Quellstapels","Name des Quellstapels"); SupplyInventoryProfile.SETRANGE("Source Ref. No.","Source Ref. No."); SupplyInventoryProfile.SETRANGE("Quellproduktionsauftragszeile","Quellproduktionsauftragszeile"); SupplyInventoryProfile.SETRANGE("Fälligkeitsdatum",0D,ToDate); WENN NICHT SupplyInventoryProfile.ISEMPTY, DANN BEGINNEN // Bedarf wird entweder ebenfalls gelöscht oder erhält den Status „Überschuss". ReservMgt.CloseReservEntry(ReservEntry,FALSE,FALSE); Geschlossen := TRUE; ENDE; ENDE; ENDE; SupplyInventoryProfile.COPY(xSupplyInventoryProfile); EXIT(Geschlossen);Ändern Sie den Code in der PlanItem-Funktion in der Codeunit „Inventory Profile Offsetting" (99000854) wie folgt:
Vorhandener Code...
// Vorläufige Bereinigung der Sendungsverfolgung WENN DemandExists ODER SupplyExists DANN // Folgende Zeile löschen. DeleteTracking(TempSKU,ToDate); MatchAttributes(Supply,Demand); // Anfangsbestand berechnen ...Ersatzcode
...
// Vorläufige Bereinigung der Sendungsverfolgung WENN DemandExists ODER SupplyExists DANN // Fügen Sie die folgende Zeile hinzu. DeleteTracking(TempSKU,ToDate,Supply); MatchAttributes(Supply,Demand); // Anfangsbestand berechnen ...
Voraussetzungen
Um diesen Hotfix anwenden zu können, muss eines der folgenden Produkte installiert sein:
Microsoft Dynamics NAV 2009 R2
Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Informationen zum Entfernen
Sie können diesen Hotfix nicht entfernen.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Gilt für" aufgeführt sind.
Hinweis Dies ist ein „FAST PUBLISH"-Artikel, der direkt von der Microsoft-Supportorganisation erstellt wurde. Die hierin enthaltenen Informationen werden unverändert als Reaktion auf neu auftretende Probleme bereitgestellt. Aufgrund der schnellen Bereitstellung können die Materialien Tippfehler enthalten und jederzeit ohne Vorankündigung überarbeitet werden. Weitere Hinweise finden Sie in den Nutzungsbedingungen .
No comments:
Post a Comment