Tento článek se týká aplikace Microsoft Dynamics NAV pro národní jazyk Maďarština (hu).
Příznaky
Předpokládejme, že používáte metodu platby s parametrem Přesnost zaokrouhlení faktury v maďarské verzi aplikace Microsoft Dynamics NAV 2009 R2. Typ zaokrouhlení je navíc nastavena na nejbližší. V takovém případě zaokrouhlování není správná a konečná částka je nesprávná.
Řešení
Informace o opravě hotfix
Podporovaná oprava hotfix je nyní k dispozici od společnosti Microsoft. Však je určena pouze k odstranění problému popsaného v tomto článku. Použijte ji pouze u systémů, ve kterých dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Proto pokud jste závažně tento problém, doporučujeme počkat na další aktualizaci service pack produktu Microsoft Dynamics NAV 2009 nebo další verze produktu Microsoft Dynamics NAV, která obsahuje tuto opravu hotfix.
Poznámka: Ve zvláštních případech poplatky, které jsou třeba obvykle zaplatit za telefonní hovory mohou být stornovány, jestliže pracovník technické podpory společnosti Microsoft Dynamics a souvisejících produktů Určuje, že konkrétní aktualizace odstraní váš problém. Výdaje na technickou podporu použije dalších otázek a problémů, které nelze vyřešit konkrétní aktualizací.
Informace o instalaci
Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo odvozené. To zahrnuje, ale není omezen pouze na předpokládané záruky obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu. Nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků.
Poznámka: Před instalací této opravy hotfix ověřte, že všichni uživatelé klienta Microsoft Navision odhlášeni systému. To zahrnuje uživatele klienta Microsoft Navision Application Services (NAS). Je třeba klienta pouze uživatel přihlášený při implementaci opravy hotfix.
Chcete-li implementovat tuto opravu hotfix, musí mít licenci vývojáře.
Doporučujeme, aby uživatelský účet v okně přihlášení systému Windows nebo v okně přihlášení databáze přidělí "SUPER" ID role. Pokud uživatelský účet nelze přiřadit ID role "SUPER", musíte ověřit, že uživatelský účet má následující oprávnění:
-
Změnit oprávnění pro objekt, který budete měnit.
-
Oprávnění ke spuštění pro System Object ID 5210 objekt a System Object ID 9015 objekt.
Poznámka: Nemáte práva k úložištím dat. Pokud nebudete provádět opravu dat.
Změny kódu
Poznámka: Vždy otestujte opravy kódu v kontrolovaném prostředí před instalací opravy v provozních počítačích.
Chcete-li vyřešit tento problém, postupujte takto:
-
Přidat nový PrepmtAmtToDeduct (PricesIncludingVAT: Boolean; PrepaymentPct: Desetinné číslo): desítkové funkce v tabulce Prodejní řádek (37). Chcete-li to provést, postupujte takto:
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: VATFactor
-
Datový typ: desetinné číslo
-
-
Přidejte následující kód:
IF PricesIncludingVAT THENVATFactor := (1 + "VAT %" / 100)
ELSE
VATFactor := 1;
EXIT(
ROUND(
ROUND(
ROUND(
ROUND("Unit Price" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
(PrepaymentPct / 100) / VATFactor,Currency."Amount Rounding Precision") * VATFactor,Currency."Amount Rounding Precision"));
-
-
Změňte CalcPrepaymentToDeduct funkce v tabulce Prodejní řádek (37). Chcete-li to provést, postupujte takto:
-
Odstraňte následující místní proměnné:
PrepmtPct: Decimal;AbsoluteAdvCorrection: Boolean;
-
Přidejte následující místní proměnné:
TotalPrepmtAmtToDeduct: Decimal;HundredPct: Decimal;
-
Nahraďte kód následujícím způsobem:
IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINTotalPrepmtAmtToDeduct := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";
GetSalesHeader;
IF SalesHeader."Prepayment Type" = SalesHeader."Prepayment Type"::Advance THEN BEGIN
VATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");
CASE VATPostingSetup."Adv. Invoice Correction Type" OF
VATPostingSetup."Adv. Invoice Correction Type"::Percentage:
"Prepmt Amt to Deduct" :=
ROUND("Qty. to Invoice" / (Quantity - "Quantity Invoiced") *
TotalPrepmtAmtToDeduct,Currency."Amount Rounding Precision");
VATPostingSetup."Adv. Invoice Correction Type"::Absolute:
BEGIN
HundredPct := 100;
"Prepmt Amt to Deduct" := PrepmtAmtToDeduct(SalesHeader."Prices Including VAT",HundredPct);
IF "Prepmt Amt to Deduct" > TotalPrepmtAmtToDeduct THEN
"Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct;
END;
VATPostingSetup."Adv. Invoice Correction Type"::"Fully Invoiced":
IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN
"Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct
ELSE
"Prepmt Amt to Deduct" := 0;
END;
END ELSE
"Prepmt Amt to Deduct" := PrepmtAmtToDeduct(SalesHeader."Prices Including VAT","Prepayment %");
END ELSE
"Prepmt Amt to Deduct" := 0
-
-
Přidat nový PrepmtAmtToDeduct (PricesIncludingVAT: Boolean; PrepaymentPct: Desetinné číslo): desítkové funkce v tabulce Nákupní řádek (39). Chcete-li to provést, postupujte takto:
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: VATFactor
-
Datový typ: desetinné číslo
-
-
Přidejte následující kód:
IF PricesIncludingVAT THENVATFactor := (1 + "VAT %" / 100)
ELSE
VATFactor := 1;
EXIT(
ROUND(
ROUND(
ROUND(
ROUND("Unit Cost" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
(PrepaymentPct / 100) / VATFactor,Currency."Amount Rounding Precision") * VATFactor,Currency."Amount Rounding Precision"));
-
-
Změňte CalcPrepaymentToDeduct funkce v tabulce Prodejní řádek (37). Chcete-li to provést, postupujte takto:
-
Odstraňte následující místní proměnné:
PrepmtPct: Decimal;AbsoluteAdvCorrection: Boolean;
-
Přidejte následující místní proměnné:
TotalPrepmtAmtToDeduct: Decimal;HundredPct: Decimal;
-
Nahraďte kód následujícím způsobem:
IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINTotalPrepmtAmtToDeduct := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";
GetPurchHeader;
IF PurchHeader."Prepayment Type" = PurchHeader."Prepayment Type"::Advance THEN BEGIN
VATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");
CASE VATPostingSetup."Adv. Invoice Correction Type" OF
VATPostingSetup."Adv. Invoice Correction Type"::Percentage:
"Prepmt Amt to Deduct" :=
ROUND("Qty. to Invoice" / (Quantity - "Quantity Invoiced") *
TotalPrepmtAmtToDeduct,Currency."Amount Rounding Precision");
VATPostingSetup."Adv. Invoice Correction Type"::Absolute:
BEGIN
HundredPct := 100;
"Prepmt Amt to Deduct" := PrepmtAmtToDeduct(PurchHeader."Prices Including VAT",HundredPct);
IF "Prepmt Amt to Deduct" > TotalPrepmtAmtToDeduct THEN
"Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct;
END;
VATPostingSetup."Adv. Invoice Correction Type"::"Fully Invoiced":
IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN
"Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct
ELSE
"Prepmt Amt to Deduct" := 0;
END;
END ELSE
"Prepmt Amt to Deduct" := PrepmtAmtToDeduct(PurchHeader."Prices Including VAT","Prepayment %");
END ELSE
"Prepmt Amt to Deduct" := 0
-
-
Změňte kód ve funkci InitInvoiceRoundingLine v procedura prodeje Post Prepayments (442) takto:
Existující kód...IF SalesHeader."Currency Code" = '' THEN
Currency.InitRoundingPrecision
ELSE
Currency.GET(SalesHeader."Currency Code");
...Změněný kód
...IF SalesHeader."Currency Code" = '' THEN BEGIN
Currency.SetDocumentType(SalesHeader."Document Type");
Currency.SetPaymentMethod(SalesHeader."Payment Method Code");
Currency.InitRoundingPrecision;
END ELSE
Currency.GET(SalesHeader."Currency Code");
... -
Změňte kód ve funkci InsertLineRelation v procedura prodeje Post Prepayments (442) takto:
Existující kód...IF SalesHeader."Currency Code" = '' THEN
Currency.InitRoundingPrecision
ELSE
Currency.GET(SalesHeader."Currency Code");
...Změněný kód
...IF SalesHeader."Currency Code" = '' THEN BEGIN
Currency.SetDocumentType(SalesHeader."Document Type");
Currency.SetPaymentMethod(SalesHeader."Payment Method Code");
Currency.InitRoundingPrecision;
END ELSE
Currency.GET(SalesHeader."Currency Code");
... -
Změňte kód ve funkci InsertInvoiceRounding v procedura prodeje Post Prepayments (442) takto:
Existující kód..."G/L Account No." := SalesLine."No.";
"Dimension Entry No." := InsertInDimBuffer(TempDocDim,SalesLine);
...Změněný kód
..."G/L Account No." := SalesLine."No.";
// Add the following line
Description := SalesLine.Description;
"Dimension Entry No." := InsertInDimBuffer(TempDocDim,SalesLine);
... -
Změňte kód ve funkci InsertInvoiceRounding v nákupu Post Prepayments procedura (444) takto:
Existující kód..."G/L Account No." := PurchLine."No.";
"Dimension Entry No." := InsertInDimBuffer(TempDocDim,PurchLine);
...Změněný kód
..."G/L Account No." := PurchLine."No.";
// Add the following line.
Description := PurchLine.Description;
"Dimension Entry No." := InsertInDimBuffer(TempDocDim,PurchLine);
... -
Změňte kód ve funkci InitInvoiceRoundingLine v nákupu Post Prepayments procedura (444) takto:
Existující kód...IF PurchHeader."Currency Code" = '' THEN
Currency.InitRoundingPrecision
ELSE
Currency.GET(PurchHeader."Currency Code");
...Změněný kód
...IF PurchHeader."Currency Code" = '' THEN BEGIN
Currency.SetDocumentType(PurchHeader."Document Type");
Currency.SetPaymentMethod(PurchHeader."Payment Method Code");
Currency.InitRoundingPrecision;
END
ELSE
Currency.GET(PurchHeader."Currency Code");
... -
Změňte kód ve funkci InsertLineRelation v nákupu Post Prepayments procedura (444) takto:
Existující kód...IF PurchHeader."Currency Code" = '' THEN
Currency.InitRoundingPrecision
ELSE
Currency.GET(PurchHeader."Currency Code");
...Změněný kód
...IF PurchHeader."Currency Code" = '' THEN BEGIN
Currency.SetDocumentType(PurchHeader."Document Type");
Currency.SetPaymentMethod(PurchHeader."Payment Method Code");
Currency.InitRoundingPrecision;
END
ELSE
Currency.GET(PurchHeader."Currency Code");
... -
Přidat nový LineRelationExists (LetterLine: 26586 záznam): Boolean funkce v procedura prodeje Post záloh (26585). Chcete-li to provést, postupujte takto:
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: LineRelation
-
Datový typ: záznam 26592
-
-
Přidejte následující kód:
WITH LineRelation DO BEGINSETRANGE(Type,Type::Sale);
SETRANGE("Letter No.",LetterLine."Letter No.");
SETRANGE("Letter Line No.",LetterLine."Line No.");
EXIT(NOT ISEMPTY);
END;
-
-
Přidat nový UpdateAmountToApply (LetterLine: 26592 záznamu; DPH LinkedAdvanceEntry: Záznam 21) funkce v procedura prodeje Post záloh (26585). Chcete-li to provést, postupujte takto:
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: odkaz
-
Datový typ: záznam 26590
-
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: CustLedgEntry
-
Datový typ: záznam 21
-
-
Přidejte následující kód:
WITH Link DO BEGINSETRANGE("Entry Type","Entry Type"::"Link To Letter");
SETRANGE("Document No.",LetterLine."Letter No.");
SETRANGE("Line No.",LetterLine."Line No.");
IF FINDSET THEN
REPEAT
IF CustLedgEntry.GET("CV Ledger Entry No.") THEN BEGIN
CustLedgEntry.CALCFIELDS("Remaining Amount");
IF CustLedgEntry."Remaining Amount" <> -LinkedAdvanceEntry."Amount to Apply" THEN
IF LinkedAdvanceEntry.GET(CustLedgEntry."Entry No.") THEN BEGIN
LinkedAdvanceEntry."Amount to Apply" := LinkedAdvanceEntry."Amount to Apply" + Amount;
LinkedAdvanceEntry.MODIFY;
END ELSE BEGIN
LinkedAdvanceEntry := CustLedgEntry;
LinkedAdvanceEntry."Amount to Apply" := Amount;
LinkedAdvanceEntry."Currency Code" := "Currency Code";
LinkedAdvanceEntry.INSERT;
END;
END;
UNTIL NEXT = 0;
END;
-
-
Přidat nový AddRoundingLine (LetterLine: 26586 záznamu; SalesInvHeader: Záznam 112; VAR LinkedAdvanceEntry: Záznam 21; LastLetterNo: Kód [20]): DeductedAmount: desetinné číslo
pracovat v procedura prodeje Post záloh (26585) takto:LetterLine.SETRANGE("Letter No.",LetterLine."Letter No.");LetterLine.SETFILTER("Line No.",'>%1',LetterLine."Line No.");
LetterLine.SETFILTER("Amount To Deduct",'<>0');
IF LetterLine.FINDSET(TRUE) THEN
REPEAT
IF NOT LineRelationExists(LetterLine) THEN BEGIN
DeductedAmount := DeductedAmount + LetterLine."Amount To Deduct";
LetterLine."Amount Deducted" := LetterLine."Amount Deducted" + LetterLine."Amount To Deduct";
LetterLine."Amount To Deduct" := 0;
LetterLine.MODIFY(TRUE);
UpdateAmountToApply(LetterLine,LinkedAdvanceEntry);
AddPrepmtSalesInvLine(LetterLine,SalesInvHeader,LetterLine."Amount Deducted",LetterLine."VAT Amount",LastLetterNo);
END;
UNTIL LetterLine.NEXT = 0; -
Změňte kód ve funkci PostInvoiceCorrection v procedura prodeje Post záloh (26585) takto:
Existující kód...FullyDeducted := FullyDeductedCustPrepmt(SalesLine);
// Delete the following lines.
IF FullyDeducted THEN
DeductRndLetterLines(SalesHeader."No.");
// End of thelines.
...Změněný kód
...FullyDeducted := FullyDeductedCustPrepmt(SalesLine);
... -
Změňte kód ve funkci DeductRndLetterLines v procedura prodeje Post záloh (26585) takto:
Existující kód...AddPrepmtSalesInvLine(LetterLine,SalesInvHeader,AmountToDeduct,VATAmount,LastLetterNo);
END;
UNTIL LineRelation.NEXT = 0;Změněný kód
...AddPrepmtSalesInvLine(LetterLine,SalesInvHeader,AmountToDeduct,VATAmount,LastLetterNo);
// Add the following lines.
IF SalesLine."Prepmt Amt to Deduct" + SalesLine."Prepmt Amt Deducted" = SalesLine."Prepmt. Amt. Inv." THEN
InvoicedAmount := InvoicedAmount + AddRoundingLine(LetterLine,SalesInvHeader,LinkedAdvanceEntry,LastLetterNo);
// End of the lines.
END;
UNTIL LineRelation.NEXT = 0;
... -
Přidat nový LineRelationExists (LetterLine: záznam 26588) funkce v procedura účtovat nákupní zálohy (26586). Chcete-li to provést, postupujte takto:
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: LineRelation
-
Datový typ: záznam 26592
-
-
Přidejte následující kód:
WITH LineRelation DO BEGINSETRANGE(Type,Type::Purchase);
SETRANGE("Letter No.",LetterLine."Letter No.");
SETRANGE("Letter Line No.",LetterLine."Line No.");
EXIT(NOT ISEMPTY);
END;
-
-
Přidat nový UpdateAmountToApply (LetterLine: záznam 26588; VAR LinkedAdvanceEntry: Záznam 25) funkce v procedura účtovat nákupní zálohy (26586). Chcete-li to provést, postupujte takto:
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: LetterLine
-
Datový typ: záznam 26588
-
-
Přidat místní proměnné a proměnné zadejte následujícím způsobem:
-
Název: VendorLedgEntry
-
Datový typ: záznam 25
-
-
Přidejte následující kód:
WITH Link DO BEGINSETRANGE("Entry Type","Entry Type"::"Link To Letter");
SETRANGE("Document No.",LetterLine."Letter No.");
SETRANGE("Line No.",LetterLine."Line No.");
IF FINDSET THEN
REPEAT
IF VendorLedgEntry.GET("CV Ledger Entry No.") THEN BEGIN
VendorLedgEntry.CALCFIELDS("Remaining Amount");
IF VendorLedgEntry."Remaining Amount" <> -LinkedAdvanceEntry."Amount to Apply" THEN
IF LinkedAdvanceEntry.GET(VendorLedgEntry."Entry No.") THEN BEGIN
LinkedAdvanceEntry."Amount to Apply" := LinkedAdvanceEntry."Amount to Apply" + Amount;
LinkedAdvanceEntry.MODIFY;
END ELSE BEGIN
LinkedAdvanceEntry := VendorLedgEntry;
LinkedAdvanceEntry."Amount to Apply" := Amount;
LinkedAdvanceEntry."Currency Code" := "Currency Code";
LinkedAdvanceEntry.INSERT;
END;
END;
UNTIL NEXT = 0;
END;
-
-
Přidat nový AddRoundingLine (LetterLine: záznam 26588; PurchInvHeader: Záznam 122; VAR LinkedAdvanceEntry: Záznam 25; LastLetterNo: Kód [20]): DeductedAmount: desítkové pracovat v procedura účtovat nákupní zálohy (26586) takto:
LetterLine.SETRANGE("Letter No.",LetterLine."Letter No.");LetterLine.SETFILTER("Line No.",'>%1',LetterLine."Line No.");
LetterLine.SETFILTER("Amount To Deduct",'<>0');
IF LetterLine.FINDSET(TRUE) THEN
REPEAT
IF NOT LineRelationExists(LetterLine) THEN BEGIN
DeductedAmount := DeductedAmount + LetterLine."Amount To Deduct";
LetterLine."Amount Deducted" := LetterLine."Amount Deducted" + LetterLine."Amount To Deduct";
LetterLine."Amount To Deduct" := 0;
LetterLine.MODIFY(TRUE);
UpdateAmountToApply(LetterLine,LinkedAdvanceEntry);
AddPrepmtPurchInvLine(LetterLine,PurchInvHeader,LetterLine."Amount Deducted",LetterLine."VAT Amount",LastLetterNo);
END;
UNTIL LetterLine.NEXT = 0; -
Změňte kód ve funkci PostInvoiceCorrection v procedura účtovat nákupní zálohy (26586) takto:
Existující kód...FullyDeducted := FullyDeductedVendPrepmt(PurchLine);
// Delete the following lines.
IF FullyDeducted THEN
DeductRndLetterLines(PurchHeader."No.");
// End of the lines.
PurchLine.SETFILTER("Prepmt Amt to Deduct",'<>0');
...Změněný kód
...FullyDeducted := FullyDeductedVendPrepmt(PurchLine);
PurchLine.SETFILTER("Prepmt Amt to Deduct",'<>0');
... -
Odstranění funkce DeductRndLetterLines v procedura účtovat nákupní zálohy (26586).
-
Změňte kód ve funkci PostInvLineCorrection v procedura účtovat nákupní zálohy (26586) takto:
Existující kód...AddPrepmtPurchInvLine(LetterLine,PurchInvHeader,AmountToDeduct,VATAmount,LastLetterNo);
END;
UNTIL LineRelation.NEXT = 0;
...Změněný kód
...AddPrepmtPurchInvLine(LetterLine,PurchInvHeader,AmountToDeduct,VATAmount,LastLetterNo);
// Add the following lines.
IF PurchLine."Prepmt Amt to Deduct" + PurchLine."Prepmt Amt Deducted" = PurchLine."Prepmt. Amt. Inv." THEN
InvoicedAmount := InvoicedAmount + AddRoundingLine(LetterLine,PurchInvHeader,LinkedAdvanceEntry,LastLetterNo);
// End of the lines.
END;
UNTIL LineRelation.NEXT = 0;
...
Předpoklady
Maďarské verzi aplikace Microsoft Dynamics NAV 2009 R2 nainstalovali tuto opravu hotfix, musí mít.
Informace o odinstalaci
Tato oprava hotfix nelze odebrat.
Stav
Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".
Poznámka: Toto je článek "Rychlé publikování" vytvářen přímo v rámci odborné pomoci společnosti Microsoft. Informace obsažené v tomto dokumentu jsou poskytovány tak, jak je v reakci na vznikající problémy. V důsledku rychlosti v jeho zpřístupnění materiály, mohou obsahovat typografické chyby a mohou být upraveny kdykoli bez předchozího upozornění. Viz Podmínky použití pro další aspekty.