Den här artikeln gäller Microsoft Dynamics NAV för det indiska språket (på).
Symptom
Anta att du har en försäljningsorder med moms aktiverad i den indiska versionen av Microsoft Dynamics NAV 2009. När du har kört funktionen Beräkna strukturvärden är inv. Rabattbelopp, Enhetspris exklusive moms och Radbelopp exklusive momsvärden felaktiga.
Det här problemet uppstår i följande produkter:
- Den indiska versionen av Microsoft Dynamics NAV 2009 R2
- Den indiska versionen av Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
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 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 utlösaren Radrabatt % - OnValidate i tabellen Försäljningsrad (37) enligt följande:
Befintlig kod... "Line Discount %" := 100; // Delete the following line. IF NOT "Price Inclusive of Tax" THEN "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100, Currency."Amount Rounding Precision") // Delete the following lines. ELSE "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") * "Line Discount %" / 100,Currency."Amount Rounding Precision"); // End of the lines. ...Ersättningskod
... "Line Discount %" := 100; "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100, Currency."Amount Rounding Precision"); ...Ändra koden i raden rabattbelopp - OnValidate-utlösaren i tabellen Försäljningsrad (37) enligt följande:
Befintlig kod... TESTFIELD(Quantity); // Delete the following line. IF NOT "Price Inclusive of Tax" THEN IF ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") <> 0 THEN "Line Discount %" := ROUND( "Line Discount Amount" / ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * 100, 0.00001) ELSE "Line Discount %" := 0 // Delete the following lines. ELSE IF ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") <> 0 THEN "Line Discount %" := ROUND( "Line Discount Amount" / ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") * 100, 0.00001) ELSE "Line Discount %" := 0; // End of the lines. "Inv. Discount Amount" := 0; ...Ersättningskod
... TESTFIELD(Quantity); IF ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") <> 0 THEN "Line Discount %" := ROUND( "Line Discount Amount" / ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * 100, 0.00001) ELSE "Line Discount %" := 0; "Inv. Discount Amount" := 0; ...Ändra koden i funktionen GetSalesPriceExclusiveTaxes i tabellen Försäljningsrad (37) enligt följande:
Befintlig kod... IF StrOrderDetails."Include Base" THEN BaseAmountVariable := BaseAmountVariable + Quantity; // Delete the following lines. IF StrOrderDetails."Include Line Discount" THEN BaseAmountFixed := BaseAmountFixed - "Line Discount Amount"; IF StrOrderDetails."Include Invoice Discount" THEN BEGIN BaseAmountFixed := BaseAmountFixed + "Inv Discount Fixed"; BaseAmountVariable := BaseAmountVariable - "Inv Discount Variable"; END; // End of the lines. IF SalesHeader."Currency Factor" <> 0 THEN ...Ersättningskod
... IF StrOrderDetails."Include Base" THEN BaseAmountVariable := BaseAmountVariable + Quantity; IF SalesHeader."Currency Factor" <> 0 THEN ...Ändra koden i funktionen CalculateStructuresPIT i tabellen Försäljningsrad (37) på följande sätt:
Befintlig kod... SalesLine.MODIFY; // Delete the following lines. IF i < 3 THEN BEGIN FixedAmt := 0; VariableAmt := 0; AdjustedAmt := 0; DiffAdjustmentAmt := 0; FixedAmt := SalesLine."Unit Price Incl. of Tax" * SalesLine.Quantity; VariableAmt := SalesLine.Quantity; StrOrderLineDetails.RESET; StrOrderLineDetails.SETCURRENTKEY(Type,"Document Type","Document No.","Structure Code","Item No.","Line No."); StrOrderLineDetails.SETRANGE(Type,StrOrderLineDetails.Type::Sale); StrOrderLineDetails.SETRANGE("Document Type",SalesLine."Document Type"); StrOrderLineDetails.SETRANGE("Document No.",SalesLine."Document No."); StrOrderLineDetails.SETRANGE("Structure Code",SalesLine."PIT Structure"); StrOrderLineDetails.SETRANGE("Item No.",SalesLine."No."); StrOrderLineDetails.SETRANGE("Line No.",SalesLine."Line No."); StrOrderLineDetails.SETRANGE("Include PIT Calculation",TRUE); IF StrOrderLineDetails.FIND('-') THEN REPEAT FixedAmt -= StrOrderLineDetails.Amount; AdjustedAmt := AdjustedAmt + StrOrderLineDetails.Amount; UNTIL StrOrderLineDetails.NEXT = 0; SalesLine."Unit Price" := 0; IF VariableAmt <> 0 THEN BEGIN SalesLine."Unit Price" := ROUND((FixedAmt / VariableAmt),GetRoundingPrecisionUnitPrice); IF SalesLine."Unit Price" < 0 THEN SalesLine.FIELDERROR("Unit Price"); IF (i = 2) AND (FixedAmt <> 0) AND (SalesLine.Quantity <> 0) THEN BEGIN AdjustedAmt := AdjustedAmt + (SalesLine."Unit Price" * SalesLine.Quantity); FixedAmt := SalesLine."Unit Price Incl. of Tax" * SalesLine.Quantity; DiffAdjustmentAmt := ((FixedAmt - AdjustedAmt)/SalesLine.Quantity) * (SalesLine."Unit Price" * SalesLine.Quantity) / (FixedAmt ); SalesLine."Unit Price" := ROUND(SalesLine."Unit Price" - DiffAdjustmentAmt,GetRoundingPrecisionUnitPrice); IF SalesLine."Unit Price" < 0 THEN SalesLine.FIELDERROR("Unit Price"); END; SalesLine.ValidateUnitPrice; SalesLine.ChkQtyUpdatioAfterDDPLA; SalesLine.MODIFY; IF SalesHeader."Calc. Inv. Discount (%)" THEN CalcInvDis.CalculateWithSalesHeader(SalesHeader,SalesLine); SalesLine.GET(SalesLine."Document Type",SalesLine."Document No.",SalesLine."Line No."); END; END; // End of the lines. ...Ersättningskod
... SalesLine.MODIFY; ...Ändra koden i funktionen UpdateSalesLinesPIT i tabellen Försäljningsrad (37) enligt följande:
Befintlig kod... "Service Tax Amount" + "Service Tax eCess Amount" + "Service Tax SHE Cess Amount"; MODIFY; ...Ersättningskod
... "Service Tax Amount" + "Service Tax eCess Amount" + "Service Tax SHE Cess Amount"; // Add the following lines. "Amount To Customer UPIT" := "Line Amount" - "Inv. Discount Amount" + "Excise Amount" + "Tax Amount" + "Charges To Customer"; // End of the lines. MODIFY; ...Ändra koden i funktionen ValidateUnitPrice i tabellen Försäljningsrad (37) enligt följande:
Befintlig kod... "Line Discount %" := 100; // Delete the following line. IF NOT "Price Inclusive of Tax" THEN "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100, Currency."Amount Rounding Precision") // Delete the following lines. ELSE "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") * "Line Discount %" / 100,Currency."Amount Rounding Precision"); // End of the lines. "Inv. Discount Amount" := 0; ...Ersättningskod
... "Line Discount %" := 100; "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100, Currency."Amount Rounding Precision"); "Inv. Discount Amount" := 0; ...Ändra koden i funktionen Dividerabelopp i sales - post codeunit (80) enligt följande:
Befintlig kod 1... IF SalesLineQty <> Quantity THEN // Delete the following lines. IF "Price Inclusive of Tax" THEN "Line Discount Amount" := ROUND((SalesLineQty * "Unit Price Incl. of Tax") * "Line Discount %" / 100,Currency."Amount Rounding Precision") ELSE // End of the lines. "Line Discount Amount" := ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision"); "Line Amount" := "Line Amount" - "Line Discount Amount"; ...Ersättningskod 1
... IF SalesLineQty <> Quantity THEN "Line Discount Amount" := ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision"); "Line Amount" := "Line Amount" - "Line Discount Amount"; ...Befintlig kod 2
... "Bal. TDS/TCS Including SHECESS",Currency."Amount Rounding Precision"); // Delete the following lines. IF "Price Inclusive of Tax" THEN BEGIN "Amount To Customer UPIT" := SalesLineQty * "Unit Price"; GLSetup.GET; StrOrdLineDetails2.RESET; StrOrdLineDetails2.SETRANGE(Type,StrOrdLineDetails2.Type::Sale); StrOrdLineDetails2.SETRANGE("Document Type","Document Type"); StrOrdLineDetails2.SETRANGE("Document No.","Document No."); StrOrdLineDetails2.SETRANGE("Line No.","Line No."); StrOrdLineDetails2.SETRANGE("Include PIT Calculation",TRUE); IF StrOrdLineDetails2.FINDSET THEN REPEAT SalesLine2.GET("Document Type","Document No.","Line No."); IF StrOrdLineDetails2."Tax/Charge Type" = StrOrdLineDetails2."Tax/Charge Type"::Excise THEN "Amount To Customer UPIT" += "Excise Amount"; IF StrOrdLineDetails2."Tax/Charge Type" = StrOrdLineDetails2."Tax/Charge Type"::"Sales Tax" THEN "Amount To Customer UPIT" += "Tax Amount"; IF StrOrdLineDetails2."Tax/Charge Type" = StrOrdLineDetails2."Tax/Charge Type"::Charges THEN BEGIN IF QuantityType = QuantityType::General THEN "Amount To Customer UPIT" += ROUND(StrOrdLineDetails2.Amount * SalesLineQty / Quantity, Currency."Amount Rounding Precision"); IF QuantityType = QuantityType::Invoicing THEN "Amount To Customer UPIT" += ROUND(StrOrdLineDetails2.Amount * SalesLine2."Qty. to Invoice" / SalesLine2.Quantity, Currency."Amount Rounding Precision"); IF QuantityType = QuantityType::Shipping THEN "Amount To Customer UPIT" += ROUND(StrOrdLineDetails2.Amount * SalesLine2."Qty. to Ship" / SalesLine2.Quantity, Currency."Amount Rounding Precision"); END; UNTIL StrOrdLineDetails2.NEXT = 0; "Total UPIT Amount" := ROUND("Total UPIT Amount" * SalesLineQty / Quantity,Currency."Amount Rounding Precision"); END; // End of the lines. END; END; ...Ersättningskod 2
... "Bal. TDS/TCS Including SHECESS",Currency."Amount Rounding Precision"); // Add the following lines. IF "Price Inclusive of Tax" THEN "Amount To Customer UPIT" := ROUND("Line Amount" - "Inv. Discount Amount" + "Excise Amount" + "Tax Amount" + "Charges To Customer", Currency."Amount Rounding Precision"); // End of the lines. END; END; ...Ändra koden i funktionen RoundAmount i Sales - Post codeunit (80) enligt följande:
Befintlig kod... TotalSalesLineLCY."Amount To Customer"; "Charges To Customer" := ...Ersättningskod
... TotalSalesLineLCY."Amount To Customer"; // Add the following lines. "Amount To Customer UPIT" := ROUND( CurrExchRate.ExchangeAmtFCYToLCY( UseDate,SalesHeader."Currency Code", TotalSalesLine."Amount To Customer UPIT",SalesHeader."Currency Factor")) - TotalSalesLineLCY."Amount To Customer UPIT"; "Total UPIT Amount" := ROUND( CurrExchRate.ExchangeAmtFCYToLCY( UseDate,SalesHeader."Currency Code", TotalSalesLine."Total UPIT Amount",SalesHeader."Currency Factor")) - TotalSalesLineLCY."Total UPIT Amount"; // End of the lines. "Charges To Customer" := ...Ändra koden i funktionen ReverseAmount i Sales - Post codeunit (80) enligt följande:
Befintlig kod... "Amount To Customer" := -"Amount To Customer"; "Charges To Customer" := -"Charges To Customer"; ...Ersättningskod
... "Amount To Customer" := -"Amount To Customer"; // Add the following lines. Amount To Customer UPIT" := -"Amount To Customer UPIT"; Total UPIT Amount" := -"Total UPIT Amount"; // End of the lines. "Charges To Customer" := -"Charges To Customer"; ...Ändra koden i funktionen InvoiceUPITRounding i sales - post codeunit (80) enligt följande:
Befintlig kod 1... EXIT; // Delete the following line. UPITRoundingAmount := TotalSalesLine."Total UPIT Amount" - ROUND(TotalSalesLine."Amount To Customer UPIT"); IF UPITRoundingAmount <> 0 THEN BEGIN ...Ersättningskod 1
... EXIT; // Add the following line. UPITRoundingAmount := TotalSalesLine."Amount To Customer UPIT" - ROUND(TotalSalesLine."Amount To Customer UPIT"); IF UPITRoundingAmount <> 0 THEN BEGIN ...Befintlig kod 2
... "UPIT Rounding Inserted" := TRUE; // Delete the following line. IF SalesHeader."Prices Including VAT" THEN VALIDATE("Unit Price",UPITRoundingAmount) ...Ersättningskod 2
... "UPIT Rounding Inserted" := TRUE; // Add the following line. IF SalesHeader."Price Inclusive of Taxes" THEN VALIDATE("Unit Price",UPITRoundingAmount) ...
Krav
Du måste ha någon av följande produkter installerade för att kunna använda den här snabbkorrigeringen:
- Den indiska versionen av Microsoft Dynamics NAV 2009 R2
- Den indiska versionen av Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
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.