Doppelte Reservierungsposten werden generiert, wenn Sie die Planung 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 Gebietsschemas.

Problembeschreibung


Angenommen Sie, Sie die Planung für einen Artikel mit in Microsoft Dynamics NAV 2009 enthalten ausgeführt. Ausführen der Planungsfunktion für das Element erneut. In diesem Fall werden die Anforderung nicht in der zweiten Mal enthalten doppelte Reservierungsposten generiert.
Hinweis Dieses Problem tritt unabhängig davon auf, ob die Lagerorte Logistik-Funktionalität nutzen oder nicht.
Dieses Problem tritt in den folgenden Produkten auf:
  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Servicepack 1 (SP1)

Problemlösung


Hotfix-Informationen

Ein unterstützter Hotfix ist inzwischen von Microsoft erhältlich. Allerdings ist es lediglich zur Behebung dieses Problems. Wenden Sie es nur auf Systeme an, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise noch getestet. Wenn Ihr System durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfehlen wir, dass Sie warten auf das nächste Servicepack für Microsoft Dynamics NAV oder die nächste Microsoft Dynamics NAV-Version, die diesen Hotfix enthält.

Hinweis In besonderen Fällen bestimmt Gebühren fallen normalerweise Support aufrufen Wenn Experte Support für Microsoft Dynamics und zugehörige Produkte storniert werden können, dass ein bestimmtes Update Ihr Problem behebt. Die normalen Supportkosten gilt für zusätzliche Supportfragen und Probleme, die nicht für das betreffende Update qualifizieren.


Informationen zur Installation

Microsoft bietet Programmierbeispiele lediglich zur Veranschaulichung, ohne ausdrückliche oder konkludente Gewährleistung. Dies beinhaltet, ist jedoch nicht beschränkt auf, konkludente Gewährleistungen der Tauglichkeit oder Eignung für einen bestimmten Zweck. Dieser Artikel setzt voraus, dass Sie mit der von Beispielen verwendeten Programmiersprache und den Tools, die zum Erstellen und Debuggen von Prozeduren verwendet werden, vertraut sind. Microsoft-Supportmitarbeiter können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, sie werden jedoch diese Beispiele nicht verändern um eine erweiterte Funktionalität aufzuzeigen oder Prozeduren entwickeln, die Ihren Anforderungen entsprechen.

Hinweis Bevor Sie diesen Hotfix installieren, stellen Sie sicher, dass alle Microsoft Navision-Clientbenutzer vom System abgemeldet werden. Dies gilt auch für Clientbenutzer der Microsoft Navision Application Services (NAS). Sie sollte nur-Client-Benutzers, der angemeldet ist, wenn Sie diesen Hotfix installieren.

Muss eine Entwicklerlizenz verfügen, um diesen Hotfix installieren können.

Es wird empfohlen, das Benutzerkonto im Fenster Windows-Benutzernamen oder im Fenster Datenbank-Anmeldenamen "SUPER" Rollen-ID zugewiesen werden Wenn das Benutzerkonto die Rollen-ID "SUPER" nicht zugeordnet werden kann, müssen Sie sicherstellen, dass das Benutzerkonto die folgenden Berechtigungen verfügt:
  • Änderungsberechtigung für das Objekt, das Sie ändern.
  • Ausführungsberechtigung für System Object ID 5210 und System Object ID 9015 -Objekt.


Hinweis Sie müssen keinen Datenspeicher Rechte nur Daten zu reparieren.

Ändern von Code

