Den här artikeln gäller Microsoft Dynamics NAV för alla länder och alla språkspråk.
Symptom
När du kör batchjobbet Justera kostnadsartikelposter får du långsam prestanda när artiklar som använder metoden Medelkostnad och frekvent användning av överföringar justeras. Det här problemet uppstår i följande produkter:
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 1
- Microsoft Dynamics NAV 2009
- Microsoft Dynamics NAV 5.0 Service Pack 1
Lösning
Snabbkorrigeringsinformation
En snabbkorrigering som stöds är nu tillgänglig från Microsoft. Det är dock bara avsett att åtgärda problemet som beskrivs i den här artikeln. Använd den bara på system som har det här specifika problemet. Den här snabbkorrigeringen kan få ytterligare tester. Om du inte drabbas hårt av det här problemet rekommenderar vi därför att du väntar på nästa Microsoft Dynamics NAV 2009 Service Pack eller nästa Microsoft Dynamics NAV-version som innehåller den här snabbkorrigeringen.
Obs! I särskilda fall kan avgifter som vanligtvis uppkommer för supportsamtal avbrytas om en teknisk supporttekniker för Microsoft Dynamics och relaterade produkter fastställer att en specifik uppdatering löser problemet. De vanliga supportkostnaderna gäller för ytterligare supportfrågor och problem som inte är berättigade till den aktuella uppdateringen.
Installationsinformation
Microsoft tillhandahåller endast programmeringsexempel i visningssyfte, utan att någon form av garanti uttrycks eller är underförstådd. Detta omfattar men är inte begränsat till underförstådda garantier för säljbarhet eller lämplighet för ett visst ändamål. Den här artikeln förutsätter att du är bekant med programmeringsspråket som demonstreras och med de verktyg som används för att skapa och felsöka procedurer. Microsofts supporttekniker kan hjälpa till att förklara funktionaliteten i en viss procedur, men de ändrar inte de här exemplen för att tillhandahålla ytterligare funktioner eller konstruera procedurer för att uppfylla dina specifika krav.
Obs! Innan du installerar den här snabbkorrigeringen kontrollerar du att alla Microsoft Navision-klientanvändare loggas ut från systemet. Detta omfattar användare av Microsoft Navision Application Services (NAS). Du bör vara den enda klientanvändare som är inloggad när du implementerar snabbkorrigeringen.
Om du vill implementera den här snabbkorrigeringen måste du ha en utvecklarlicens.
Vi rekommenderar att användarkontot i fönstret Windows-inloggningar eller i fönstret Databasinloggningar tilldelas roll-ID:t "SUPER". Om användarkontot inte kan tilldelas superroll-ID måste du kontrollera att användarkontot har följande behörigheter:
- Behörigheten Ändra för det objekt som du kommer att ändra.
- Körbehörigheten för systemobjekt-ID 5210-objektet och för 9015-objektet Systemobjekt-ID.
Obs! Du behöver inte ha rättigheter till datakällorna om du inte behöver utföra datareparation.
Kodändringar
Obs! Testa alltid korrigeringar av kod i en kontrollerad miljö innan du tillämpar korrigeringarna på produktionsdatorerna.
Lös problemet genom att följa de här stegen:
Lägg till följande lokala variabler i funktionen IsAvgCostException i tabellen Värdepost (5802):
- ItemLedgEntry@1002 : Record 32;
- xItemLedgEntry@1003 : Record 32;
- TempItemLedgEntry@1005 : TEMPORARY Record 32;
- GoThroughChain@1004 : Boolesk;
Ändra koden i funktionen IsAvgCostException i tabellen Värdepost (5802) enligt följande:
Befintlig kod... IF "Partial Revaluation" THEN EXIT(TRUE); // Delete the following lines. IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Transfer THEN EXIT(TRUE); IF ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE) THEN EXIT(TRUE); // End of the lines. EXIT(FALSE); ...Ersättningskod
... IF "Partial Revaluation" THEN EXIT(TRUE); // Add the following lines. IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Consumption THEN GoThroughChain := ItemApplnEntry.AppliedFromEntryExists("Item Ledger Entry No.") ELSE GoThroughChain := ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE); IF GoThroughChain THEN REPEAT IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Transfer THEN ItemLedgEntry.GET(ItemApplnEntry."Inbound Item Entry No.") ELSE ItemLedgEntry.GET(ItemApplnEntry."Outbound Item Entry No."); IF ItemLedgEntry."Entry No." <> xItemLedgEntry."Entry No." THEN BEGIN xItemLedgEntry := ItemLedgEntry; ItemApplnEntry.GetVisitedEntries(ItemLedgEntry,TempItemLedgEntry); TempItemLedgEntry.SETCURRENTKEY("Item No.",Positive,"Location Code","Variant Code"); TempItemLedgEntry.SETRANGE("Item No.","Item No."); TempItemLedgEntry.SETRANGE(Positive,TRUE); TempItemLedgEntry.SETRANGE("Location Code","Location Code"); TempItemLedgEntry.SETRANGE("Variant Code","Variant Code"); IF NOT TempItemLedgEntry.ISEMPTY THEN EXIT(TRUE); END; UNTIL ItemApplnEntry.NEXT = 0; // End of the lines. EXIT(FALSE); ...Lägg till följande globala variabel i koduniten Lagerjustering (5895):
- RevaluationPoint@1022 : TEMPORARY Record 2000000026;
Lägg till följande lokala variabler i funktionen AvgValueEntriesToAdjustExist i koduniten Lagerjustering (5895):
- CurrIsException@1009 : Boolesk;
- NextIsException@1010 : Boolesk;
Ändra koden i funktionen AvgValueEntriesToAdjustExist i koduniten Lagerjustering (5895) enligt följande:
Befintlig kod... END; FINDSET; REPEAT IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" < 0) THEN BEGIN OutbndValueEntry := ValueEntry; OutbndValueEntry.INSERT; FindNextRange := FALSE; END; // Delete the following lines. IF IsAvgCostException THEN BEGIN AvgCostExceptionBuf.Number := "Entry No."; AvgCostExceptionBuf.INSERT; END; // End of the lines. IF ("Entry Type" = "Entry Type"::Revaluation) OR ...Ersättningskod
... END; CLEAR(RevaluationPoint); RevaluationPoint.DELETEALL; FINDSET; REPEAT // Add the following lines. IF "Partial Revaluation" THEN BEGIN RevaluationPoint.Number := "Entry No."; RevaluationPoint.INSERT; END; // End of the lines. IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" < 0) THEN BEGIN OutbndValueEntry := ValueEntry; OutbndValueEntry.INSERT; FindNextRange := FALSE; END; // Add the following lines. IF NOT Adjustment THEN BEGIN CurrIsException := NextIsException; NextIsException := IsAvgCostException; IF NextIsException OR CurrIsException THEN BEGIN AvgCostExceptionBuf.Number := "Entry No."; AvgCostExceptionBuf.INSERT; END; END; // End of the lines. IF ("Entry Type" = "Entry Type"::Revaluation) OR ...Ändra koden i funktionen IsExcludeEntryFromAvgCostCalc i koduniten Lagerjustering (5895) enligt följande:
Befintlig kod... WITH ValueEntry DO BEGIN IF "Partial Revaluation" THEN ...Ersättningskod
... WITH ValueEntry DO BEGIN // Add the following lines. RevaluationPoint.SETRANGE(Number,"Entry No.",OutbndValueEntry."Entry No."); IF NOT RevaluationPoint.ISEMPTY THEN EXIT(FALSE); // End of the lines. IF "Partial Revaluation" THEN ...
Krav
Du måste ha någon av följande produkter installerade för att kunna använda den här snabbkorrigeringen:
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 1
- Microsoft Dynamics NAV 2009
- Microsoft Dynamics NAV 5.0 Service Pack 1
Du måste dessutom ha snabbkorrigering 2481793 installerad för att kunna använda den här snabbkorrigeringen.
Om du vill ha mer information klickar du på följande artikelnummer för att visa artikeln i Microsoft Knowledge Base:
2481793 Enhetskostnaden för poster blir negativ när du kör omvärderingen på artiklar som använder metoden Medelkostnad i Microsoft Dynamics NAV
Information om borttagning
Du kan inte ta bort den här snabbkorrigeringen.
Status
Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".
Obs! Det här är en "FAST PUBLISH"-artikel som skapats direkt från Microsofts supportorganisation. Den information som finns häri tillhandahålls i befintligt format som svar på framväxande problem. Till följd av hur snabbt materialet blir tillgängligt kan materialet innehålla typografiska fel och kan komma att revideras när som helst utan föregående meddelande. Se användningsvillkor för andra överväganden.