Den här artikeln gäller Microsoft Dynamics NAV för alla länder och alla språkspråk.
Symptom
Anta att du genererar en försäljningsorder som har en artikelkostnad i Microsoft Dynamics NAV 2009 Service Pack 1 (SP1). När du kör rapporten Försäljningsstatistik (112), rapporten "Kund/artikelförsäljning" (113), "Lager – kundförsäljningsrapport (713) eller formuläret Kundstatistik (151) är vinsten felaktig. Artikeldebiteringskostnaden ingår inte i dessa rapporter.
Orsak
Det här problemet uppstår eftersom systemet beräknar kostnadsbeloppet med hjälp av posten som har typen Kundkälla i rapporterna.
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:
Ändra koden i rapporten Kund/artikelförsäljning (113) enligt följande:
Befintlig kod 1OnPreReport=BEGIN CustFilter := Customer.GETFILTERS; ItemLedgEntryFilter := "Value Entry".GETFILTERS; PeriodText := "Value Entry".GETFILTER("Posting Date"); IF PrintToExcel THEN MakeExcelInfo; END;Ersättningskod 1
OnPreReport=BEGIN CustFilter := Customer.GETFILTERS; ItemLedgEntryFilter := "Item Ledger Entry".GETFILTERS; PeriodText := "Item Ledger Entry".GETFILTER("Posting Date"); IF PrintToExcel THEN MakeExcelInfo; END;Befintlig kod 2
{ 10 ;TextBox ;0 ;0 ;18150;423 ;SourceExpr="Value Entry".TABLECAPTION + ': ' + ItemLedgEntryFilter; DataSetFieldName=Value_Entry__TABLECAPTION__________ItemLedgEntryFilter }Ersättningskod 2
{ 10 ;TextBox ;0 ;0 ;18150;423 ;SourceExpr="Item Ledger Entry".TABLECAPTION + ': ' + ItemLedgEntryFilter; DataSetFieldName=Value_Entry__TABLECAPTION__________ItemLedgEntryFilter }Befintlig kod 3
DataItemIndent=1; DataItemTable=Table5802; DataItemTableView=SORTING(Source Type,Source No.,Item No.,Posting Date) WHERE(Source Type=CONST(Customer)); OnPreDataItem=BEGIN ValueEntryBuffer.RESET; ValueEntryBuffer.DELETEALL; NextEntryNo := 1; END; OnAfterGetRecord=BEGIN ValueEntryBuffer.SETRANGE("Item No.", "Item No."); IF NOT ValueEntryBuffer.FIND('-') THEN BEGIN ValueEntryBuffer.INIT; ValueEntryBuffer."Entry No." := NextEntryNo; ValueEntryBuffer."Item No." := "Item No."; ValueEntryBuffer.INSERT; NextEntryNo := NextEntryNo + 1; END; ValueEntryBuffer."Invoiced Quantity" := ValueEntryBuffer."Invoiced Quantity" + "Invoiced Quantity"; ValueEntryBuffer."Sales Amount (Actual)" := ValueEntryBuffer."Sales Amount (Actual)" + "Sales Amount (Actual)"; ValueEntryBuffer."Cost Amount (Actual)" := ValueEntryBuffer."Cost Amount (Actual)" + "Cost Amount (Actual)"; ValueEntryBuffer."Discount Amount" := ValueEntryBuffer."Discount Amount" + "Value Entry"."Discount Amount"; ValueEntryBuffer."Cost Amount (Non-Invtbl.)" := ValueEntryBuffer."Cost Amount (Non-Invtbl.)" + "Cost Amount (Non-Invtbl.)"; ValueEntryBuffer.MODIFY; END; ReqFilterFields=Item No.,Inventory Posting Group,Posting Date; DataItemLink=Source No.=FIELD(No.), Posting Date=FIELD(Date Filter), Global Dimension 1 Code=FIELD(Global Dimension 1 Filter), Global Dimension 2 Code=FIELD(Global Dimension 2 Filter);Ersättningskod 3
DataItemIndent=1; DataItemTable=Table32; DataItemTableView=SORTING(Source Type,Source No.,Item No.,Variant Code,Posting Date) WHERE(Source Type=CONST(Customer)); OnPreDataItem=BEGIN ValueEntryBuffer.RESET; ValueEntryBuffer.DELETEALL; NextEntryNo := 1; END; OnAfterGetRecord=BEGIN ValueEntryBuffer.SETRANGE("Item No.", "Item No."); IF NOT ValueEntryBuffer.FIND('-') THEN BEGIN ValueEntryBuffer.INIT; ValueEntryBuffer."Entry No." := NextEntryNo; ValueEntryBuffer."Item No." := "Item No."; ValueEntryBuffer.INSERT; NextEntryNo := NextEntryNo + 1; END; CALCFIELDS("Sales Amount (Actual)","Cost Amount (Actual)","Cost Amount (Non-Invtbl.)"); ValueEntryBuffer."Invoiced Quantity" := ValueEntryBuffer."Invoiced Quantity" + "Invoiced Quantity"; ValueEntryBuffer."Sales Amount (Actual)" := ValueEntryBuffer."Sales Amount (Actual)" + "Sales Amount (Actual)"; ValueEntryBuffer."Cost Amount (Actual)" := ValueEntryBuffer."Cost Amount (Actual)" + "Cost Amount (Actual)"; ValueEntry.SETCURRENTKEY("Item Ledger Entry No."); ValueEntry.SETRANGE("Item Ledger Entry No.","Entry No."); IF ValueEntry.FINDSET THEN REPEAT ValueEntryBuffer."Discount Amount" := ValueEntryBuffer."Discount Amount" + ValueEntry."Discount Amount"; UNTIL ValueEntry.NEXT = 0; ValueEntryBuffer."Cost Amount (Non-Invtbl.)" := ValueEntryBuffer."Cost Amount (Non-Invtbl.)" + "Cost Amount (Non-Invtbl.)"; ValueEntryBuffer.MODIFY; END; ReqFilterFields=Item No.,Posting Date; DataItemLink=Source No.=FIELD(No.), Posting Date=FIELD(Date Filter), Global Dimension 1 Code=FIELD(Global Dimension 1 Filter), Global Dimension 2 Code=FIELD(Global Dimension 2 Filter);Ändra koden i funktionen MakeExcelInfo@5 i rapporten Försäljning av kund/objekt (113) enligt följande:
Befintlig kodBEGIN ExcelBuf.AddInfoColumn("Value Entry".GETFILTERS,FALSE,'',FALSE,FALSE,FALSE,'');Ersättningskod
BEGIN ExcelBuf.AddInfoColumn("Item Ledger Entry".GETFILTERS,FALSE,'',FALSE,FALSE,FALSE,'');Lägg till en ny lokal variabel i funktionen Bokför i rapporten Lager - Kundförsäljning (713) och ange sedan variabeln enligt följande:
- Namn: ItemLedgerEntry@1001
- DataType: Post
- Längd: 32
Ändra koden i värdeposten - OnAfterGetRecord-utlösaren i rapporten Lager - Kundförsäljning (713) enligt följande:
Befintlig kodIF "Expected Cost" THEN CurrReport.SKIP; Profit := "Sales Amount (Actual)" + "Cost Amount (Actual)" + "Cost Amount (Non-Invtbl.)"; IF ISSERVICETIER THEN IF "Source No." <> '' THENErsättningskod
IF "Expected Cost" THEN CurrReport.SKIP; //Add the following lines. WITH ItemLedgerEntry DO BEGIN SETRANGE("Entry No.","Item Ledger Entry No."); IF FINDFIRST THEN BEGIN CALCFIELDS("Sales Amount (Actual)","Cost Amount (Actual)","Cost Amount (Non-Invtbl.)"); Profit := "Sales Amount (Actual)" + "Cost Amount (Actual)" + "Cost Amount (Non-Invtbl.)"; END; END; //End of the lines. IF ISSERVICETIER THEN IF "Source No." <> '' THENÄndra koden i funktionen NonInvtblCostAmt i koduniten För kostnadsberäkning (5836) enligt följande:
Befintlig kodEND; END; //Delete the following lines. PROCEDURE NonInvtblCostAmt@29(VAR Customer@1001 : Record 18) : Decimal; VAR ValueEntry@1000 : Record 5802; BEGIN WITH ValueEntry DO BEGIN //End of the lines. SETCURRENTKEY("Source Type","Source No."); SETRANGE("Source Type","Source Type"::Customer); SETRANGE("Source No.",Customer."No.");Ersättningskod
END; END; //Add the following lines. PROCEDURE NonInvtblCostAmt@29(VAR Customer@1001 : Record 18) CostAmtNonInvtbl : Decimal; VAR ItemLedgerEntry@1000 : Record 32; BEGIN WITH ItemLedgerEntry DO BEGIN //End of the lines. SETCURRENTKEY("Source Type","Source No."); SETRANGE("Source Type","Source Type"::Customer); SETRANGE("Source No.",Customer."No.");Ändra koden i funktionen NonInvtblCostAmt i koduniten För kostnadsberäkning (5836) enligt följande:
Befintlig kodSETFILTER("Global Dimension 1 Code",Customer."Global Dimension 1 Filter"); SETFILTER("Global Dimension 2 Code",Customer."Global Dimension 2 Filter"); //Delete the following lines. CALCSUMS("Cost Amount (Non-Invtbl.)"); EXIT("Cost Amount (Non-Invtbl.)"); //End of the lines. END; END;Ersättningskod
SETFILTER("Global Dimension 1 Code",Customer."Global Dimension 1 Filter"); SETFILTER("Global Dimension 2 Code",Customer."Global Dimension 2 Filter"); //Add the following lines. IF FINDSET THEN REPEAT CALCFIELDS("Cost Amount (Non-Invtbl.)"); CostAmtNonInvtbl += "Cost Amount (Non-Invtbl.)"; UNTIL NEXT = 0; EXIT(CostAmtNonInvtbl); //End of the lines. END; END;
Krav
Du måste ha Microsoft Dynamics NAV 2009 Service Pack 1 installerat för att kunna använda den här snabbkorrigeringen.
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.