Hinweis Testen Sie Programmcodeverbesserungen generell erst in einem Testsytem, bevor Sie sie im Produktionssystem verwenden.
Gehen Sie folgendermaßen vor, um dieses Problem zu beheben:
  1. Ändern Sie den Code in der Funktion CloseReservEntry in der Codeunit "Reservation Engine Mgt" (99000831) wie folgt:
    Vorhandener code
    ...ReservEntry2.MODIFY;
    ReservEntry2."Quantity (Base)" :=
    ReservMgt.MatchSurplus(ReservEntry2,SurplusReservEntry,ReservEntry2."Quantity (Base)",NOT ReservEntry2.Positive,
    AvailabilityDate,Item."Order Tracking Policy");
    IF ReservEntry2."Quantity (Base)" = 0 THEN BEGIN
    ReservEntry2.DELETE(TRUE);
    END ELSE BEGIN
    ReservEntry2.MODIFY;

    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN BEGIN
    ModifyActionMessageDating(ReservEntry2);
    IF DeleteAll THEN
    ReservMgt.IssueActionMessage(ReservEntry2,FALSE,ReservEntry)
    ELSE
    ...
    Neuer code
    ...ReservEntry2.MODIFY;
    ReservEntry2."Quantity (Base)" :=
    ReservMgt.MatchSurplus(ReservEntry2,SurplusReservEntry,ReservEntry2."Quantity (Base)",NOT ReservEntry2.Positive,
    AvailabilityDate,Item."Order Tracking Policy");
    IF ReservEntry2."Quantity (Base)" = 0 THEN BEGIN
    ReservEntry2.DELETE(TRUE);
    END ELSE BEGIN

    // Add the following line.
    ReservEntry2.VALIDATE("Quantity (Base)");

    ReservEntry2.MODIFY;

    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN BEGIN
    ModifyActionMessageDating(ReservEntry2);
    IF DeleteAll THEN
    ReservMgt.IssueActionMessage(ReservEntry2,FALSE,ReservEntry)
    ELSE
    ...
  2. Fügen Sie einen neuen Schlüssel in der Tabelle Lagerprofil (99000853) wie folgt:
    { ;Source Type,Source Order Status,Source ID,Source Batch Name,Source Ref. No.,Source Prod. Order Line,IsSupply,Due Date }
  3. Fügen Sie einen neuen lokalen Parameter in der DeleteTracking -Funktion im Modul Lager Profil versetzen (99000854) wie folgt:
    Vorhandener code
    LOCAL PROCEDURE DeleteTracking@25(VAR SKU@1000 : Record 5700;ToDate@1001 : Date);
    Neuer code
    LOCAL PROCEDURE DeleteTracking@25(VAR SKU@1000 : Record 5700;ToDate@1001 : Date;VAR SupplyInventoryProfile@1002 : Record 99000853);
  4. Fügen Sie eine neue lokale Variable in der DeleteTracking -Funktion im Modul Lager Profil versetzen (99000854), und geben Sie die Variable wie folgt:
    • Name: ResEntryWasDelete
    • Datentyp: Boolean
  5. Ändern Sie den Code in der DeleteTracking -Funktion im Modul Lager Profil versetzen (99000854) wie folgt:
    Vorhandener code
    ...IF FIND('-') THEN
    REPEAT
    IF (("Reservation Status" <> "Reservation Status"::Reservation) AND
    ("Expected Receipt Date" <= ToDate) AND
    ("Shipment Date" <= ToDate)) OR
    ((Binding = Binding::"Order-to-Order") AND ("Shipment Date" <= ToDate))
    THEN BEGIN

    // Delete the following lines.
    ActionMsgEntry.SETRANGE("Reservation Entry","Entry No.");
    DELETE;
    ActionMsgEntry.DELETEALL;
    END;
    // End of the lines.

    UNTIL NEXT = 0;
    END;
    ...
    Neuer code
    ...IF FIND('-') THEN
    REPEAT
    IF (("Reservation Status" <> "Reservation Status"::Reservation) AND
    ("Expected Receipt Date" <= ToDate) AND
    ("Shipment Date" <= ToDate)) OR
    ((Binding = Binding::"Order-to-Order") AND ("Shipment Date" <= ToDate))
    THEN BEGIN

    // Add the following lines.
    ResEntryWasDeleted := TRUE;
    DELETE;
    END ELSE
    ResEntryWasDeleted := CloseTracking(ReservEntry,SupplyInventoryProfile,ToDate);

    IF ResEntryWasDeleted THEN BEGIN
    ActionMsgEntry.SETRANGE("Reservation Entry","Entry No.");
    ActionMsgEntry.DELETEALL;
    END;
    // End of the lines.

    UNTIL NEXT = 0;
    END;
    ...
  6. Fügen Sie eine neue CloseTracking -Funktion im Modul Lager Profil versetzen (99000854) wie folgt:
    LOCAL PROCEDURE CloseTracking@92(ReservEntry@1000 : Record 337;VAR SupplyInventoryProfile@1001 : Record 99000853;ToDate@1002 : Date) : Boolean;VAR
    xSupplyInventoryProfile@1003 : Record 99000853;
    ReservationEngineMgt@1004 : Codeunit 99000831;
    Closed@1005 : Boolean;


    WITH ReservEntry DO BEGIN
    IF "Reservation Status" <> "Reservation Status"::Tracking THEN
    EXIT(FALSE);

    xSupplyInventoryProfile.COPY(SupplyInventoryProfile);
    Closed := FALSE;

    IF ("Expected Receipt Date" <= ToDate) AND
    ("Shipment Date" > ToDate)
    THEN BEGIN
    // tracking exists with demand in future
    SupplyInventoryProfile.SETCURRENTKEY(
    "Source Type","Source Order Status","Source ID","Source Batch Name","Source Ref. No.","Source Prod. Order Line",IsSupply);
    SupplyInventoryProfile.SETRANGE("Source Type","Source Type");
    SupplyInventoryProfile.SETRANGE("Source Order Status","Source Subtype");
    SupplyInventoryProfile.SETRANGE("Source ID","Source ID");
    SupplyInventoryProfile.SETRANGE("Source Batch Name","Source Batch Name");
    SupplyInventoryProfile.SETRANGE("Source Ref. No.","Source Ref. No.");
    SupplyInventoryProfile.SETRANGE("Source Prod. Order Line","Source Prod. Order Line");
    SupplyInventoryProfile.SETRANGE("Due Date",0D,ToDate);

    IF NOT SupplyInventoryProfile.ISEMPTY THEN BEGIN
    // demand is either deleted as well or will get Surplus status
    ReservMgt.CloseReservEntry(ReservEntry,FALSE,FALSE);
    Closed := TRUE;
    END;
    END;
    END;

    SupplyInventoryProfile.COPY(xSupplyInventoryProfile);
    EXIT(Closed);
  7. Ändern Sie den Code in der PlanItem -Funktion im Modul Lager Profil versetzen (99000854) wie folgt:
    Vorhandener code
    ...// Preliminary clean of tracking
    IF DemandExists OR SupplyExists THEN

    // Delete the following line.
    DeleteTracking(TempSKU,ToDate);

    MatchAttributes(Supply,Demand);

    // Calculate initial inventory
    ...
    Neuer code
    ...// Preliminary clean of tracking
    IF DemandExists OR SupplyExists THEN

    // Add the following line.
    DeleteTracking(TempSKU,ToDate,Supply);

    MatchAttributes(Supply,Demand);

    // Calculate initial inventory
    ...

Voraussetzungen

Sie müssen eines der folgenden Produkte verfügen, um diesen Hotfix installieren:
  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Servicepack 1 (SP1)

Informationen zur Deinstallation

Dieser Hotfix kann nicht entfernt werden.

Status


Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.
Hinweis Dies ist ein im Schnellverfahren veröffentlichter Artikel, der direkt in der Microsoft Support-Organisation erstellt wurde. Die hierin enthaltenen Informationen werden ohne Mängelgewähr in Reaktion auf neue Probleme bereitgestellt. Aufgrund der schnellen Bereitstellung kann das Material möglicherweise typografische Fehler enthalten und jederzeit ohne vorherige Ankündigung geändert werden. Weitere Hinweise finden Sie unter Geschäftsbedingungen .