MOMS avrundning fungerar felaktigt för rättningstransaktioner på försäljning/inköp dokument i den tjeckiska versionen av Microsoft Dynamics NAV 2009 R2


I den här artikeln gäller för Microsoft Dynamics NAV för tjeckiska (cz) regionen.

Symptom


Systemet beräknar moms avrundning för rättande transaktioner för försäljning/inköp dokument i den tjeckiska versionen av Microsoft Dynamics NAV 2009 R2. Det här problemet uppstår när systemet är avrunda fakturor och moms till heltal.

Lösning


Information om snabbkorrigeringen

En snabbkorrigering är nu tillgänglig från Microsoft. Den är endast avsedd att åtgärda det problem som beskrivs i denna artikel. Använd den bara på datorer där detta problem uppstår. Snabbkorrigeringen kan komma att testas igen. Om inte störs alltför mycket av detta problem rekommenderar vi att du väntar på Nästa service pack-versionen för Microsoft Dynamics NAV 2009 eller nästa Microsoft Dynamics NAV-version som innehåller den här snabbkorrigeringen.

Obs! I särskilda fall, de avgifter som är normalt för support vara avgiftsfri om en supporttekniker för Microsoft Dynamics och relaterade produkter som bestämmer att en särskild uppdatering kan lösa ditt problem. De vanliga supportkostnaderna gäller för övriga supportfrågor och problem som inte berör den särskilda uppdateringen.



Installationsinformation

Microsoft tillhandahåller programmeringsexempel endast utan garanti varken uttryckliga eller underförstådda. Detta inkluderar men är inte begränsat till, underförstådda garantier om säljbarhet eller lämplighet för ett särskilt ändamål. Den här artikeln förutsätter att du är bekant med det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsofts supporttekniker kan hjälpa till med att förklara funktionen hos en viss procedur, men kan inte ändra dessa exempel för att ge ytterligare funktioner eller skapa procedurer som motsvarar dina speciella behov.

Obs! Innan du installerar den här snabbkorrigeringen måste du kontrollera att alla användare av Microsoft Navision-klient har loggat ut. Detta inkluderar Microsoft Navision Application Services (NAS) klientanvändare. Du ska endast klientanvändare som är inloggad när du implementerar den här snabbkorrigeringen.

Om du vill genomföra den här snabbkorrigeringen måste du ha en utvecklarlicens.

Vi rekommenderar att tilldelas användarkontot i fönstret Windows-inloggningar eller i fönstret databasinloggningar "SUPER" roll-ID. Om användarkontot inte kan tilldelas "SUPER" roll-ID måste du kontrollera att användarkontot har följande behörigheter:
  • Ändra behörighet för objektet ändras.
  • Körbehörighet för systemet objektet ID 5210 objektet och objektet System objektet ID 9015 .


Obs! Du har inte behörighet för datalager inte data reparation.

Kod ändras

