Dit artikel is van toepassing op Microsoft Dynamics NAV voor alle landen en alle taalinstellingen.
Symptomen
U kunt een verkooporder voor een artikel geblokkeerde onverwacht niet meer een verkoopofferte in Microsoft Dynamics 2009 op maken. Wanneer u de verkooporder boekt, wordt het volgende foutbericht weergegeven:
Hoeveelheid geleverd in het bijbehorende raamcontract niet groter zijn dan aantal in verkoop regel documentsoort = 'Raamcontract', Documentnr. 'getal1', Regelnr ='getal2'.
Dit probleem treedt op in de volgende producten:
-
Microsoft Dynamics NAV 2009 servicepack 1
-
Microsoft Dynamics NAV 2009 R2
Oplossing
Informatie over de hotfix
Een ondersteunde hotfix is nu beschikbaar bij Microsoft. Het is echter alleen bedoeld om het probleem dat wordt beschreven in dit artikel. Pas deze alleen toe op systemen waarop dit specifieke probleem zich voordoet. Deze hotfix moet wellicht extra worden getest. Als u geen ernstige problemen ondervindt, is het daarom raadzaam te wachten op het volgende servicepack voor Microsoft Dynamics NAV 2009 of de volgende Microsoft Dynamics NAV versie waarin deze hotfix is opgenomen.
Opmerking In speciale gevallen kunnen kosten die verbonden zijn aan ondersteuningsoproepen ondersteuning worden geannuleerd als een medewerker van Technical Support voor Microsoft Dynamics en verwante producten bepaalt dat een specifieke update de oplossing van uw probleem. De normale ondersteuningskosten blijven gelden voor extra ondersteuningsvragen die niet in aanmerking voor de specifieke update in kwestie komen.
Informatie over de installatie
Microsoft verstrekt programmeervoorbeelden uitsluitend ter illustratie, zonder expliciete of impliciete garantie. Dit omvat, maar is niet beperkt tot, de impliciete garanties van verkoopbaarheid of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend met de programmeertaal die wordt aangetoond en met de hulpprogramma's die worden gebruikt bent voor het maken van en naar procedures voor foutopsporing. Ondersteuningstechnici van Microsoft kunnen voor uitleg over de functionaliteit van een bepaalde procedure. Zij zal deze voorbeelden bieden extra functionaliteit of desgewenst uw specifieke vereisten echter niet wijzigen.
Opmerking Voordat u deze hotfix hebt geïnstalleerd, controleert u of dat alle gebruikers van Microsoft Dynamics NAV-clients zijn afgemeld bij het systeem. Dit omvat services voor Microsoft Dynamics NAV Application Server (NAS). U moet de alleen clientgebruiker die is aangemeld wanneer u deze hotfix gaat implementeren.
Als u deze hotfix gaat implementeren, hebt u een ontwikkelaarslicentie voor.
Is raadzaam dat de gebruikersaccount in het venster Windows-aanmeldingen of Databaseaanmeldingen de rol-id 'SUPER'. Als de gebruikersaccount kan worden toegewezen als de ID 'SUPER' rol, moet u controleren of de gebruikersaccount de volgende machtigingen heeft:
-
De machtiging wijzigen voor het object dat u wijzigt.
-
De machtiging uitvoeren voor het object System Object ID 5210 en voor de System Object ID 9015
-object.
Opmerking Er geen rechten voor de opgeslagen gegevens hebben, tenzij u gegevens herstellen.
Codewijzigingen
Opmerking Altijd test code worden opgelost in een testomgeving voordat u de correcties in de productieomgeving.
U kunt dit probleem oplossen door de volgende stappen uit te voeren:
-
De code in het dialoogvenster Eigenschappen in de verkoop-offerte naar Order Codeunit (86) als volgt wijzigen:
Bestaande code 1...Opp@1004 : Record 5092;
OpportunityEntry@1006 : Record 5093;
TempOpportunityEntry@1005 : TEMPORARY Record 5093;
Cust@1008 : Record 18;
BEGIN
TESTFIELD("Document Type","Document Type"::Quote);
Cust.GET("Sell-to Customer No.");
Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
...Vervangende code 2
...Opp@1004 : Record 5092;
OpportunityEntry@1006 : Record 5093;
TempOpportunityEntry@1005 : TEMPORARY Record 5093;
Cust@1008 : Record 18;
// Add the following line.
Item@1010 : Record 27;
// End of the added line.
BEGIN
TESTFIELD("Document Type","Document Type"::Quote);
Cust.GET("Sell-to Customer No.");
Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
...Bestaande code 2
...SalesQuoteLine.SETRANGE(Type,SalesQuoteLine.Type::Item);
SalesQuoteLine.SETFILTER("No.",'<>%1','');
IF SalesQuoteLine.FINDSET THEN
REPEAT
IF (SalesQuoteLine."Outstanding Quantity" > 0) THEN BEGIN
SalesLine := SalesQuoteLine;
SalesLine.VALIDATE("Reserved Qty. (Base)",0);
SalesLine."Line No." := 0;
...Vervangende code 2
...SalesQuoteLine.SETRANGE(Type,SalesQuoteLine.Type::Item);
SalesQuoteLine.SETFILTER("No.",'<>%1','');
IF SalesQuoteLine.FINDSET THEN
REPEAT
IF Item.GET(SalesQuoteLine."No.") THEN //add line
// Add the following line.
Item.TESTFIELD(Blocked,FALSE);
// End of the added line.
IF (SalesQuoteLine."Outstanding Quantity" > 0) THEN BEGIN
SalesLine := SalesQuoteLine;
SalesLine.VALIDATE("Reserved Qty. (Base)",0);
SalesLine."Line No." := 0;
... -
De code in de eigenschappen in de verkooporder op Order Codeunit (87) als volgt te wijzigen:
Bestaande code 1...Cust@1001 : Record 18;
TempSalesLine@1002 : TEMPORARY Record 37;
Reservation@1005 : Form 498;
PrepmtMgt@1004 : Codeunit 441;
BEGIN
TESTFIELD("Document Type","Document Type"::"Blanket Order");
Cust.GET("Sell-to Customer No.");
Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
...Nieuwe code 1
...Cust@1001 : Record 18;
TempSalesLine@1002 : TEMPORARY Record 37;
Reservation@1005 : Form 498;
PrepmtMgt@1004 : Codeunit 441;
// Add the following line.
Item@1006 : Record 27;
// End of the added line.
BEGIN
TESTFIELD("Document Type","Document Type"::"Blanket Order");
Cust.GET("Sell-to Customer No.");
Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);
...Bestaande code 2
...SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");
QuantityOnOrders := 0;
IF SalesLine.FINDSET THEN
REPEAT
IF SalesLine."Document Type" IN
[SalesLine."Document Type"::"Return Order",
SalesLine."Document Type"::"Credit Memo"]
THEN
...Vervangende code 2
...SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");
QuantityOnOrders := 0;
IF SalesLine.FINDSET THEN
REPEAT
// Add the following lines.
IF Item.GET(SalesLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
// End of the added lines.
IF SalesLine."Document Type" IN
[SalesLine."Document Type"::"Return Order",
SalesLine."Document Type"::"Credit Memo"]
THEN
...Bestaande code 3
...TempSalesLine.DELETEALL;
REPEAT
SalesLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No.");
SalesLine.SETRANGE("Blanket Order No.",BlanketOrderSalesLine."Document No.");
SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");
// Delete the following lines.
SalesLine.SETFILTER(
"Document Type",'<>%1 & <>%2',SalesLine."Document Type"::Invoice,SalesLine."Document Type"::"Credit Memo");
// End of the deleted lines.
QuantityOnOrders := 0;
IF SalesLine.FINDSET THEN
REPEAT
IF Item.GET(SalesLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
...Vervangende code 3
...TempSalesLine.DELETEALL;
REPEAT
SalesLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No.");
SalesLine.SETRANGE("Blanket Order No.",BlanketOrderSalesLine."Document No.");
SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");
QuantityOnOrders := 0;
IF SalesLine.FINDSET THEN
REPEAT
IF Item.GET(SalesLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
...Bestaande code 4
...QuantityOnOrders := 0;
IF SalesLine.FINDSET THEN
REPEAT
IF Item.GET(SalesLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
// Delete the following lines.
IF SalesLine."Document Type" = SalesLine."Document Type"::"Return Order" THEN
QuantityOnOrders := QuantityOnOrders - SalesLine."Outstanding Qty. (Base)"
ELSE //Remove line
QuantityOnOrders := QuantityOnOrders + SalesLine."Outstanding Qty. (Base)";
// End of the deleted lines.
UNTIL SalesLine.NEXT = 0;
IF (ABS(BlanketOrderSalesLine."Qty. to Ship (Base)" + QuantityOnOrders +
BlanketOrderSalesLine."Qty. Shipped (Base)") >
ABS(BlanketOrderSalesLine."Quantity (Base)")) OR
(BlanketOrderSalesLine."Quantity (Base)" * BlanketOrderSalesLine."Outstanding Qty. (Base)" < 0)
...Vervangende code 4
...QuantityOnOrders := 0;
IF SalesLine.FINDSET THEN
REPEAT
IF Item.GET(SalesLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
// Add the following lines.
IF (SalesLine."Document Type" = SalesLine."Document Type"::"Return Order") OR
((SalesLine."Document Type" = SalesLine."Document Type"::"Credit Memo") AND
(SalesLine."Return Receipt No." = ''))
THEN
QuantityOnOrders := QuantityOnOrders - SalesLine."Outstanding Qty. (Base)"
ELSE
IF (SalesLine."Document Type" = SalesLine."Document Type"::Order) OR
((SalesLine."Document Type" = SalesLine."Document Type"::Invoice) AND
(SalesLine."Shipment No." = ''))
THEN
QuantityOnOrders := QuantityOnOrders + SalesLine."Outstanding Qty. (Base)";
// End of the added lines.
UNTIL SalesLine.NEXT = 0;
IF (ABS(BlanketOrderSalesLine."Qty. to Ship (Base)" + QuantityOnOrders +
BlanketOrderSalesLine."Qty. Shipped (Base)") >
ABS(BlanketOrderSalesLine."Quantity (Base)")) OR
(BlanketOrderSalesLine."Quantity (Base)" * BlanketOrderSalesLine."Outstanding Qty. (Base)" < 0)
... -
Wijzig de code in het dialoogvenster Eigenschappen in het Ink.-offerte naar Order Codeunit (96) als volgt:
Bestaande code 1...OldPurchCommentLine@1001 : Record 43;
FromDocDim@1000 : Record 357;
ToDocDim@1003 : Record 357;
Vend@1002 : Record 23;
BEGIN
TESTFIELD("Document Type","Document Type"::Quote);
Vend.GET("Buy-from Vendor No.");
Vend.CheckBlockedVendOnDocs(Vend,FALSE);
...Nieuwe code 1
...OldPurchCommentLine@1001 : Record 43;
FromDocDim@1000 : Record 357;
ToDocDim@1003 : Record 357;
Vend@1002 : Record 23;
// Add the following line.
Item@1004 : Record 27;
// End of the added line.
BEGIN
TESTFIELD("Document Type","Document Type"::Quote);
Vend.GET("Buy-from Vendor No.");
Vend.CheckBlockedVendOnDocs(Vend,FALSE);Bestaande code 2
...ToDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line");
IF PurchQuoteLine.FINDSET THEN
REPEAT
PurchOrderLine := PurchQuoteLine;
PurchOrderLine."Document Type" := PurchOrderHeader."Document Type";
PurchOrderLine."Document No." := PurchOrderHeader."No.";
ReservePurchLine.TransferPurchLineToPurchLine(
...Vervangende code 2
...ToDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line");
IF PurchQuoteLine.FINDSET THEN
REPEAT
// Add the following lines.
IF Item.GET(PurchQuoteLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
// End of the added lines.
PurchOrderLine := PurchQuoteLine;
PurchOrderLine."Document Type" := PurchOrderHeader."Document Type";
PurchOrderLine."Document No." := PurchOrderHeader."No.";
ReservePurchLine.TransferPurchLineToPurchLine(
... -
Wijzig de code in het dialoogvenster Eigenschappen in het inkoopraamcontract. Order voor Order Codeunit (97) als volgt:
Bestaande code 1...FromDocDim@1000 : Record 357;
ToDocDim@1002 : Record 357;
Vend@1001 : Record 23;
PrepmtMgt@1003 : Codeunit 441;
BEGIN
TESTFIELD("Document Type","Document Type"::"Blanket Order");
Vend.GET("Buy-from Vendor No.");
Vend.CheckBlockedVendOnDocs(Vend,FALSE);
...Nieuwe code 1
...FromDocDim@1000 : Record 357;
ToDocDim@1002 : Record 357;
Vend@1001 : Record 23;
PrepmtMgt@1003 : Codeunit 441;
// Add the following line.
Item@1004 : Record 27;
// End of the added line.
BEGIN
TESTFIELD("Document Type","Document Type"::"Blanket Order");
Vend.GET("Buy-from Vendor No.");
Vend.CheckBlockedVendOnDocs(Vend,FALSE);
...Bestaande code 2
...PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No.");
QuantityOnOrders := 0;
IF PurchLine.FINDSET THEN
REPEAT
IF PurchLine."Document Type" IN
[PurchLine."Document Type"::"Return Order",
PurchLine."Document Type"::"Credit Memo"] THEN
QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)"
...Vervangende code 2
...PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No.");
QuantityOnOrders := 0;
IF PurchLine.FINDSET THEN
REPEAT
// Add the following lines.
IF Item.GET(PurchLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
// End of the added lines.
IF PurchLine."Document Type" IN
[PurchLine."Document Type"::"Return Order",
PurchLine."Document Type"::"Credit Memo"] THEN
QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)"
...Bestaande code 3
...IF PurchBlanketOrderLine.FINDSET THEN
REPEAT
PurchLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No.");
PurchLine.SETRANGE("Blanket Order No.",PurchBlanketOrderLine."Document No.");
PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No.");
// Delete the following lines.
PurchLine.SETFILTER(
"Document Type",'<>%1 & <>%2',PurchLine."Document Type"::Invoice,PurchLine."Document Type"::"Credit Memo");
// End of the deleted lines.
QuantityOnOrders := 0;
IF PurchLine.FINDSET THEN
REPEAT
IF Item.GET(PurchLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
...Vervangende code 3
...IF PurchBlanketOrderLine.FINDSET THEN
REPEAT
PurchLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No.");
PurchLine.SETRANGE("Blanket Order No.",PurchBlanketOrderLine."Document No.");
PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No.");
QuantityOnOrders := 0;
IF PurchLine.FINDSET THEN
REPEAT
IF Item.GET(PurchLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
...Bestaande code 4
...QuantityOnOrders := 0;
IF PurchLine.FINDSET THEN
REPEAT
IF Item.GET(PurchLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
// Delete the following lines.
IF PurchLine."Document Type" = PurchLine."Document Type"::"Return Order" THEN
QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)"
ELSE
QuantityOnOrders := QuantityOnOrders + PurchLine."Outstanding Qty. (Base)";
// End of the deleted lines.
UNTIL PurchLine.NEXT = 0;
IF (ABS(PurchBlanketOrderLine."Qty. to Receive (Base)" + QuantityOnOrders +
PurchBlanketOrderLine."Qty. Received (Base)") >
ABS(PurchBlanketOrderLine."Quantity (Base)")) OR
(PurchBlanketOrderLine."Quantity (Base)" * PurchBlanketOrderLine."Outstanding Qty. (Base)" < 0)
...Vervangende code 4
...QuantityOnOrders := 0;
IF PurchLine.FINDSET THEN
REPEAT
IF Item.GET(PurchLine."No.") THEN
Item.TESTFIELD(Blocked,FALSE);
// Add the following lines.
IF (PurchLine."Document Type" = PurchLine."Document Type"::"Return Order") OR
((PurchLine."Document Type" = PurchLine."Document Type"::"Credit Memo") AND
(PurchLine."Return Shipment No." = ''))
THEN
QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)"
ELSE
IF (PurchLine."Document Type" = PurchLine."Document Type"::Order) OR
((PurchLine."Document Type" = PurchLine."Document Type"::Invoice) AND
(PurchLine."Receipt No." = ''))
THEN
QuantityOnOrders := QuantityOnOrders + PurchLine."Outstanding Qty. (Base)";
// End of the added lines.
UNTIL PurchLine.NEXT = 0;
IF (ABS(PurchBlanketOrderLine."Qty. to Receive (Base)" + QuantityOnOrders +
PurchBlanketOrderLine."Qty. Received (Base)") >
ABS(PurchBlanketOrderLine."Quantity (Base)")) OR
(PurchBlanketOrderLine."Quantity (Base)" * PurchBlanketOrderLine."Outstanding Qty. (Base)" < 0)
...
Vereisten
U hebt de volgende update en een van de volgende producten geïnstalleerd om deze hotfix:
-
Microsoft Dynamics NAV 2009 servicepack 1
-
Microsoft Dynamics NAV 2009 R2
-
2642368 fout "te verzenden (basis) van artikel [Item_Number] in Regelnr. [Line_Number] aantal mag niet meer dan [aantal] ' wordt weergegeven wanneer u probeert een order te maken van een raamcontract, order in Microsoft Dynamics NAV
Informatie over verwijderen
U kunt deze hotfix niet verwijderen.
Status
Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.
Opmerking Dit is een 'Snel publiceren' artikel dat rechtstreeks door het ondersteuningsteam van Microsoft is gemaakt. De informatie wordt geleverd zoals het is in reactie op de opkomende problemen. Omdat het artikel snel beschikbaar moest zijn, kunnen de materialen typografische fouten bevatten en op elk gewenst moment zonder voorafgaande kennisgeving worden gewijzigd. Zie de Gebruiksvoorwaardenvoor andere overwegingen.