Sistemul nu reflectă valoarea TVA ajustată manual după ce postați un jurnal general în versiunea slovacă sau în versiunea cehă de Microsoft Dynamics NAV 5.0 Service Pack 1

Se aplică la
Microsoft Dynamics NAV 5.0

Acest articol se aplică la Microsoft Dynamics NAV pentru următoarele țări și setări regionale de limbă.

  • Slovacă (sk)
  • Cehă (cz)

Simptome

Să presupunem că creați o linie nouă într-un jurnal general în versiunea slovacă sau în versiunea cehă de Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1). După ce ajustați manual valoarea TVA și înregistrați jurnalul general, sistemul recalculează taxa pe valoare adăugată (TVA) la postarea în jurnal și înlocuiește valoarea TVA ajustată utilizând valoarea calculată.

Rezolvare

Informații despre remedierea rapidă

O remediere rapidă acceptată este acum disponibilă de la Microsoft. Însă, scopul său este doar să corecteze problema descrisă în acest articol. Aplicați-o doar sistemelor care se confruntă cu această problemă specifică. Această remediere rapidă poate fi testată suplimentar. De aceea, dacă problema nu vă afectează grav, vă recomandăm să așteptați următorul pachet Service Pack Microsoft Dynamics NAV 5.0 sau versiunea următoare de Microsoft Dynamics NAV care conține această remediere rapidă.

Notă În cazuri speciale, costurile implicate de obicei pentru apelurile de asistență pot fi revocate dacă un specialist în asistență tehnică pentru Microsoft Dynamics și produsele asociate stabilește că o anumită actualizare va rezolva problema. Costurile uzuale de suport se vor aplica pentru întrebări suplimentare de suport și pentru probleme ce nu fac obiectul actualizării în chestiune.

          

Informații despre instalare

Microsoft oferă exemple de programare numai în scop ilustrativ, fără nicio garanție explicită sau implicită. Aceasta include, dar nu se limitează la, garanțiile implicite de vandabilitate sau adecvare pentru un anumit scop. Acest articol presupune că sunteți familiarizat cu limbajul de programare prezentat și cu instrumentele utilizate pentru a crea și a depana proceduri. Inginerii de asistență Microsoft pot ajuta la explicarea funcționalității unei anumite proceduri, însă nu vor modifica aceste exemple pentru a furniza funcționalitate suplimentară și nu vor construi proceduri pentru a răspunde cerințelor dvs. specifice.

Notă Înainte de a instala această remediere rapidă, verificați dacă toți utilizatorii clientului Microsoft Navision sunt deconectați de la sistem. Printre aceștia se numără utilizatorii clienților Microsoft Navision Application Services (NAS). Ar trebui să fiți singurul utilizator client conectat atunci când implementați această remediere rapidă.

Pentru a implementa această remediere rapidă, trebuie să aveți o licență de dezvoltator.

Recomandăm ca contului de utilizator din fereastra Conectări Windows sau din fereastra Conectări bază de date să primească ID-ul de rol "SUPER". În cazul în care contului de utilizator nu i se poate atribui ID-ul de rol "SUPER", trebuie să verificați dacă acel cont de utilizator are următoarele permisiuni:

  • Permisiunea Modificare pentru obiectul pe care îl veți modifica.
  • Permisiunea de executare pentru obiectul cu ID obiect de sistem 5210 și pentru obiectul ID obiect de sistem 9015.

                
Notă: nu trebuie să aveți drepturi asupra depozitelor de date decât dacă trebuie să efectuați repararea datelor.

Modificări de cod