Obs! Alltid åtgärdas testa koden i en kontrollerad miljö innan du installerar korrigeringar för produktionsdatorer.
Lös problemet så här:
  1. Ändra koden i funktionen RoundAmount i codeunit Försäljningspost (80) enligt följande:
    Lägg till en textkonstant enligt följande:
    Text054: TextConst ' ENU = %1 %2 måste ha noll momsinst. "
    Befintlig kod
    ...      IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);

    IF SalesHeader."Prices Including VAT" THEN
    ...
    Ersättningskod
    ...   IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    // Add the following lines.
    IF "System-Created Entry" THEN BEGIN
    RoundingPrecisionLCY := Currency."Amount Rounding Precision";
    RoundingDirectionLCY := Currency.VATRoundingDirection;
    END ELSE BEGIN
    // End of the added lines.

    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    // Add the following line.
    END;

    IF SalesHeader."Prices Including VAT" THEN
    ...
  2. Ändra koden i funktionen InvoiceRounding i codeunit Försäljningspost (80) enligt följande:
    Ta bort följande lokala variabler:
    • Namn: RoundingPrecision; Datatyp: decimaltal
    • Namn: RoundingDirection; Datatyp: Text [1]
    Lägg till följande lokala variabler:
    • Namn: VATPostingSetup; Datatyp: Post (325)
    • Namn: GLAcc; Datatyp: Post (15)

    Befintlig kod 1
    ...// Delete the following line.
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Currency.TESTFIELD("Invoice Rounding Precision");
    InvoiceRoundingAmount :=
    -ROUND(
    TotalSalesLine."Amount Including VAT" -
    ROUND(
    TotalSalesLine."Amount Including VAT",
    Currency."Invoice Rounding Precision",
    Currency.InvoiceRoundingDirection),
    // Delete the following line.
    RoundingPrecision);

    IF InvoiceRoundingAmount <>0 THEN BEGIN
    CustPostingGr.GET(SalesHeader."Customer Posting Group");
    CustPostingGr.TESTFIELD("Invoice Rounding Account");

    WITH SalesLine DO BEGIN
    ...
    Ersättningskod 1
    ...  Currency.TESTFIELD("Invoice Rounding Precision");
    InvoiceRoundingAmount :=
    -ROUND(
    TotalSalesLine."Amount Including VAT" -
    ROUND(
    TotalSalesLine."Amount Including VAT",
    Currency."Invoice Rounding Precision",
    Currency.InvoiceRoundingDirection),

    // Add the following line.
    Currency."Amount Rounding Precision");

    IF InvoiceRoundingAmount <> 0 THEN BEGIN
    CustPostingGr.GET(SalesHeader."Customer Posting Group");
    CustPostingGr.TESTFIELD("Invoice Rounding Account");
    // Add the following lines.
    IF GLSetup."Rounding VAT (LCY)" <> GLSetup."Amount Rounding Precision" THEN BEGIN
    GLAcc.GET(CustPostingGr."Invoice Rounding Account");
    IF VATPostingSetup.GET(SalesHeader."VAT Bus. Posting Group",GLAcc."VAT Prod. Posting Group") THEN
    IF VATPostingSetup."VAT %" <> 0 THEN
    ERROR(Text054,CustPostingGr.FIELDCAPTION("Invoice Rounding Account"),CustPostingGr."Invoice Rounding Account");
    END;
    // End of the added lines.

    WITH SalesLine DO BEGIN
    ...
    Befintlig kod 2
    ...   ELSE
    VALIDATE(
    "Unit Price",
    ROUND(
    InvoiceRoundingAmount /
    (1 + (1 - SalesHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
    // Delete the following line.
    RoundingPrecision));

    VALIDATE("Amount Including VAT",InvoiceRoundingAmount);
    ...
    Ersättningskod 2
    ...  ELSE
    VALIDATE(
    "Unit Price",
    ROUND(
    InvoiceRoundingAmount /
    (1 + (1 - SalesHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
    // Add the following line.
    Currency."Amount Rounding Precision"));

    VALIDATE("Amount Including VAT",InvoiceRoundingAmount);
    ...
  3. Ändra koden i funktionen RoundAmount i den Inköp-bokför kodmodul (90) enligt följande:
    Lägg till följande text konstanter:

    Text061: TextConst ' ENU = %1 %2 måste ha noll momsinst. "

    Befintlig kod
    ...  IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);

    IF PurchHeader."Prices Including VAT" THEN
    ...
    Ersättningskod
    ...  IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    // Add the following lines.
    IF "System-Created Entry" THEN BEGIN
    RoundingPrecisionLCY := Currency."Amount Rounding Precision";
    RoundingDirectionLCY := Currency.VATRoundingDirection;
    END ELSE BEGIN
    // End of the added lines.
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    // Add the following line.
    END;

    IF PurchHeader."Prices Including VAT" THEN
    ...
  4. Ändra koden i funktionen InvoiceRounding i den Inköp-bokför kodmodul (90) enligt följande:
    Ta bort följande lokala variabler:
    • Namn: RoundingPrecision; Datatyp: decimaltal
    • Namn: RoundingDirection; Datatyp: Text [1]
    Lägg till följande lokala variabler:
    • Namn: VATPostingSetup; Datatyp: Post (325)
    • Namn: GLAcc; Datatyp: Post (15)

    Befintlig kod
    ...   IF InvoiceRoundingAmount <> 0 THEN BEGIN
    VendPostingGr.GET(PurchHeader."Vendor Posting Group");
    VendPostingGr.TESTFIELD("Invoice Rounding Account");

    WITH PurchLine DO BEGIN
    ...
    Ersättningskod
    ...    IF InvoiceRoundingAmount <>  0 THEN BEGIN
    VendPostingGr.GET(PurchHeader."Vendor Posting Group");
    VendPostingGr.TESTFIELD("Invoice Rounding Account");
    // Add the following lines.
    IF GLSetup."Rounding VAT (LCY)" <> GLSetup."Amount Rounding Precision" THEN BEGIN
    GLAcc.GET(VendPostingGr."Invoice Rounding Account");
    IF VATPostingSetup.GET(PurchHeader."VAT Bus. Posting Group",GLAcc."VAT Prod. Posting Group") THEN
    IF VATPostingSetup."VAT %" <>0 THEN
    ERROR(Text061,VendPostingGr.FIELDCAPTION("Invoice Rounding Account"),VendPostingGr."Invoice Rounding Account");
    END;
    // End of the added lines.
    WITH PurchLine DO BEGIN
    ...
  5. Ändra koden i utlösaren Belopp inklusive moms - OnValidate i tabellen Försäljningsrad (37) enligt följande:
    Befintlig kod
    ...    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
    Ersättningskod
    ...  CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    // Add the following lines.
    IF "System-Created Entry" THEN
    RoundingPrecision := Currency."Amount Rounding Precision"
    ELSE
    // End of the added lines.
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
  6. Ändra koden i funktionen CalcVATAmountLines i tabellen Försäljningsrad (37) enligt följande:
    Befintlig kod 1
    ...              END;
    END;
    // Delete the following line
    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount;
    VATCorrection := VATCorrection AND SalesLine."VAT Correction";
    END;
    UNTIL NEXT = 0;
    ...
    Ersättningskod 1
    ...            END;
    END;
    // Add the following lines.
    IF GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision" THEN
    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount + "VAT Difference";
    // End of the added lines.
    VATCorrection := VATCorrection AND SalesLine."VAT Correction";
    END;
    UNTIL NEXT = 0;
    ...
    Befintlig kod 2
    ...    END;
    END;
    // Delete the following line.
    IF RoundingLineInserted THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...
    Ersättningskod 2
    ...     END;
    END;
    // Add the following line.
    IF RoundingLineInserted AND (GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision") THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...
  7. Ändra koden i utlösaren Belopp inklusive moms - OnValidate i tabellen Inköpsrad (39) på följande sätt:
    Befintlig kod
    ...    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
    Ersättningskod
    ...  CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    // Add the following lines.
    IF "System-Created Entry" THEN
    RoundingPrecision := Currency."Amount Rounding Precision"
    ELSE
    // End of the added lines.
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
  8. Ändra koden i funktionen CalcVATAmountLines i tabellen Inköpsrad (39) på följande sätt:
    Befintlig kod 1
    ...       END;
    END;

    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount + "VAT Difference";
    VATCorrection := VATCorrection AND PurchLine."VAT Correction";
    ...
    Ersättningskod 1
    ...       END;
    END;
    // Add the following line.
    IF GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision" THEN
    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount + "VAT Difference";
    VATCorrection := VATCorrection AND PurchLine."VAT Correction";
    ...
    Befintlig kod 2
    ...   END;
    END;
    // Delete the following line.
    IF RoundingLineInserted THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...
    Ersättningskod 2
    ...     END;
    END;
    // Add the following line
    IF RoundingLineInserted AND (GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision") THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...

Förutsättningar

Du måste ha den tjeckiska versionen av Microsoft Dynamics NAV 2009 R2 installerat för att kunna installera 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 Microsoft-produkterna som nämns i avsnittet "Gäller".

Referenser


VSFT DynamicsNAV SE: 254108
Obs! Detta är en "SNABBPUBLICERING"-artikel skapad direkt från Microsoft support-organisationen. Informationen häri tillhandahålls i befintligt skick som svar på nya problem. Till följd av hastigheten för att göra det tillgängligt kan materialet innehålla typografiska fel och kan ändras när som helst utan föregående meddelande. Se Villkoren för användning för andra överväganden.