Ovaj se članak odnosi na regionalnu shemu sustava Microsoft Dynamics NAV za indijski jezik.
Simptomi
Pretpostavimo da imate narudžbu s uključenim porezom na cijenu u indijskoj verziji sustava Microsoft Dynamics NAV 2009. Kada pokrenete funkciju Izračun vrijednosti strukture , vrijednosti Inv. Iznos popusta, Jedinična cijena bez PDV-a i Iznos retka bez PDV-a nisu točne.
Taj se problem pojavljuje u sljedećim proizvodima:
- Indijska verzija sustava Microsoft Dynamics NAV 2009 R2
- Indijska verzija sustava Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Rješenje
Informacije o hitnom popravku
Microsoft sada nudi podržani hitni popravak. No njegova je namjena samo ispravljanje problema opisanog u ovom članku. Primijenite ga samo na sustave koji imaju taj specifični problem. Ovaj hitni popravak može proći dodatna testiranja. Stoga, ako se ovaj problem ne odnosi ozbiljno, preporučujemo da pričekate sljedeći servisni paket za Microsoft Dynamics NAV ili sljedeću verziju sustava Microsoft Dynamics NAV koja sadrži ovaj hitni popravak.
Napomena: U posebnim slučajevima, ako stručnjak tehničke podrške za Microsoft Dynamics i povezane proizvode utvrdi da određeno ažuriranje može riješiti problem, poziv službi podrške može biti besplatan. Uobičajene cijene poziva službi za podršku primjenjuju se na dodatna pitanja i probleme koje nemaju veze s pripadnom nadopunom.
Informacije o instalaciji
Microsoft daje primjere programiranja samo za ilustraciju, bez jamstva, bilo izričitog ili prešutnog. To uključuje, bez ograničenja, implicitna jamstva utrživosti ili prikladnosti za određenu svrhu. U članku se podrazumijeva da ste upoznati s programskim jezikom koji se pokazuje te s alatima koji se koriste za stvaranje i ispravljanje pogrešaka procedura. Microsoftovi inženjeri za podršku mogu vam pomoći objasniti funkcionalnost određene procedure, no neće mijenjati te primjere radi pružanja dodatne funkcionalnosti ili konstruirati procedure koji zadovoljavaju vaše specifične zahtjeve.
Napomena Prije nego što instalirate ovaj hitni popravak, provjerite jesu li svi korisnici Microsoft Navision klijenta odjavljeni sa sustava. To obuhvaća korisnike klijentskih usluga Microsoft Navision Application Services (NAS). Trebali biste biti jedini klijentski korisnik prijavljen na vrijeme implementacije ovog hitnog popravka.
Da biste implementirali ovaj hitni popravak, morate imati licencu za razvojne inženjere.
Preporučujemo da se korisničkom računu u prozoru Prijave u sustav Windows ili u prozoru Prijave u bazu podataka dodijeli ID uloge "SUPER". Ako korisničkom računu nije moguće dodijeliti ID uloge "SUPER", morate provjeriti ima li korisnički račun sljedeće dozvole:
- Dozvola za izmjenu objekta koji ćete mijenjati.
- Dozvola za izvršavanje za objekt System Object ID 5210 i za objekt System Object ID 9015
Napomena: nemate pravo na spremišta podataka, osim ako morate popraviti podatke.
Promjene koda
Napomena: uvijek testirajte popravke koda u kontroliranom okruženju prije primjene popravaka na proizvodnim računalima.
Da biste riješili taj problem, učinite sljedeće:
Promijenite kod u okidaču Popust retka % - NaProvjeri valjanost u tablici Prodajni redak (37) na sljedeći način:
Postojeći 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. ...Zamjenski kôd
... "Line Discount %" := 100; "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100, Currency."Amount Rounding Precision"); ...Promijenite kod u okidaču Iznos popusta retka - NaProvjeri valjanost u tablici Redak prodaje (37) na sljedeći način:
Postojeći 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; ...Zamjenski kôd
... 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; ...Kod u funkciji GetSalesPriceExclusiveTaxes u tablici Prodajni redak (37) promijenite na sljedeći način:
Postojeći 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 ...Zamjenski kôd
... IF StrOrderDetails."Include Base" THEN BaseAmountVariable := BaseAmountVariable + Quantity; IF SalesHeader."Currency Factor" <> 0 THEN ...Kod u funkciji CalculateStructuresPIT u tablici Prodajni redak (37) promijenite na sljedeći način:
Postojeći 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. ...Zamjenski kôd
... SalesLine.MODIFY; ...Promijenite kod u funkciji UpdateSalesLinesPIT u tablici Prodajni redak (37) na sljedeći način:
Postojeći kod... "Service Tax Amount" + "Service Tax eCess Amount" + "Service Tax SHE Cess Amount"; MODIFY; ...Zamjenski kôd
... "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; ...Kod u funkciji ValidateUnitPrice u tablici Prodajni redak (37) promijenite na sljedeći način:
Postojeći 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; ...Zamjenski kôd
... "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; ...Promijenite kod u funkciji DivideAmount u prodaji – poštanska brojjedinica (80) na sljedeći način:
Postojeći 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"; ...Zamjenski kod 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"; ...Postojeći 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; ...Zamjenski kod 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; ...Promijenite kod u funkciji RoundAmount u prodaji – Poštanski broj Jedinica (80) na sljedeći način:
Postojeći kod... TotalSalesLineLCY."Amount To Customer"; "Charges To Customer" := ...Zamjenski kôd
... 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" := ...Promijenite kod u funkciji ReverseAmount u prodaji – poštanska brojjedinica (80) na sljedeći način:
Postojeći kod... "Amount To Customer" := -"Amount To Customer"; "Charges To Customer" := -"Charges To Customer"; ...Zamjenski kôd
... "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"; ...Promijenite kod u funkciji FakturaUPITRounding u prodaji – poštanska brojjedinica (80) na sljedeći način:
Postojeći kod 1... EXIT; // Delete the following line. UPITRoundingAmount := TotalSalesLine."Total UPIT Amount" - ROUND(TotalSalesLine."Amount To Customer UPIT"); IF UPITRoundingAmount <> 0 THEN BEGIN ...Zamjenski kod 1
... EXIT; // Add the following line. UPITRoundingAmount := TotalSalesLine."Amount To Customer UPIT" - ROUND(TotalSalesLine."Amount To Customer UPIT"); IF UPITRoundingAmount <> 0 THEN BEGIN ...Postojeći kod 2
... "UPIT Rounding Inserted" := TRUE; // Delete the following line. IF SalesHeader."Prices Including VAT" THEN VALIDATE("Unit Price",UPITRoundingAmount) ...Zamjenski kod 2
... "UPIT Rounding Inserted" := TRUE; // Add the following line. IF SalesHeader."Price Inclusive of Taxes" THEN VALIDATE("Unit Price",UPITRoundingAmount) ...
Preduvjeti
Da biste primijenili ovaj hitni popravak, morate imati instaliran neki od sljedećih proizvoda:
- Indijska verzija sustava Microsoft Dynamics NAV 2009 R2
- Indijska verzija sustava Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Podaci o uklanjanju
Ovaj hitni popravak ne možete ukloniti.
Status
Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.
Napomena: Ovo je članak "FAST PUBLISH" stvoren izravno u Microsoftovoj ustanovi za podršku. Ovdje sadržane informacije pružaju se takve kakve jesu kao odgovor na nove probleme. Kao rezultat brzine stavljanja na raspolaganje, materijali mogu sadržavati tipografske pogreške i mogu se revidirati u bilo kojem trenutku bez prethodne najave. Dodatne napomene potražite u Uvjetima korištenja .