Acest articol se aplică la Microsoft Dynamics NAV pentru setările regionale de limbă portugheză (pt).
Simptome
Să presupunem că setați valoarea de Plată reducere tipcalcul cartea discul. Pe linii în caseta de dialog Parametrizare Contabilitate în versiunea portugheză a Microsoft Dynamics NAV 2009. Setați o reducere factură pentru o factură de cumpărare care are mai multe linii cu zecimale. Când se calculează statistici factura de cumpărare, valoarea de reducere a facturii este calculată incorect.
Această problemă se produce în următoarele produse:
-
Portugheză-versiunea de Microsoft Dynamics NAV 2009 R2
-
Portugheză-versiunea de Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Rezolvare
Informații despre remedierea rapidă
Un hotfix acceptat este acum disponibil de la Microsoft. Cu toate acestea, acesta este destinat numai corectării problemei descrise în acest articol. Aplicați-o numai pe sistemele care întâmpină această problemă anume. Această remediere rapidă poate să necesite testare suplimentară. De aceea, dacă nu sunteți grav afectat de această problemă, vă recomandăm să așteptați următorul pachet service pack Microsoft Dynamics NAV 2009 sau versiunea Microsoft Dynamics NAV următoare, care conține această remediere rapidă.
Notă În cazuri speciale, costurile implicate de obicei pentru asistență apeluri pot fi anulate dacă un specialist în asistență tehnică pentru Microsoft Dynamics și produse asociate stabilește că o anumită actualizare va rezolva problema. Se vor aplica costurile uzuale de asistenţă pentru întrebări suplimentare de asistenţă şi pentru probleme ce nu fac obiectul actualizării în cauză.
Informaţii despre instalare
Microsoft furnizează exemple de programare scop ilustrativ, fără nicio garanţie explicită sau implicită. Aceasta include, dar nu se limitează la, garanţiile implicite de vandabilitate sau de potrivire pentru un anumit scop. Acest articol presupune că sunteţi familiarizat cu limbajul de programare care este prezentat şi cu instrumentele utilizate pentru a crea şi a depana proceduri. Specialiștii în asistență Microsoft pot ajuta la explicarea funcționalității unei anumite proceduri. Cu toate acestea, nu vor modifica aceste exemple pentru a furniza funcționalitate suplimentară construi proceduri pentru a răspunde cerințelor dvs. specifice.
Notă Înainte de a instala această remediere rapidă, verificați dacă toți utilizatorii de client Microsoft Dynamics NAV sunt log off sistemul. Aceasta include servicii Microsoft Dynamics NAV Server de aplicație (NAS). Ar trebui să fie doar client utilizatorului care este conectat când implementați această remediere rapidă.
Pentru a implementa această remediere rapidă, trebuie să aibă o licență pentru dezvoltatori.
Vă recomandăm că contul de utilizator în fereastra Conectări Windows sau în fereastra Conectări bază de date se atribuie "SUPER" rolul ID-ul. În cazul în care contul de utilizator nu poate fi atribuit ID-ul "SUPER" rolul, trebuie să verificați că contul de utilizator are următoarele permisiuni:
-
Modify permisiunea pentru obiectul care se va schimba.
-
Permisiunea de executare pentru obiectul de sistem obiect ID 5210 și sistem obiect ID 9015
obiect.
Notă Nu trebuie să aveți drepturi de la magazine de date decât dacă trebuie să efectuați o reparare de date.
Modificări de cod
Notă Întotdeauna test cod remediază într-un mediu controlat înainte de a aplica remedieri pentru computerele de producție.
Pentru a rezolva această problemă, urmați acești pași:
-
Modificați codul din funcția CalculateInvoiceDiscount în vânzări-calcul reducere Codeunit (60) după cum urmează:
Cod existent 1...GLAcc@1110002 : Record 15;
BEGIN
...Cod de înlocuire 1
...GLAcc@1110002 : Record 15;
// Add the following lines.
TempSalesLineRemainder@1110000 : Record 37;
TotRoundedInvDiscAmt@1110001 : Decimal;
TotRoundedPmtDiscAmt@1110003 : Decimal;
// End of the added lines.
BEGIN
...Cod existent 2
...GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
// Delete the following lines.
SalesLine2."Inv. Discount Amount" :=
ROUND(SalesLine2."Line Amount" * CustInvDisc."Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.",
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
SalesLine2."Inv. Discount Amount" :=
ROUND(
(SalesLine2."Line Amount" + SalesLine2."Line Discount Amount" ) *
CustInvDisc."Discount %" / 100,0.01);
END;
// End of the deleted lines.
IF GLSetup."Payment Discount Type" =
...Înlocuirea cod 2
...GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
// Add the following lines.
BEGIN
TempSalesLineRemainder."Inv. Discount Amount" +=
SalesLine2."Line Amount" * CustInvDisc."Discount %" / 100;
SalesLine2."Inv. Discount Amount" :=
CalcRoundedAmt(TempSalesLineRemainder."Inv. Discount Amount",TotRoundedInvDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.",
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
BEGIN
TempSalesLineRemainder."Inv. Discount Amount" +=
(SalesLine2."Line Amount" + SalesLine2."Line Discount Amount" ) *
CustInvDisc."Discount %" / 100;
SalesLine2."Inv. Discount Amount" :=
CalcRoundedAmt(TempSalesLineRemainder."Inv. Discount Amount",TotRoundedInvDiscAmt,0.01);
END;
END;
// End of the added lines.
IF GLSetup."Payment Discount Type" =
...Cod existent 3
...GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.":
// Delete the following lines.
SalesLine2."Pmt. Disc. Given Amount" :=
ROUND(
(SalesLine2."Line Amount" + SalesLine2."Line Discount Amount")
* SalesHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
SalesLine2."Pmt. Disc. Given Amount" :=
ROUND(
(SalesLine2."Line Amount" - SalesLine2."Inv. Discount Amount") *
SalesHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.":
SalesLine2."Pmt. Disc. Given Amount" :=
ROUND(
(SalesLine2."Line Amount" + SalesLine2."Line Discount Amount") *
SalesHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
SalesLine2."Pmt. Disc. Given Amount" :=
ROUND(
(SalesLine2."Line Amount" - SalesLine2."Inv. Discount Amount") *
SalesHeader."Payment Discount %" / 100,0.01);
// End of the deleted lines.
END;
...Cod de înlocuire 3
...GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.":
// Add the following lines.
BEGIN
TempSalesLineRemainder."Pmt. Disc. Given Amount" +=
(SalesLine2."Line Amount" + SalesLine2."Line Discount Amount" ) *
SalesHeader."Payment Discount %" / 100;
SalesLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempSalesLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
BEGIN
TempSalesLineRemainder."Pmt. Disc. Given Amount" +=
(SalesLine2."Line Amount" - SalesLine2."Line Discount Amount" ) *
SalesHeader."Payment Discount %" / 100;
SalesLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempSalesLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.":
BEGIN
TempSalesLineRemainder."Pmt. Disc. Given Amount" +=
(SalesLine2."Line Amount" + SalesLine2."Line Discount Amount" ) *
SalesHeader."Payment Discount %" / 100;
SalesLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempSalesLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
BEGIN
TempSalesLineRemainder."Pmt. Disc. Given Amount" +=
(SalesLine2."Line Amount" - SalesLine2."Line Discount Amount" ) *
SalesHeader."Payment Discount %" / 100;
SalesLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempSalesLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
// End of the added lines.
END;
... -
Creați o funcție în vânzări-calcul reducere Codeunit (60), după cum urmează:
PROCEDURE CalcRoundedAmt@1110000(TotAmt@1110000 : Decimal;VAR TotAmtRnded@1110001 : Decimal;AmountRoundingPrecision@1110002 : Decimal) RndAmt : Decimal;BEGIN
RndAmt := ROUND(TotAmt,AmountRoundingPrecision) - TotAmtRnded;
TotAmtRnded := TotAmtRnded + RndAmt;
END; -
Modificați codul din funcția CalculateInvoiceDiscount în cump.-Calc.Discount Codeunit (70) după cum urmează:
Cod existent 1...GLAcc@1110002 : Record 15;
BEGIN
...Cod de înlocuire 1
...GLAcc@1110002 : Record 15;
// Add the following lines.
TempPurchLineRemainder@1110000 : Record 39;
TotRoundedInvDiscAmt@1110001 : Decimal;
TotRoundedPmtDiscAmt@1110004 : Decimal;
// End of the added lines.
BEGIN
...Cod existent 2
...GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
// Delete the following lines.
PurchLine2."Inv. Discount Amount" :=
ROUND(PurchLine2."Line Amount" * VendInvDisc."Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.",
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
PurchLine2."Inv. Discount Amount" :=
ROUND(
(PurchLine2."Line Amount" + PurchLine2."Line Discount Amount" ) *
VendInvDisc."Discount %" / 100,0.01);
// End of the deleted lines.
END;
...Înlocuirea cod 2
...GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
// Add the following lines.
BEGIN
TempPurchLineRemainder."Inv. Discount Amount" +=
PurchLine2."Line Amount" * VendInvDisc."Discount %" / 100;
PurchLine2."Inv. Discount Amount" :=
CalcRoundedAmt(TempPurchLineRemainder."Inv. Discount Amount",TotRoundedInvDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.",
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
BEGIN
TempPurchLineRemainder."Inv. Discount Amount" +=
(PurchLine2."Line Amount" + PurchLine2."Line Discount Amount" ) *
VendInvDisc."Discount %" / 100;
PurchLine2."Inv. Discount Amount" :=
CalcRoundedAmt(TempPurchLineRemainder."Inv. Discount Amount",TotRoundedInvDiscAmt,0.01);
END;
// End of the added lines.
END;
...Cod existent 3
...GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.":
// Delete the following lines.
PurchLine2."Pmt. Disc. Rcd. Amount" :=
ROUND(
(PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") *
PurchHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
PurchLine2."Pmt. Disc. Rcd. Amount" :=
ROUND(
(PurchLine2."Line Amount" - PurchLine2."Inv. Discount Amount") *
PurchHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.":
PurchLine2."Pmt. Disc. Rcd. Amount" :=
ROUND(
(PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") *
PurchHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
PurchLine2."Pmt. Disc. Rcd. Amount" :=
ROUND(
(PurchLine2."Line Amount" - PurchLine2."Inv. Discount Amount") *
PurchHeader."Payment Discount %" / 100,0.01);
// End of the deleted lines.
END;
...Cod de înlocuire 3
...GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.":
// Add the following lines.
BEGIN
TempPurchLineRemainder."Pmt. Disc. Rcd. Amount" +=
(PurchLine2."Line Amount" + PurchLine2."Line Discount Amount" ) *
PurchHeader."Payment Discount %" / 100;
PurchLine2."Pmt. Disc. Rcd. Amount" :=
CalcRoundedAmt(TempPurchLineRemainder."Pmt. Disc. Rcd. Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
BEGIN
TempPurchLineRemainder."Pmt. Disc. Rcd. Amount" +=
(PurchLine2."Line Amount" - PurchLine2."Line Discount Amount" ) *
PurchHeader."Payment Discount %" / 100;
PurchLine2."Pmt. Disc. Rcd. Amount" :=
CalcRoundedAmt(TempPurchLineRemainder."Pmt. Disc. Rcd. Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.":
BEGIN
TempPurchLineRemainder."Pmt. Disc. Rcd. Amount" +=
(PurchLine2."Line Amount" + PurchLine2."Line Discount Amount" ) *
PurchHeader."Payment Discount %" / 100;
PurchLine2."Pmt. Disc. Rcd. Amount" :=
CalcRoundedAmt(TempPurchLineRemainder."Pmt. Disc. Rcd. Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
BEGIN
TempPurchLineRemainder."Pmt. Disc. Rcd. Amount" +=
(PurchLine2."Line Amount" - PurchLine2."Line Discount Amount" ) *
PurchHeader."Payment Discount %" / 100;
PurchLine2."Pmt. Disc. Rcd. Amount" :=
CalcRoundedAmt(TempPurchLineRemainder."Pmt. Disc. Rcd. Amount",TotRoundedPmtDiscAmt,0.01);
END;
// End of the added lines.
END;
... -
Creați o funcție în cump.-Calc.Discount Codeunit (70) după cum urmează:
PROCEDURE CalcRoundedAmt@1110000(TotAmt@1110000 : Decimal;VAR TotAmtRnded@1110001 : Decimal;AmountRoundingPrecision@1110002 : Decimal) RndAmt : Decimal;BEGIN
RndAmt := ROUND(TotAmt,AmountRoundingPrecision) - TotAmtRnded;
TotAmtRnded := TotAmtRnded + RndAmt;
END; -
Modificați codul din funcția CalculateInvoiceDiscount în calcul Service reducere Codeunit (5950) după cum urmează:
Cod existent 1...GLAcc@1110002 : Record 15;
BEGIN
...Cod de înlocuire 1
...GLAcc@1110002 : Record 15;
// Add the following lines.
TempServLineRemainder@1110000 : Record 5902;
TotRoundedInvDiscAmt@1110001 : Decimal;
TotRoundedPmtDiscAmt@1110003 : Decimal;
// End of the added lines.
BEGIN
...Cod existent 2
...GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
// Delete the following lines.
ServiceLine2."Inv. Discount Amount" :=
ROUND(ServiceLine2."Line Amount" * CustInvDisc."Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.",
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
ServiceLine2."Inv. Discount Amount" :=
ROUND(
(ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount" ) *
CustInvDisc."Discount %" / 100,0.01);
END;
// End of the deleted lines.
IF GLSetup."Payment Discount Type" =
...Înlocuirea cod 2
...GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
// Add the following lines.
BEGIN
TempServLineRemainder."Inv. Discount Amount" +=
ServiceLine2."Line Amount" * CustInvDisc."Discount %" / 100;
ServiceLine2."Inv. Discount Amount" :=
CalcRoundedAmt(TempServLineRemainder."Inv. Discount Amount",TotRoundedInvDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.",
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
BEGIN
TempServLineRemainder."Inv. Discount Amount" +=
(ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount" ) *
CustInvDisc."Discount %" / 100;
ServiceLine2."Inv. Discount Amount" :=
CalcRoundedAmt(TempServLineRemainder."Inv. Discount Amount",TotRoundedInvDiscAmt,0.01);
END;
END;
// End of the added lines.
IF GLSetup."Payment Discount Type" =
...Cod existent 3
...GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.":
// Delete the following lines.
ServiceLine2."Pmt. Disc. Given Amount" :=
ROUND(
(ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount")
* ServHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
ServiceLine2."Pmt. Disc. Given Amount" :=
ROUND(
(ServiceLine2."Line Amount" - ServiceLine2."Inv. Discount Amount") *
ServHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.":
ServiceLine2."Pmt. Disc. Given Amount" :=
ROUND(
(ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount") *
ServHeader."Payment Discount %" / 100,0.01);
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
ServiceLine2."Pmt. Disc. Given Amount" :=
ROUND(
(ServiceLine2."Line Amount" - ServiceLine2."Inv. Discount Amount") *
ServHeader."Payment Discount %" / 100,0.01);
// End of the deleted lines.
END;Cod de înlocuire 3
...GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.":
// Add the following lines.
BEGIN
TempServLineRemainder."Pmt. Disc. Given Amount" +=
(ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount" ) *
ServHeader."Payment Discount %" / 100;
ServiceLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempServLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.":
BEGIN
TempServLineRemainder."Pmt. Disc. Given Amount" +=
(ServiceLine2."Line Amount" - ServiceLine2."Line Discount Amount" ) *
ServHeader."Payment Discount %" / 100;
ServiceLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempServLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.":
BEGIN
TempServLineRemainder."Pmt. Disc. Given Amount" +=
(ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount" ) *
ServHeader."Payment Discount %" / 100;
ServiceLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempServLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.":
BEGIN
TempServLineRemainder."Pmt. Disc. Given Amount" +=
(ServiceLine2."Line Amount" - ServiceLine2."Line Discount Amount" ) *
ServHeader."Payment Discount %" / 100;
ServiceLine2."Pmt. Disc. Given Amount" :=
CalcRoundedAmt(TempServLineRemainder."Pmt. Disc. Given Amount",TotRoundedPmtDiscAmt,0.01);
END;
// End of the added lines.
END;
... -
Creați o funcție în calcul Service reducere Codeunit (5950) după cum urmează:
PROCEDURE CalcRoundedAmt@1110000(TotAmt@1110000 : Decimal;VAR TotAmtRnded@1110001 : Decimal;AmountRoundingPrecision@1110002 : Decimal) RndAmt : Decimal;BEGIN
RndAmt := ROUND(TotAmt,AmountRoundingPrecision) - TotAmtRnded;
TotAmtRnded := TotAmtRnded + RndAmt;
END;
Cerințe preliminare
Trebuie să aveți unul dintre următoarele produse instalate pentru a aplica această remediere rapidă:
-
Portugheză-versiunea de Microsoft Dynamics NAV 2009 R2
-
Portugheză-versiunea de Microsoft Dynamics NAV 2009 Service Pack 1
Eliminare informaţii
Nu se poate elimina această remediere rapidă.
Stare
Microsoft a confirmat că aceasta este o problemă cu produsele Microsoft enumerate în secţiunea „Se aplică la".
Notă Acesta este un articol "rapid publicat" creat direct în cadrul organizației de asistență Microsoft. Informațiile conținute în acest document sunt furnizate ca răspuns la problemele care apar. Ca rezultat al vitezei în a-l face disponibil, materialele pot include erori tipografice și pot fi revizuite în orice moment, fără notificare. Consultați Termenii de utilizarepentru alte considerații.