Saturday, June 24, 2023

Fehlermeldung „Die in der zugehörigen Rahmenbestellung gelieferte Menge darf nicht größer sein als die Menge in der Verkaufszeile“, wenn Sie einen Kundenauftrag in Microsoft Dynamics NAV 2009 buchen – Microsoft-Support

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

Symptome

Sie können einen Kundenauftrag für einen gesperrten Artikel erstellen, der unerwartet aus einem Verkaufsangebot in Microsoft Dynamics 2009 herausfällt. Wenn Sie den Kundenauftrag buchen, erhalten Sie die folgende Fehlermeldung:

Die in der zugehörigen Rahmenbestellung versandte Menge darf nicht größer sein als die Menge in der Verkaufszeile, Dokumenttyp = „Rahmenbestellung", Dokumentnr." Nummer1 ', Zeilennr.=' Nummer2 '.

Dieses Problem tritt bei folgenden Produkten auf:

  • Microsoft Dynamics NAV 2009 Service Pack 1

  • Microsoft Dynamics NAV 2009 R2


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 2009 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 eines bestimmten Verfahrens 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 Dynamics NAV-Clients vom System abgemeldet sind. Dazu gehören Microsoft Dynamics NAV Application Server (NAS)-Dienste. 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

    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 den Eigenschaften im Sales-Quote in Order Codeunit (86) wie folgt:
    Vorhandener Code 1

     ...
    Opp@1004: Datensatz 5092;

    OpportunityEntry@1006: Datensatz 5093;

    TempOpportunityEntry@1005: TEMPORÄRER Datensatz 5093;

    Cust@1008: Datensatz 18;

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::Quote);

    Cust.GET("Sell-to Customer No.");

    Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
    ...

    Ersatzcode 2

     ...
    Opp@1004: Datensatz 5092;

    OpportunityEntry@1006: Datensatz 5093;

    TempOpportunityEntry@1005: TEMPORÄRER Datensatz 5093;

    Cust@1008: Datensatz 18;

    // Fügen Sie die folgende Zeile hinzu.
    Item@1010: Datensatz 27;
    // Ende der hinzugefügten Zeile.

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::Quote);

    Cust.GET("Sell-to Customer No.");

    Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
    ...

    Vorhandener Code 2

     ...
    SalesQuoteLine.SETRANGE(Type,SalesQuoteLine.Type::Item);

    SalesQuoteLine.SETFILTER("No.",'<>%1','');

    IF SalesQuoteLine.FINDSET THEN

    WIEDERHOLEN

    WENN (SalesQuoteLine."Ausstehende Menge" > 0) DANN BEGINNEN

    SalesLine := SalesQuoteLine;

    SalesLine.VALIDATE("Reservierte Menge (Basis)",0);

    SalesLine."Zeilennr." := 0;
    ...

    Ersatzcode 2

     ...
    SalesQuoteLine.SETRANGE(Type,SalesQuoteLine.Type::Item);

    SalesQuoteLine.SETFILTER("No.",'<>%1','');

    IF SalesQuoteLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(SalesQuoteLine."No.") THEN //Zeile hinzufügen

    // Fügen Sie die folgende Zeile hinzu.
    Item.TESTFIELD(Blocked,FALSE);
    // Ende der hinzugefügten Zeile.

    WENN (SalesQuoteLine."Ausstehende Menge" > 0) DANN BEGINNEN

    SalesLine := SalesQuoteLine;

    SalesLine.VALIDATE("Reservierte Menge (Basis)",0);

    SalesLine."Zeilennr." := 0;
    ...
  2. Ändern Sie den Code in den Eigenschaften in der Codeeinheit „Rahmenauftrag zu Bestellung" (87) wie folgt:
    Vorhandener Code 1

     ...
    Cust@1001: Datensatz 18;

    TempSalesLine@1002: TEMPORÄRER Datensatz 37;

    Reservierung@1005: Formular 498;

    PrepmtMgt@1004: Codeeinheit 441;

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::"Pauschalauftrag");

    Cust.GET("Sell-to Customer No.");

    Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
    ...

    Ersatzcode 1

     ...
    Cust@1001: Datensatz 18;

    TempSalesLine@1002: TEMPORÄRER Datensatz 37;

    Reservierung@1005: Formular 498;

    PrepmtMgt@1004: Codeeinheit 441;

    // Fügen Sie die folgende Zeile hinzu.
    Item@1006: Datensatz 27;
    // Ende der hinzugefügten Zeile.

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::"Pauschalauftrag");

    Cust.GET("Sell-to Customer No.");

    Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
    ...

    Vorhandener Code 2

     ...
    SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");

    QuantityOnOrders := 0;

    IF SalesLine.FINDSET THEN

    WIEDERHOLEN

    IF SalesLine."Dokumenttyp" IN

    [SalesLine."Dokumenttyp"::"Rückgabeauftrag",

    SalesLine."Dokumenttyp"::"Gutschrift"]

    DANN
    ...

    Ersatzcode 2

     ...
    SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");

    QuantityOnOrders := 0;

    IF SalesLine.FINDSET THEN

    WIEDERHOLEN

    // Fügen Sie die folgenden Zeilen hinzu.
    IF Item.GET(SalesLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);
    // Ende der hinzugefügten Zeilen.

    IF SalesLine."Dokumenttyp" IN

    [SalesLine."Dokumenttyp"::"Rückgabeauftrag",

    SalesLine."Dokumenttyp"::"Gutschrift"]

    DANN
    ...

    Vorhandener Code 3

     ...
    TempSalesLine.DELETEALL;

    WIEDERHOLEN

    SalesLine.SETCURRENTKEY("Dokumenttyp",Pauschalbestellnummer,Pauschalbestellzeilennr.");

    SalesLine.SETRANGE("Blanket Order No.",BlanketOrderSalesLine."Document No.");

    SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");

    // Folgende Zeilen löschen.

    SalesLine.SETFILTER(

    "Document Type",'<>%1 & <>%2',SalesLine."Document Type"::Invoice,SalesLine."Document Type"::"Credit Memo");

    // Ende der gelöschten Zeilen.

    QuantityOnOrders := 0;

    IF SalesLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(SalesLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);
    ...

    Ersatzcode 3

     ...
    TempSalesLine.DELETEALL;

    WIEDERHOLEN

    SalesLine.SETCURRENTKEY("Dokumenttyp",Pauschalbestellnummer,Pauschalbestellzeilennr.");

    SalesLine.SETRANGE("Blanket Order No.",BlanketOrderSalesLine."Document No.");

    SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");

    QuantityOnOrders := 0;

    IF SalesLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(SalesLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);
    ...

    Vorhandener Code 4

     ...
    QuantityOnOrders := 0;

    IF SalesLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(SalesLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);

    // Folgende Zeilen löschen.
    IF SalesLine."Document Type" = SalesLine."Document Type"::"Return Order" THEN
    QuantityOnOrders := QuantityOnOrders - SalesLine."Ausstehende Menge (Basis)"

    ELSE //Zeile entfernen

    QuantityOnOrders := QuantityOnOrders + SalesLine."Ausstehende Menge. (Basis)";
    // Ende der gelöschten Zeilen.

    BIS SalesLine.NEXT = 0;

    IF (ABS(BlanketOrderSalesLine."Zu versendende Menge (Basis)" + QuantityOnOrders +

    BlanketOrderSalesLine."Menge. Versendet (Basis)") >

    ABS(BlanketOrderSalesLine."Quantity (Base)")) OR

    (BlanketOrderSalesLine."Menge (Basis)" * BlanketOrderSalesLine."Ausstehende Menge (Basis)" < 0)
    ...

    Ersatzcode 4

     ...
    QuantityOnOrders := 0;

    IF SalesLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(SalesLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);

    // Fügen Sie die folgenden Zeilen hinzu.

    IF (SalesLine."Document Type" = SalesLine."Document Type"::"Return Order") ODER

    ((SalesLine."Document Type" = SalesLine."Document Type"::"Credit Memo") AND

    (SalesLine."Return Receipt No." = ''))

    DANN

    QuantityOnOrders := QuantityOnOrders - SalesLine."Ausstehende Menge (Basis)"

    ANDERS

    IF (SalesLine."Document Type" = SalesLine."Document Type"::Order) ODER

    ((SalesLine."Document Type" = SalesLine."Document Type"::Invoice) AND

    (SalesLine."Sendungsnr." = ''))

    DANN

    QuantityOnOrders := QuantityOnOrders + SalesLine."Ausstehende Menge. (Basis)";

    // Ende der hinzugefügten Zeilen.

    BIS SalesLine.NEXT = 0;

    IF (ABS(BlanketOrderSalesLine."Zu versendende Menge (Basis)" + QuantityOnOrders +

    BlanketOrderSalesLine."Menge. Versendet (Basis)") >

    ABS(BlanketOrderSalesLine."Quantity (Base)")) ODER

    (BlanketOrderSalesLine."Menge (Basis)" * BlanketOrderSalesLine."Ausstehende Menge (Basis)" < 0)
    ...
  3. Ändern Sie den Code in den Eigenschaften in der Purch.-Quote to Order Codeunit (96) wie folgt:
    Vorhandener Code 1

     ...
    OldPurchCommentLine@1001: Datensatz 43;

    FromDocDim@1000 : Datensatz 357;

    ToDocDim@1003: Datensatz 357;

    Vend@1002: Datensatz 23;

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::Quote);

    Vend.GET("Kauf bei Anbieter Nr.");

    Vend.CheckBlockedVendOnDocs(Vend,FALSE);
    ...

    Ersatzcode 1

     ...
    OldPurchCommentLine@1001: Datensatz 43;

    FromDocDim@1000 : Datensatz 357;

    ToDocDim@1003: Datensatz 357;

    Vend@1002: Datensatz 23;

    // Fügen Sie die folgende Zeile hinzu.
    Item@1004: Datensatz 27;
    // Ende der hinzugefügten Zeile.

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::Quote);

    Vend.GET("Kauf bei Anbieter Nr.");

    Vend.CheckBlockedVendOnDocs(Vend,FALSE);

    Vorhandener Code 2

     ...
    ToDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line");



    IF PurchQuoteLine.FINDSET THEN

    WIEDERHOLEN

    PurchOrderLine := PurchQuoteLine;

    PurchOrderLine."Document Type" := PurchOrderHeader."Document Type";

    PurchOrderLine."Dokumentnr." := PurchOrderHeader."No.";

    ReservePurchLine.TransferPurchLineToPurchLine(
    ...

    Ersatzcode 2

     ...
    ToDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line");



    IF PurchQuoteLine.FINDSET THEN

    WIEDERHOLEN

    // Fügen Sie die folgenden Zeilen hinzu.
    IF Item.GET(PurchQuoteLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);
    // Ende der hinzugefügten Zeilen.

    PurchOrderLine := PurchQuoteLine;

    PurchOrderLine."Document Type" := PurchOrderHeader."Document Type";

    PurchOrderLine."Dokumentnr." := PurchOrderHeader."No.";

    ReservePurchLine.TransferPurchLineToPurchLine(
    ...
  4. Ändern Sie den Code in den Eigenschaften im Pauschalkauf. Order to Order Codeunit (97) wie folgt:
    Vorhandener Code 1

     ...
    FromDocDim@1000 : Datensatz 357;

    ToDocDim@1002 : Datensatz 357;

    Vend@1001: Datensatz 23;

    PrepmtMgt@1003: Codeeinheit 441;

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::"Pauschalauftrag");

    Vend.GET("Kauf bei Anbieter Nr.");

    Vend.CheckBlockedVendOnDocs(Vend,FALSE);
    ...

    Ersatzcode 1

     ...
    FromDocDim@1000 : Datensatz 357;

    ToDocDim@1002 : Datensatz 357;

    Vend@1001: Datensatz 23;

    PrepmtMgt@1003: Codeeinheit 441;

    // Fügen Sie die folgende Zeile hinzu.
    Item@1004: Datensatz 27;
    // Ende der hinzugefügten Zeile.

    START

    TESTFIELD("Dokumenttyp","Dokumenttyp"::"Pauschalauftrag");

    Vend.GET("Kauf bei Anbieter Nr.");

    Vend.CheckBlockedVendOnDocs(Vend,FALSE);
    ...

    Vorhandener Code 2

     ...
    PurchLine.SETRANGE("Pauschalbestellzeilennr.",PurchBlanketOrderLine."Zeilennr.");

    QuantityOnOrders := 0;

    IF PurchLine.FINDSET THEN

    WIEDERHOLEN

    IF PurchLine."Dokumenttyp" IN

    [PurchLine."Document Type"::"Return Order",

    PurchLine."Document Type"::"Credit Memo"] DANN

    QuantityOnOrders := QuantityOnOrders - PurchLine."Ausstehende Menge. (Basis)"
    ...

    Ersatzcode 2

     ...
    PurchLine.SETRANGE("Pauschalbestellzeilennr.",PurchBlanketOrderLine."Zeilennr.");

    QuantityOnOrders := 0;

    IF PurchLine.FINDSET THEN

    WIEDERHOLEN

    // Fügen Sie die folgenden Zeilen hinzu.
    IF Item.GET(PurchLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);
    // Ende der hinzugefügten Zeilen.

    IF PurchLine."Dokumenttyp" IN

    [PurchLine."Document Type"::"Return Order",

    PurchLine."Document Type"::"Credit Memo"] DANN

    QuantityOnOrders := QuantityOnOrders - PurchLine."Ausstehende Menge. (Basis)"
    ...

    Vorhandener Code 3

     ...
    IF PurchBlanketOrderLine.FINDSET THEN

    WIEDERHOLEN

    PurchLine.SETCURRENTKEY("Dokumenttyp",Pauschalbestellnummer,Pauschalbestellzeilennr.");

    PurchLine.SETRANGE("PurchBlanket Order No.",PurchBlanketOrderLine."Document No.");

    PurchLine.SETRANGE("Pauschalbestellzeilennr.",PurchBlanketOrderLine."Zeilennr.");

    // Folgende Zeilen löschen.

    PurchLine.SETFILTER(

    "Document Type",'<>%1 & <>%2',PurchLine."Document Type"::Invoice,PurchLine."Document Type"::"Credit Memo");

    // Ende der gelöschten Zeilen.

    QuantityOnOrders := 0;

    IF PurchLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(PurchLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);
    ...

    Ersatzcode 3

     ...
    IF PurchBlanketOrderLine.FINDSET THEN

    WIEDERHOLEN

    PurchLine.SETCURRENTKEY("Dokumenttyp",Pauschalbestellnummer,Pauschalbestellzeilennr.");

    PurchLine.SETRANGE("PurchBlanket Order No.",PurchBlanketOrderLine."Document No.");

    PurchLine.SETRANGE("Pauschalbestellzeilennr.",PurchBlanketOrderLine."Zeilennr.");

    QuantityOnOrders := 0;

    IF PurchLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(PurchLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);
    ...

    Vorhandener Code 4

     ...
    QuantityOnOrders := 0;

    IF PurchLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(PurchLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);

    // Folgende Zeilen löschen.

    IF PurchLine."Document Type" = PurchLine."Document Type"::"Return Order" THEN

    QuantityOnOrders := QuantityOnOrders - PurchLine."Ausstehende Menge. (Basis)"

    ANDERS

    QuantityOnOrders := QuantityOnOrders + PurchLine."Ausstehende Menge. (Basis)";

    // Ende der gelöschten Zeilen.

    BIS PurchLine.NEXT = 0;

    IF (ABS(PurchBlanketOrderLine."Zu empfangende Menge (Basis)" + QuantityOnOrders +

    PurchBlanketOrderLine."Menge. Erhalten (Basis)") >

    ABS(PurchBlanketOrderLine."Quantity (Base)")) ODER

    (PurchBlanketOrderLine."Quantity (Base)" * PurchBlanketOrderLine."Outstanding Qty. (Base)" < 0)
    ...

    Ersatzcode 4

     ...
    QuantityOnOrders := 0;

    IF PurchLine.FINDSET THEN

    WIEDERHOLEN

    IF Item.GET(PurchLine."No.") THEN

    Item.TESTFIELD(Blocked,FALSE);

    // Fügen Sie die folgenden Zeilen hinzu.

    IF (PurchLine."Document Type" = PurchLine."Document Type"::"Return Order") ODER

    ((PurchLine."Document Type" = PurchLine."Document Type"::"Credit Memo") AND

    (PurchLine."Return Shipment No." = ''))

    DANN

    QuantityOnOrders := QuantityOnOrders - PurchLine."Ausstehende Menge. (Basis)"

    ANDERS

    IF (PurchLine."Document Type" = PurchLine."Document Type"::Order) ODER

    ((PurchLine."Document Type" = PurchLine."Document Type"::Invoice) AND

    (PurchLine."Receipt No." = ''))

    DANN

    QuantityOnOrders := QuantityOnOrders + PurchLine."Ausstehende Menge. (Basis)";
    // Ende der hinzugefügten Zeilen.

    BIS PurchLine.NEXT = 0;

    IF (ABS(PurchBlanketOrderLine."Zu empfangende Menge (Basis)" + QuantityOnOrders +

    PurchBlanketOrderLine."Menge. Erhalten (Basis)") >

    ABS(PurchBlanketOrderLine."Quantity (Base)")) ODER

    (PurchBlanketOrderLine."Quantity (Base)" * PurchBlanketOrderLine."Outstanding Qty. (Base)" < 0)
    ...


Voraussetzungen

Sie müssen das folgende Update und eines der folgenden Produkte installiert haben, um diesen Hotfix anzuwenden:

  • Microsoft Dynamics NAV 2009 Service Pack 1

  • Microsoft Dynamics NAV 2009 R2

  • 2642368 Fehlermeldung „Zu versendende Menge (Basis) des Artikels [Item_Number] in Zeile Nr. [Line_Number] darf nicht größer als [Number] sein", wenn Sie versuchen, eine Bestellung aus einer Pauschalbestellung in Microsoft Dynamics NAV zu erstellen

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