Tuesday, October 3, 2023

Ein Artikel wird nicht wie erwartet für Artikelposten reserviert, die für den Artikel erstellt werden, wenn Sie im Feld „Reservieren“ des Artikels in Microsoft Dynamics NAV den Wert „Immer“ festlegen – Microsoft-Support

Dieser Artikel gilt für Microsoft Dynamics NAV für alle Länder und alle Sprachgebietsschemas.

Symptome

Angenommen, Sie haben einen Artikel, bei dem der Wert „Reserve" in Microsoft Dynamics NAV auf „ Immer" festgelegt ist. Wenn Sie einen Produktionsauftrag für den Artikel erstellen, wird der Artikel nicht wie erwartet für Artikelposten reserviert, die für den Artikel erstellt werden.
Hinweis In dieser Situation ist der Artikel für Bestellungen reserviert, die für den Artikel erstellt werden.
Dieses Problem tritt bei folgenden Produkten auf:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

  • Microsoft Dynamics NAV 2009

  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)

  • Microsoft Dynamics NAV 5.0


Ursache

Dieses Problem tritt auf, weil die reservierte Menge in Artikelposten nicht berechnet wird, wenn das System eine Position automatisch reserviert.

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:

  1. Ändern Sie den Code in der SetSalesLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    SetPointerFilter(CalcReservEntry2);

    // Folgende Zeilen löschen.
    IF (CalcReservEntry."Location Code" <> '') AND
    Location.GET(CalcReservEntry."Location Code") AND
    (Standort „Behälter obligatorisch" ODER Standort „Auswahl erforderlich")
    DANN
    CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse);
    // Ende der Zeilen.

    ENDE;

    VERFAHREN SetReqLine@13(NewReqLine@1000 : Datensatz 246);
    ...

    Ersatzcode

     ...
    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetReqLine@13(NewReqLine@1000 : Datensatz 246);
    ...
  2. Ändern Sie den Code in der SetReqLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    GetItemSetup(CalcReservEntry);
    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetPurchLine@2(NewPurchLine@1000 : Record 39);
    ...

    Ersatzcode

     ...
    GetItemSetup(CalcReservEntry);

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetPurchLine@2(NewPurchLine@1000 : Record 39);
    ...
  3. Ändern Sie den Code in der SetPurchLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForPurchLine."Outstanding Qty. (Base)") < 0);

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetItemJnlLine@3(NewItemJnlLine@1000 : Record 83);
    ...

    Ersatzcode

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForPurchLine."Outstanding Qty. (Base)") < 0);

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetItemJnlLine@3(NewItemJnlLine@1000 : Record 83);
  4. Ändern Sie den Code in der SetItemJnlLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForItemJnlLine."Quantity (Base)") < 0);

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetProdOrderLine@9(NewProdOrderLine@1000 : Datensatz 5406);
    ...

    Ersatzcode

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForItemJnlLine."Quantity (Base)") < 0);

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetProdOrderLine@9(NewProdOrderLine@1000 : Datensatz 5406);
    ...
  5. Ändern Sie den Code in der SetProdOrderLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    Positiv := ForProdOrderLine."Remaining Qty. (Base)" < 0;

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetProdOrderComponent@11(NewProdOrderComp@1000 : Record 5407);
    ...

    Ersatzcode

     ...
    Positiv := ForProdOrderLine."Remaining Qty. (Base)" < 0;

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetProdOrderComponent@11(NewProdOrderComp@1000 : Record 5407);
  6. Ändern Sie den Code in der SetProdOrderComponent-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    Positiv := ForProdOrderComp."Remaining Qty. (Base)" > 0;

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetPlanningComponent@12(NewPlanningComponent@1000 : Record 99000829);
    ...

    Ersatzcode

     ...
    Positiv := ForProdOrderComp."Remaining Qty. (Base)" > 0;

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetPlanningComponent@12(NewPlanningComponent@1000 : Record 99000829);
    ...
  7. Ändern Sie den Code in der SetPlanningComponent-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    Positiv := ForPlanningComponent."Net Quantity (Base)" > 0;

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetItemLedgEntry@34(NewItemLedgEntry@1000 : Record 32);
    ...

    Ersatzcode

     ...
    Positiv := ForPlanningComponent."Net Quantity (Base)" > 0;

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetItemLedgEntry@34(NewItemLedgEntry@1000 : Record 32);
    ...
  8. Ändern Sie den Code in der SetItemLedgEntry-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    GetItemSetup(CalcReservEntry);

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetTransferLine@47(NewTransLine@1000 : Record 5741;Direction@1001 : 'Outbound,Inbound');
    ...

    Ersatzcode

     ...
    GetItemSetup(CalcReservEntry);

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetTransferLine@47(NewTransLine@1000 : Record 5741;Direction@1001 : 'Outbound,Inbound');
    ...
  9. Ändern Sie den Code in der SetTransferLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    GetItemSetup(CalcReservEntry);

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetServLine@48(NewServiceInvLine@1000 : Record 5902);
    ...

    Ersatzcode

     ...
    GetItemSetup(CalcReservEntry);

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetServLine@48(NewServiceInvLine@1000 : Record 5902);
    ...
  10. Ändern Sie den Code in der SetServLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    SetPointerFilter(CalcReservEntry2);

    // Folgende Zeilen löschen.
    IF (CalcReservEntry."Location Code" <> '') AND
    Location.GET(CalcReservEntry."Location Code") AND
    (Standort „Behälter obligatorisch" ODER Standort „Auswahl erforderlich")
    DANN
    CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse);
    // Ende der Zeilen.

    ENDE;

    VERFAHREN SetBOMJnlLine@61(NewBOMJnlLine@1000 : Datensatz 89);

    Ersatzcode

     ...
    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetBOMJnlLine@61(NewBOMJnlLine@1000 : Datensatz 89);
    ...
  11. Ändern Sie den Code in der SetBOMJnlLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForBOMJnlLine."Menge (Basis)") < 0);

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SetJobJnlLine@20(NewJobJnlLine@1000 : Record 210);
    ...

    Ersatzcode

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForBOMJnlLine."Menge (Basis)") < 0);

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SetJobJnlLine@20(NewJobJnlLine@1000 : Record 210);
    ...
  12. Ändern Sie den Code in der SetJobJnlLine-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForJobJnlLine."Quantity (Base)") < 0);

    SetPointerFilter(CalcReservEntry2);
    ENDE;

    VERFAHREN SalesLineUpdateValues@54(VAR CurrentSalesLine@1000: Datensatz 37;VAR QtyToReserve@1001: Dezimal;VAR QtyReservedThisLine@1002: Dezimal);
    ...

    Ersatzcode

     ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForJobJnlLine."Quantity (Base)") < 0);

    SetPointerFilter(CalcReservEntry2);

    // Fügen Sie die folgende Zeile hinzu.
    CallCalcReservedQtyOnPick;

    ENDE;

    VERFAHREN SalesLineUpdateValues@54(VAR CurrentSalesLine@1000: Datensatz 37;VAR QtyToReserve@1001: Dezimal;VAR QtyReservedThisLine@1002: Dezimal);
    ...
  13. Ändern Sie den Code in der CallCalcReservedQtyOnPick-Funktion in der Reservation Management-Codeunit (99000845) wie folgt:
    Vorhandener Code

     ...
    CreateReservEntry2.CreateRemainingReservEntry(SurplusEntry,QtyToSave);
    ENDE;

    BEGINNEN
    ENDE.
    }
    ...

    Ersatzcode

     ...
    CreateReservEntry2.CreateRemainingReservEntry(SurplusEntry,QtyToSave);
    ENDE;

    // Fügen Sie die folgenden Zeilen hinzu.
    VERFAHREN CallCalcReservedQtyOnPick@104();
    BEGINNEN
    WENN positiv UND
    (CalcReservEntry."Standortcode" <> '') UND
    Location.GET(CalcReservEntry."Location Code") AND
    (Standort „Behälter obligatorisch" ODER Standort „Auswahl erforderlich")
    DANN
    CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse);
    ENDE;
    // Ende der Zeilen.

    BEGINNEN
    ENDE.
    }
    ...

Voraussetzungen

Um diesen Hotfix anwenden zu können, muss eines der folgenden Produkte installiert sein:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

  • Microsoft Dynamics NAV 2009

  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)

  • Microsoft Dynamics NAV 5.0

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