Notă: testați întotdeauna remedierile de cod într-un mediu controlat înainte de a aplica remedierile la computerele de producție.
Pentru a rezolva această problemă, urmați acești pași:

  1. Modificați codul din declanșatorul Valoare TVA - OnValidate din generație. Tabel Linie de jurnal (81) după cum urmează:
    Cod existent

    ...
    "VAT Difference" :=
    "VAT Amount" -
    ROUND(
    
    // Delete the following lines. 
    Amount * "VAT %" / (100 + "VAT %"),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    // End of the lines.
    
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    ...
    

    Codul de înlocuire

    ...
    "VAT Difference" :=
    "VAT Amount" -
    ROUND(
    
    // Add the following lines. 
    Amount - ROUND(Amount / (1 + "VAT %" / 100),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection));
    //End of the lines. 
    
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    ...
    
  2. Modificarea codului din declanșatorul VAT % - OnValidate din generație. Tabel Linie de jurnal (81) după cum urmează:
    Cod existent

    ...
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    
    // Delete the following lines.
    BEGIN
    GLSetup.GET;
    IF GLSetup."Round VAT Coeff." THEN BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);
    "VAT Amount" :=
    ROUND(
    Amount * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecision,
    RoundingDirection);
    "VAT Base Amount" := Amount - "VAT Amount";
    END ELSE BEGIN
    "VAT Base Amount" :=
    ROUND(Amount / (1 + "VAT %" / 100),Currency."Amount Rounding Precision");
    "VAT Amount" :=
    ROUND(Amount - "VAT Base Amount",Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    END;
    // End of the lines.
    
    "VAT Calculation Type"::"Full VAT":
    BEGIN
    IF ("Prepayment Type" = "Prepayment Type"::Advance) AND NOT "System-Created Entry" AND
    ...
    

    Codul de înlocuire

    ...
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    
    // Add the following line. 
    CalcVATAmount(Amount,"VAT Amount","VAT Base Amount","VAT %"); 
    
    "VAT Calculation Type"::"Full VAT":
    BEGIN
    IF ("Prepayment Type" = "Prepayment Type"::Advance) AND NOT "System-Created Entry" AND
    ...
    
  3. Modificați codul din bal. VAT % - OnValidate trigger din generație. Tabel Linie de jurnal (81) după cum urmează:
    Cod existent

    ...
    CASE "Bal. VAT Calculation Type" OF
    "Bal. VAT Calculation Type"::"Normal VAT",
    "Bal. VAT Calculation Type"::"Reverse Charge VAT":
    
    // Delete the following lines. 
    BEGIN
    GLSetup.GET;
    IF GLSetup."Round VAT Coeff." THEN BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);
    "Bal. VAT Amount" :=
    ROUND(
    -Amount * ROUND("Bal. VAT %" / (100 + "Bal. VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecision,
    RoundingDirection);
    "Bal. VAT Base Amount" := -Amount - "Bal. VAT Amount";
    END ELSE BEGIN
    "Bal. VAT Base Amount" :=
    ROUND(-Amount / (1 + "Bal. VAT %" / 100),Currency."Amount Rounding Precision");
    "Bal. VAT Amount" :=
    ROUND(-Amount - "Bal. VAT Base Amount",Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    END;
    // End of the lines. 
    
    "Bal. VAT Calculation Type"::"Full VAT":
    "Bal. VAT Amount" := -Amount;
    "Bal. VAT Calculation Type"::"Sales Tax":
    ...
    

    Codul de înlocuire

    ...
    CASE "Bal. VAT Calculation Type" OF
    "Bal. VAT Calculation Type"::"Normal VAT",
    "Bal. VAT Calculation Type"::"Reverse Charge VAT":
    // Add the following line 
    CalcVATAmount(-Amount,"Bal. VAT Amount","Bal. VAT Base Amount","Bal. VAT %"); 
    "Bal. VAT Calculation Type"::"Full VAT":
    "Bal. VAT Amount" := -Amount;
    "Bal. VAT Calculation Type"::"Sales Tax":
    ...
    
  4. Creați o nouă funcție locală CalcVATAmount în gener. Tabel Linie de jurnal (81) după cum urmează:

    LOCAL PROCEDURE CalcVATAmount@1220000(Amount@1220000 : Decimal;VAR VATAmount@1220001 : Decimal;VAR VATBase@1220002 : Decimal;VATPercent@1220003 : Decimal);
    VAR
    RoundingPrecision@1220004 : Decimal;
    RoundingDirection@1220005 : Text[1];
    BEGIN
    GLSetup.GET;
    IF GLSetup."Round VAT Coeff." THEN BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);
    VATAmount :=
    ROUND(
    Amount * ROUND(VATPercent / (100 + VATPercent),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecision,
    RoundingDirection); 
    VATBase := Amount - VATAmount;
    END ELSE BEGIN
    VATBase :=
    ROUND(
    Amount / (1 + VATPercent / 100),
    Currency."Amount Rounding Precision",
    Currency.VATRoundingDirection);
    VATAmount := Amount - VATBase;
    END;
    END;
    
  5. Modificați codul din funcția InitVat din gen. Jnl.-Post Line codeunit (12). Pentru a face acest lucru, urmați acești pași:

    1. Ștergeți variabilele locale următoare:

      • CalculatedVATAmtLCY : zecimal
      • RoundingPrecisionLCY : zecimal
      • RoundingDirectionLCY : Text[1]
    2. Adăugați o variabilă nouă, apoi specificați variabila după cum urmează:

      • Nume: VATAmtLCY
      • Tip de date:Zecimal
    3. Modificați codul după cum urmează:
      Cod existent

      ...
      GenJnlLine."VAT Amount LCY (Non Deduct.)";
      GLEntry."VAT Amount" := "Amount (LCY)" - GLEntry.Amount;
      
      // Delete the following lines. 
      GLSetup.GET;
      GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
      IF GLSetup."Round VAT Coeff." THEN
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
      RoundingPrecisionLCY,
      RoundingDirectionLCY)
      ELSE
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" - ROUND("Amount (LCY)" / (1 + "VAT %" / 100),RoundingPrecisionLCY),
      RoundingPrecisionLCY,
      RoundingDirectionLCY);
      IF ("VAT Amount (LCY)" <> CalculatedVATAmtLCY) AND
      ("Currency Code" <> '')
      THEN BEGIN 
      // End of the lines. 
      
      GLEntry.Amount := "VAT Base Amount (LCY)";
      GLEntry."VAT Amount" := "VAT Amount (LCY)"; 
      END;
      ...
      

      Codul de înlocuire

      ...
      GenJnlLine."VAT Amount LCY (Non Deduct.)";
      GLEntry."VAT Amount" := "Amount (LCY)" - GLEntry.Amount;
      
      // Add the following lines. 
      VATAmtLCY := CalculatedVATAmountLCY;
      IF ("VAT Amount (LCY)" <> VATAmtLCY) AND ("Currency Code" <> '') THEN BEGIN 
      //End of the lines. 
      
      GLEntry.Amount := "VAT Base Amount (LCY)";
      GLEntry."VAT Amount" := "VAT Amount (LCY)";
      
      // Add the following lines.
      END ELSE
      IF GLSetup."Round VAT Coeff." THEN BEGIN
      GLEntry."VAT Amount" := VATAmtLCY - "VAT Amount LCY (Non Deduct.)";
      GLEntry.Amount := "Amount (LCY)" - GLEntry."VAT Amount";
      //End of the lines. 
      
      END; 
      ...
      
  6. Modificați codul din funcția InsertVAT din generație. Jnl.-Post Line codeunit (12). Pentru a face acest lucru, urmați acești pași:

    1. Ștergeți variabilele locale următoare:

      • CalculatedVATAmtLCY : zecimal
      • RoundingPrecisionLCY : zecimal
      • RoundingDirectionLCY : Text[1]
    2. Modificați codul după cum urmează:
      Cod existent

      ...
      "Posting Date","Currency Code","VAT Difference",
      CurrExchRate.ExchangeRate("Posting Date","Currency Code")));
      
      // Delete the following lines. 
      GLSetup.GET;
      GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
      IF GLSetup."Round VAT Coeff." THEN
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
      RoundingPrecisionLCY,
      RoundingDirectionLCY)
      ELSE
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" - ROUND("Amount (LCY)" / (1 + "VAT %" / 100),RoundingPrecisionLCY),
      RoundingPrecisionLCY,
      RoundingDirectionLCY);
      IF ("VAT Amount (LCY)" <> CalculatedVATAmtLCY) AND
      ("Currency Code" <> '')
      THEN
      VATDifferenceLCY := "VAT Amount (LCY)" - CalculatedVATAmtLCY; 
      // End of the lines. 
      
      IF "VAT Calculation Type" = "VAT Calculation Type"::"Sales Tax" THEN BEGIN
      IF TaxJurisdiction.Code <> TaxDetail."Tax Jurisdiction Code" THEN
      ...
      

      Codul de înlocuire

      ...
      "Posting Date","Currency Code","VAT Difference",
      CurrExchRate.ExchangeRate("Posting Date","Currency Code")));
      
      // Add the following lines. 
      IF "VAT Amount (LCY)" <> CalculatedVATAmountLCY THEN
      VATDifferenceLCY := "VAT Amount (LCY)" - CalculatedVATAmountLCY; 
      //End of the lines. 
      
      IF "VAT Calculation Type" = "VAT Calculation Type"::"Sales Tax" THEN BEGIN
      IF TaxJurisdiction.Code <> TaxDetail."Tax Jurisdiction Code" THEN
      ...
      
  7. Creați o nouă funcție locală CalculatedVATAmountLCY în Gen. Unitatea de cod Jnl.-Post Line (12), după cum urmează:

    LOCAL PROCEDURE CalculatedVATAmountLCY@1220009() : Decimal;
    VAR
    CalculatedVATAmtLCY@1220002 : Decimal;
    RoundingPrecisionLCY@1220001 : Decimal;
    RoundingDirectionLCY@1220000 : Text[1];
    BEGIN
    WITH GenJnlLine DO BEGIN
    IF "Currency Code" = '' THEN
    EXIT("VAT Amount (LCY)");
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    IF GLSetup."Round VAT Coeff." THEN
    CalculatedVATAmtLCY :=
    ROUND(
    "Amount (LCY)" * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecisionLCY,
    RoundingDirectionLCY)
    ELSE
    CalculatedVATAmtLCY :=
    ROUND(
    "Amount (LCY)" - ROUND("Amount (LCY)" / (1 + "VAT %" / 100),RoundingPrecisionLCY),
    RoundingPrecisionLCY,
    RoundingDirectionLCY);
    EXIT(CalculatedVATAmtLCY);
    END;
    END;
    

Cerințe preliminare

Trebuie să aveți instalat unul dintre următoarele produse pentru a aplica această remediere rapidă:

  • Versiunea slovacă de Microsoft Dynamics NAV 5.0 Service Pack 1
  • Versiunea cehă de Microsoft Dynamics NAV 5.0 Service Pack 1

În plus, trebuie să aveți instalată o remediere rapidă 2527241 pentru a aplica această remediere rapidă.
Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:

2527241 Valoarea TVA publicată în intrarea TVA este incorectă atunci când utilizați funcționalitatea "Round VAT Coeff" în versiunea cehă de Microsoft Dynamics NAV 5.0 SP1 cu Pachetul de caracteristici 1 instalat

Eliminarea informațiilor

Nu puteți elimina această remediere rapidă.

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.

Notă: Acesta este un articol "PUBLICARE RAPIDĂ" creat direct din cadrul organizației de asistență Microsoft. Informațiile din acest document sunt furnizate ca atare ca răspuns la problemele apărute. Ca urmare a vitezei de punere la dispoziție, materialele pot include erori tipografice și pot fi revizuite în orice moment fără preaviz. Consultați Condițiile de utilizare pentru alte considerente.