Fehlermeldung „Die Transaktion kann nicht abgeschlossen werden, da es zu Inkonsistenzen in der Sachpostentabelle kommt", wenn Sie eine Vorauszahlungsrechnung in Microsoft Dynamics NAV 2009 buchen
Dieser Artikel gilt für Microsoft Dynamics NAV für alle Länder und alle Sprachgebietsschemas.
Symptome
Angenommen, Sie legen den Wert 0,001 im Feld „Betragsrundungsgenauigkeit" für eine Fremdwährung in einem Unternehmen fest. Wenn Sie eine Vorauszahlungsrechnung buchen, die die Fremdwährung verwendet, erhalten Sie die folgende Fehlermeldung:
Die Transaktion kann nicht abgeschlossen werden, da dies zu Inkonsistenzen in der Sachpostentabelle führt. Überprüfen Sie, wo und wie die CONSISTENT-Funktion in der Transaktion verwendet wird, um die Fehlerursache zu finden. Kontaktieren Sie Ihren Systemadministrator.
Tabellen können bei umfangreichen Aufgaben, wie z. B. Buchungen, als inkonsistent markiert werden. Dadurch wird verhindert, dass Daten fehlerhaft aktualisiert werden.
Der Konsistenzfehler tritt auf, weil Soll und Haben für die zusätzliche Berichtswährung (ARC) nicht übereinstimmen. Daher stimmen Soll und Haben für die lokale Währung (LCY) wie erwartet überein.
Dieses Problem tritt auf, wenn das Unternehmen über vorhandene Einträge verfügt.
Dieses Problem tritt bei folgenden Produkten auf:
Microsoft Dynamics NAV 2009 R2
Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Auflösung
Hotfix-Informationen
Ein unterstützter Hotfix ist jetzt von Microsoft verfügbar. Es dient jedoch lediglich der Behebung des in diesem Artikel beschriebenen Problems. Wenden Sie es nur auf Systeme an, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise weiteren Tests unterzogen. Wenn Sie von diesem Problem nicht schwerwiegend betroffen sind, empfehlen wir Ihnen daher, auf das nächste Microsoft Dynamics NAV 2009 Service Pack oder die nächste Microsoft Dynamics NAV-Version zu warten, die diesen Hotfix enthält.
Hinweis: In besonderen Fällen können die Gebühren, die normalerweise für Supportanrufe anfallen, storniert werden, wenn ein Mitarbeiter des technischen Supports für Microsoft Dynamics und verwandte Produkte feststellt, dass ein bestimmtes Update Ihr Problem lösen wird. Für zusätzliche Supportfragen und Probleme, die für das jeweilige Update nicht in Frage kommen, fallen die üblichen Supportkosten an.
Installationsinformationen
Microsoft stellt Programmierbeispiele nur zur Veranschaulichung zur Verfügung, ohne ausdrückliche oder stillschweigende Gewährleistung. Dazu gehören unter anderem stillschweigende Garantien der Marktgängigkeit oder Eignung für einen bestimmten Zweck. In diesem Artikel wird davon ausgegangen, dass Sie mit der demonstrierten Programmiersprache und den Tools vertraut sind, die zum Erstellen und Debuggen von Prozeduren verwendet werden. Microsoft-Supporttechniker können dabei helfen, die Funktionalität einer bestimmten Prozedur zu erläutern, sie werden diese Beispiele jedoch nicht ändern, um zusätzliche Funktionalität bereitzustellen oder Prozeduren zu erstellen, die Ihren spezifischen Anforderungen entsprechen.
Hinweis Bevor Sie diesen Hotfix installieren, stellen Sie sicher, dass alle Benutzer des Microsoft Navision-Clients vom System abgemeldet sind. Dazu gehören Clientbenutzer von Microsoft Navision Application Services (NAS). Sie sollten der einzige Clientbenutzer sein, der angemeldet ist, wenn Sie diesen Hotfix implementieren.
Um diesen Hotfix zu implementieren, benötigen Sie eine Entwicklerlizenz.
Wir empfehlen, dem Benutzerkonto im Fenster „Windows-Anmeldungen" oder im Fenster „Datenbank-Anmeldungen" die Rollen-ID „SUPER" zuzuweisen. Wenn dem Benutzerkonto nicht die Rollen-ID „SUPER" zugewiesen werden kann, müssen Sie überprüfen, ob das Benutzerkonto über die folgenden Berechtigungen verfügt:
Die Änderungsberechtigung für das Objekt, das Sie ändern möchten.
Die Ausführungsberechtigung für das Systemobjekt-ID-5210-Objekt und für das Systemobjekt-ID-9015-Objekt.
Hinweis Sie müssen keine Rechte an den Datenspeichern haben, es sei denn, Sie müssen eine Datenreparatur durchführen.
Codeänderungen
Hinweis: Testen Sie Codekorrekturen immer in einer kontrollierten Umgebung, bevor Sie die Korrekturen auf Ihren Produktionscomputern anwenden.
Um dieses Problem zu beheben, führen Sie die folgenden Schritte aus:
Ändern Sie den Code im OnRun-Trigger in der Sales-Post-Codeunit (80) wie folgt:
Vorhandener Code...
GenJnlLine."Externe Dokumentnr." := GenJnlLineExtDocNo;
GenJnlLine."Währungscode" := "Währungscode";
GenJnlLine.Amount := -TotalSalesLine."Betrag inklusive Mehrwertsteuer";
GenJnlLine."Quellwährungscode" := "Währungscode";
GenJnlLine."Quellwährungsbetrag" := -TotalSalesLine."Betrag inklusive Mehrwertsteuer";
// Folgende Zeile löschen.
GenJnlLine."Amount (LCY)" := -TotalSalesLineLCY."Amount Inclusive MwSt";
WENN SalesHeader."Währungscode" = '' DANN
GenJnlLine."Währungsfaktor" := 1
ANDERS
GenJnlLine."Currency Factor" := SalesHeader."Currency Factor";
GenJnlLine.Correction := Korrektur;
...
WENN SalesLine."Menge zur Rechnung" <> 0, DANN BEGINNEN
SalesLine."Prepmt Amt Deducted" :=
SalesLine."Vorheriger Betrag abgezogen" + SalesLine."Vorheriger Betrag zum Abzug";
SalesLine."Vorzeitige Mehrwertsteuerdifferenz abgezogen" :=
SalesLine."Vorhergehende Mehrwertsteuerdifferenz abgezogen" + SalesLine."Vorläufige Mehrwertsteuerdifferenz zum Abzug";
// Folgende Zeilen löschen.
WENN „Währungscode" <> '' DANN BEGINNEN
TempPrePayDeductLCYSalesLine := SalesLine;
WENN TempPrePayDeductLCYSalesLine.FIND THEN
SalesLine."Prepmt. Amount Inv. (MW)" := SalesLine."Prepmt. Amount Inv. (MW)" -
TempPrePayDeductLCYSalesLine."Prepmt. Amount Inv. (LCY)";
ENDE SONST
SalesLine."Prepmt. Amount Inv. (MW)" :=
RUNDEN(
RUNDEN(
ROUND(SalesLine."Stückpreis" * (SalesLine.Quantity - SalesLine."Versandte Menge"),
Währung. „Betragsrundungsgenauigkeit") *
(1 - SalesLine."Zeilenrabatt %" / 100),Currency."Amount Rounding Precision") *
SalesLine."Vorauszahlung %" / 100,Währung."Betragsrundungsgenauigkeit");
// Ende der Zeilen.
SalesLine."Prepmt Amt to Deduct" :=
SalesLine."Prepmt. Amt. Inv." - SalesLine."Prepmt Amt Deducted";
SalesLine."Prepmt VAT Diff. to Deduct" := 0;
ENDE;
ENDE;
...
WENN ABS(TempSalesLine."Rechnungsmenge") > ABS(TempSalesLine."Liefermenge") DANN
FEHLER(
Text014,
TempSalesLine."Dokumentnr.");
TempSalesLine.InitQtyToInvoice;
// Folgende Zeilen löschen.
TempSalesLine."Prepmt Amt Deducted" := TempSalesLine."Prepmt Amt Deducted" + SalesLine."Prepmt Amt to Deducted";
TempSalesLine."Prepmt VAT Diff. Deducted" :=
TempSalesLine."Prepmt VAT Diff. Deducted" + SalesLine."Prepmt VAT Diff. to Deducted";
WENN „Währungscode" <> '' DANN BEGINNEN
TempPrePayDeductLCYSalesLine := SalesLine;
WENN TempPrePayDeductLCYSalesLine.FIND THEN
TempSalesLine."Prepmt. Amount Inv. (MW)" := TempSalesLine."Prepmt. Amount Inv. (MW)" -
TempPrePayDeductLCYSalesLine."Prepmt. Amount Inv. (LCY)";
ENDE SONST
TempSalesLine."Prepmt. Amount Inv. (MW)" := TempSalesLine."Prepmt. Amount Inv. (MW)" -
SalesLine."Prepmt Amt to Deduct";
IF (TempSalesLine."Quantity Invoiced" = TempSalesLine.Quantity) AND
(TempSalesLine."Vorauszahlung %" <> 0) DANN
PrepayRealizeGainLoss(TempSalesLine);
TempSalesLine."Prepmt Amt to Deduct" := TempSalesLine."Prepmt. Amt. Inv." - TempSalesLine."Prepmt Amt Deducted";
TempSalesLine."Prepmt VAT Diff. to Deduct" := 0;
// Ende der Zeilen.
TempSalesLine.InitOutstanding;
IF (TempSalesLine."Purch. Order Line No." <> 0) AND
(TempSalesLine.Quantity = TempSalesLine."In Rechnung gestellte Menge")
DANN
UpdateAssocLines(TempSalesLine);
...
InsertTrackingSpecification;
IF SalesLine.FINDSET THEN
WIEDERHOLEN
IF SalesLine."Purch. Order Line No." <> 0 DANN
UpdateAssocLines(SalesLine);
// Folgende Zeilen löschen.
IF (SalesLine."Prepaid %" <> 0) THEN BEGIN
WENN „Währungscode" <> '' DANN BEGINNEN
TempPrePayDeductLCYSalesLine := SalesLine;
WENN TempPrePayDeductLCYSalesLine.FIND THEN
SalesLine."Prepmt. Amount Inv. (MW)" := SalesLine."Prepmt. Amount Inv. (MW)" -
TempPrePayDeductLCYSalesLine."Prepmt. Amount Inv. (LCY)";
ENDE SONST
SalesLine."Prepmt. Amount Inv. (MW)" := SalesLine."Prepmt. Amount Inv. (MW)" - SalesLine."Prepmt Amount Inv. (MW)" - SalesLine."Prepmt Amt to Deduct";
PrepayRealizeGainLoss(SalesLine);
ENDE;
// Ende der Zeilen.
BIS SalesLine.NEXT = 0;
ENDE;
ENDE;
SalesLine.SETFILTER("Pauschalbestellzeilennr.",'<>0');
...Ersatzcode
...
GenJnlLine."Externe Dokumentnr." := GenJnlLineExtDocNo;
GenJnlLine."Währungscode" := "Währungscode";
GenJnlLine.Amount := -TotalSalesLine."Betrag inklusive Mehrwertsteuer";
GenJnlLine."Quellwährungscode" := "Währungscode";
GenJnlLine."Quellwährungsbetrag" := -TotalSalesLine."Betrag inklusive Mehrwertsteuer";
// Fügen Sie die folgende Zeile hinzu.
GenJnlLine."Amount (LCY)" := ROUND(-TotalSalesLineLCY."Amount Inclusive VAT",GLSetup."Amount Rounding Precision");
WENN SalesHeader."Währungscode" = '' DANN
GenJnlLine."Währungsfaktor" := 1
ANDERS
GenJnlLine."Currency Factor" := SalesHeader."Currency Factor";
GenJnlLine.Correction := Korrektur;
...
WENN SalesLine."Menge zur Rechnung" <> 0, DANN BEGINNEN
SalesLine."Prepmt Amt Deducted" :=
SalesLine."Vorheriger Betrag abgezogen" + SalesLine."Vorheriger Betrag zum Abzug";
SalesLine."Vorzeitige Mehrwertsteuerdifferenz abgezogen" :=
SalesLine."Vorhergehende Mehrwertsteuerdifferenz abgezogen" + SalesLine."Vorläufige Mehrwertsteuerdifferenz zum Abzug";
// Fügen Sie die folgende Zeile hinzu.
DecrementPrepmtAmtInvLCY(SalesLine,SalesLine."Prepmt. Amount Inv. (LCY)");
SalesLine."Prepmt Amt to Deduct" :=
SalesLine."Prepmt. Amt. Inv." - SalesLine."Prepmt Amt Deducted";
SalesLine."Prepmt VAT Diff. to Deduct" := 0;
ENDE;
ENDE;
...
WENN ABS(TempSalesLine."Rechnungsmenge") > ABS(TempSalesLine."Liefermenge") DANN
FEHLER(
Text014,
TempSalesLine."Dokumentnr.");
TempSalesLine.InitQtyToInvoice;
// Fügen Sie die folgenden Zeilen hinzu.
IF TempSalesLine."Prepaid %" <> 0 THEN BEGIN
TempSalesLine."Prepmt Amt Deducted" := TempSalesLine."Prepmt Amt Deducted" + SalesLine."Prepmt Amt to Deducted";
TempSalesLine."Prepmt VAT Diff. Deducted" :=
TempSalesLine."Prepmt VAT Diff. Deducted" + SalesLine."Prepmt VAT Diff. to Deducted";
DecrementPrepmtAmtInvLCY(SalesLine,TempSalesLine."Prepmt. Amount Inv. (LCY)");
TempSalesLine."Prepmt Amt to Deduct" := TempSalesLine."Prepmt. Amt. Inv." - TempSalesLine."Prepmt Amt Deducted";
TempSalesLine."Prepmt VAT Diff. to Deduct" := 0;
ENDE;
// Ende der Zeilen.
TempSalesLine.InitOutstanding;
IF (TempSalesLine."Purch. Order Line No." <> 0) AND
(TempSalesLine.Quantity = TempSalesLine."In Rechnung gestellte Menge")
DANN
UpdateAssocLines(TempSalesLine);
...
InsertTrackingSpecification;
IF SalesLine.FINDSET THEN
WIEDERHOLEN
IF SalesLine."Purch. Order Line No." <> 0 DANN
UpdateAssocLines(SalesLine);
// Fügen Sie die folgenden Zeilen hinzu.
WENN (SalesLine."Vorauszahlung %" <> 0) DANN
DecrementPrepmtAmtInvLCY(SalesLine,SalesLine."Prepmt. Amount Inv. (LCY)");
// Ende der Zeilen.
BIS SalesLine.NEXT = 0;
ENDE;
ENDE;
SalesLine.SETFILTER("Pauschalbestellzeilennr.",'<>0');
...Ändern Sie den Code in der FillInvPostingBuffer-Funktion in der Sales-Post-Codeunit (80) wie folgt:
Vorhandener Code...
TempDocDim.SETRANGE("Table ID",DATABASE::"Sales Line");
TempDocDim.SETRANGE("Zeilen-Nr.",SalesLine."Zeilen-Nr.");
TotalVAT := SalesLine."Betrag inklusive Mehrwertsteuer" - SalesLine.Amount;
TotalVATACY := SalesLineACY."Betrag inklusive Mehrwertsteuer" - SalesLineACY.Amount;
// Folgende Zeile löschen.
TotalAmount := SalesLine.Amount;
TotalAmountACY := SalesLineACY.Amount;
IF SalesSetup."Rabattbuchung" IN
[SalesSetup."Discount Posting"::"Rechnungsrabatte",SalesSetup."Discount Posting"::"Alle Rabatte"] DANN BEGINNEN
WENN SalesLine."VAT Calculation Type" = SalesLine."VAT Calculation Type"::"Reverse Charge VAT" THEN
...Ersatzcode
...
TempDocDim.SETRANGE("Table ID",DATABASE::"Sales Line");
TempDocDim.SETRANGE("Zeilen-Nr.",SalesLine."Zeilen-Nr.");
TotalVAT := SalesLine."Betrag inklusive Mehrwertsteuer" - SalesLine.Amount;
TotalVATACY := SalesLineACY."Betrag inklusive Mehrwertsteuer" - SalesLineACY.Amount;
// Fügen Sie die folgende Zeile hinzu.
TotalAmount := ROUND(SalesLine.Amount,GLSetup."Amount Rounding Precision");
TotalAmountACY := SalesLineACY.Amount;
IF SalesSetup."Rabattbuchung" IN
[SalesSetup."Discount Posting"::"Rechnungsrabatte",SalesSetup."Discount Posting"::"Alle Rabatte"] DANN BEGINNEN
WENN SalesLine."VAT Calculation Type" = SalesLine."VAT Calculation Type"::"Reverse Charge VAT" THEN
...Fügen Sie wie folgt eine neue Funktion „DecrementPrepmtAmtInvLCY" in der Codeunit „Sales-Post" (80) hinzu:
LOKALE VERFAHREN DecrementPrepmtAmtInvLCY@86(SalesLine@1000: Datensatz 37;VAR PrepmtAmountInvLCY@1001: Dezimal);
TempPrePayDeductLCYSalesLine := SalesLine;
WENN TempPrePayDeductLCYSalesLine.FIND THEN
PrepmtAmountInvLCY := PrepmtAmountInvLCY - TempPrePayDeductLCYSalesLine."Prepmt. Amount Inv. (LCY)";Ändern Sie den Code im OnRun-Trigger in der Purch.-Post-Codeunit (90) wie folgt:
Vorhandener Code...
GenJnlLine."Externe Dokumentnr." := GenJnlLineExtDocNo;
GenJnlLine."Währungscode" := "Währungscode";
GenJnlLine.Amount := -TotalPurchLine."Betrag inklusive Mehrwertsteuer";
GenJnlLine."Quellwährungscode" := "Währungscode";
GenJnlLine."Quellwährungsbetrag" := -TotalPurchLine."Betrag inklusive Mehrwertsteuer";
// Folgende Zeile löschen.
GenJnlLine."Amount (LCY)" := -TotalPurchLineLCY."Amount Inclusive MwSt";
WENN PurchHeader."Währungscode" = '' DANN
GenJnlLine."Währungsfaktor" := 1
ANDERS
GenJnlLine."Währungsfaktor" := PurchHeader."Währungsfaktor";
GenJnlLine."Sales/Purch. (LCY)" := -TotalPurchLineLCY.Amount;
...
WENN PurchLine."Menge zur Rechnung" <> 0 THEN BEGIN
PurchLine."Prepmt Amt Deducted" :=
PurchLine."Vorheriger Betrag abgezogen" + PurchLine."Vorheriger Betrag zum Abzug";
PurchLine."Von der MwSt.-Diff. abgezogen" :=
PurchLine."Vorhergehende Mehrwertsteuerdifferenz abgezogen" + PurchLine."Vorläufige Mehrwertsteuerdifferenz zum Abzug";
// Folgende Zeile löschen.
WENN „Währungscode" <> '' DANN BEGINNEN
TempPrePayDeductLCYPurchLine := PurchLine;
WENN TempPrePayDeductLCYPurchLine.FIND THEN
PurchLine."Prepmt. Amount Inv. (MW)" := PurchLine."Prepmt. Amount Inv. (MW)" -
TempPrePayDeductLCYPurchLine."Prepmt. Amount Inv. (LCY)";
ENDE SONST
PurchLine."Prepmt. Amount Inv. (MW)" :=
RUNDEN(
RUNDEN(
ROUND(PurchLine."Direkte Stückkosten" * (PurchLine.Quantity - PurchLine."Erhaltene Menge"),
Währung. „Betragsrundungsgenauigkeit") *
(1 - PurchLine."Zeilenrabatt %" / 100),Currency."Amount Rounding Precision") *
PurchLine."Prepaid %" / 100,Currency."Amount Rounding Precision");
PurchLine."Prepmt Amt to Deduct" :=
PurchLine."Prepmt. Amt. Inv." - PurchLine."Prepmt Amt Deducted";
// Ende der Zeilen.
PurchLine."Prepmt VAT Diff. to Deduct" := 0;
ENDE;
ENDE;
UpdateBlanketOrderLine(PurchLine,Receive,Ship,Invoice);
...
Text018 +
Text99000000,
TempPurchLine."Verkaufsauftragsnr.");
ENDE;
TempPurchLine.InitQtyToInvoice;
// Folgende Zeilen löschen.
TempPurchLine."Prepmt Amt Deducted" := TempPurchLine."Prepmt Amt Deducted" + PurchLine."Prepmt Amt to Deducted";
TempPurchLine."Prepmt VAT Diff. Deducted" :=
TempPurchLine."Prepmt MwSt.-Diff. abgezogen" + PurchLine."Prepmt MwSt.-Diff. zum Abzug";
WENN „Währungscode" <> '' DANN BEGINNEN
TempPrePayDeductLCYPurchLine := PurchLine;
WENN TempPrePayDeductLCYPurchLine.FIND THEN
TempPurchLine."Prepmt. Amount Inv. (MW)" := TempPurchLine."Prepmt. Amount Inv. (MW)" -
TempPrePayDeductLCYPurchLine."Prepmt. Amount Inv. (LCY)";
ENDE SONST
TempPurchLine."Prepmt. Amount Inv. (MW)" := TempPurchLine."Prepmt. Amount Inv. (MW)" -
PurchLine."Prepmt Amt to Deduct";
IF (TempPurchLine."Quantity Invoiced" = TempPurchLine.Quantity) AND
(TempPurchLine."Vorauszahlung %" <> 0) DANN
PrepayRealizeGainLoss(TempPurchLine);
TempPurchLine."Prepmt Amt to Deduct" := TempPurchLine."Prepmt. Amt. Inv." - TempPurchLine."Prepmt Amt Deducted";
TempPurchLine."Prepmt VAT Diff. to Deduct" := 0;
// Ende der Zeilen.
TempPurchLine.InitOutstanding;
TempPurchLine.MODIFY;
ENDE;
BIS PurchLine.NEXT = 0;
InsertTrackingSpecification;
...
PurchLine.SETRANGE("Retourensendungsnr.");
ENDE;
ANDERS
IF PurchLine.FINDSET THEN
WIEDERHOLEN
// Folgende Zeilen löschen.
WENN (PurchLine."Vorauszahlung %" <> 0) DANN BEGINNEN
WENN „Währungscode" <> '' DANN BEGINNEN
TempPrePayDeductLCYPurchLine := PurchLine;
WENN TempPrePayDeductLCYPurchLine.FIND THEN
PurchLine."Prepmt. Amount Inv. (MW)" := PurchLine."Prepmt. Amount Inv. (MW)" -
TempPrePayDeductLCYPurchLine."Prepmt. Amount Inv. (LCY)";
ENDE SONST
PurchLine."Prepmt. Amount Inv. (MW)" := PurchLine."Prepmt. Amount Inv. (MW)" - PurchLine."Prepmt Amount to Deduct";
PrepayRealizeGainLoss(PurchLine);
ENDE;
// Ende der Zeilen.
BIS PurchLine.NEXT = 0;
ENDE;
PurchLine.SETFILTER("Pauschalbestellzeilennr.",'<>0');
IF PurchLine.FINDSET THEN
...Ersatzcode
...
GenJnlLine."Externe Dokumentnr." := GenJnlLineExtDocNo;
GenJnlLine."Währungscode" := "Währungscode";
GenJnlLine.Amount := -TotalPurchLine."Betrag inklusive Mehrwertsteuer";
GenJnlLine."Quellwährungscode" := "Währungscode";
GenJnlLine."Quellwährungsbetrag" := -TotalPurchLine."Betrag inklusive Mehrwertsteuer";
// Fügen Sie die folgende Zeile hinzu.
GenJnlLine."Amount (LCY)" := ROUND(-TotalPurchLineLCY."Amount Inclusive VAT",GLSetup."Amount Rounding Precision");
WENN PurchHeader."Währungscode" = '' DANN
GenJnlLine."Währungsfaktor" := 1
ANDERS
GenJnlLine."Währungsfaktor" := PurchHeader."Währungsfaktor";
GenJnlLine."Sales/Purch. (LCY)" := -TotalPurchLineLCY.Amount;
...
WENN PurchLine."Menge zur Rechnung" <> 0 THEN BEGIN
PurchLine."Prepmt Amt Deducted" :=
PurchLine."Vorheriger Betrag abgezogen" + PurchLine."Vorheriger Betrag zum Abzug";
PurchLine."Von der MwSt.-Diff. abgezogen" :=
PurchLine."Vorhergehende Mehrwertsteuerdifferenz abgezogen" + PurchLine."Vorläufige Mehrwertsteuerdifferenz zum Abzug";
// Fügen Sie die folgenden Zeilen hinzu.
DecrementPrepmtAmtInvLCY(PurchLine,PurchLine."Prepmt. Amount Inv. (LCY)");
PurchLine."Prepmt Amt to Deduct" :=
PurchLine."Prepmt. Amt. Inv." - PurchLine."Prepmt Amt Deducted";
// Ende der Zeilen.
PurchLine."Prepmt VAT Diff. to Deduct" := 0;
ENDE;
ENDE;
UpdateBlanketOrderLine(PurchLine,Receive,Ship,Invoice);
...
Text018 +
Text99000000,
TempPurchLine."Verkaufsauftragsnr.");
ENDE;
TempPurchLine.InitQtyToInvoice;
// Fügen Sie die folgenden Zeilen hinzu.
IF TempPurchLine."Prepaid %" <> 0 THEN BEGIN
TempPurchLine."Prepmt Amt Deducted" := TempPurchLine."Prepmt Amt Deducted" + PurchLine."Prepmt Amt to Deducted";
TempPurchLine."Prepmt VAT Diff. Deducted" :=
TempPurchLine."Prepmt MwSt.-Diff. abgezogen" + PurchLine."Prepmt MwSt.-Diff. zum Abzug";
DecrementPrepmtAmtInvLCY(PurchLine,TempPurchLine."Prepmt. Amount Inv. (LCY)");
TempPurchLine."Prepmt Amt to Deduct" := TempPurchLine."Prepmt. Amt. Inv." - TempPurchLine."Prepmt Amt Deducted";
TempPurchLine."Prepmt VAT Diff. to Deduct" := 0;
ENDE;
// Ende der Zeilen.
TempPurchLine.InitOutstanding;
TempPurchLine.MODIFY;
ENDE;
BIS PurchLine.NEXT = 0;
InsertTrackingSpecification;
...
// Fügen Sie die folgenden Zeilen hinzu.
WENN (PurchLine."Vorauszahlung %" <> 0) DANN
DecrementPrepmtAmtInvLCY(PurchLine,PurchLine."Prepmt. Amount Inv. (LCY)");
// Ende der Zeilen.
...Ändern Sie den Code in der FillInvPostingBuffer-Funktion in der Purch.-Post-Codeunit (90) wie folgt:
Vorhandener Code...
TempDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line");
TempDocDim.SETRANGE("Line No.",PurchLine."Line No.");
TotalVAT := PurchLine."Betrag inklusive Mehrwertsteuer" - PurchLine.Amount;
TotalVATACY := PurchLineACY."Betrag inklusive Mehrwertsteuer" - PurchLineACY.Amount;
// Folgende Zeile löschen.
TotalAmount := PurchLine.Amount;
TotalAmountACY := PurchLineACY.Amount;
IF PurchSetup."Rabattbuchung" IN
[PurchSetup."Rabattbuchung"::"Rechnungsrabatte",PurchSetup."Rabattbuchung"::"Alle Rabatte"] DANN BEGINNEN
CASE PurchLine. „Typ der Mehrwertsteuerberechnung" OF
...Ersatzcode
...
TempDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line");
TempDocDim.SETRANGE("Line No.",PurchLine."Line No.");
TotalVAT := PurchLine."Betrag inklusive Mehrwertsteuer" - PurchLine.Amount;
TotalVATACY := PurchLineACY."Betrag inklusive Mehrwertsteuer" - PurchLineACY.Amount;
// Fügen Sie die folgende Zeile hinzu.
TotalAmount := ROUND(PurchLine.Amount,GLSetup."Amount Rounding Precision");
TotalAmountACY := PurchLineACY.Amount;
TotalAmountACY := PurchLineACY.Amount;
IF PurchSetup."Rabattbuchung" IN
[PurchSetup."Rabattbuchung"::"Rechnungsrabatte",PurchSetup."Rabattbuchung"::"Alle Rabatte"] DANN BEGINNEN
CASE PurchLine. „MwSt.-Berechnungsart" OF
...Fügen Sie wie folgt eine neue Funktion „DecrementPrepmtAmtInvLCY" in der Purch.-Post-Codeeinheit (90) hinzu:
LOKALE VERFAHREN DecrementPrepmtAmtInvLCY@86(PurchLine@1000: Datensatz 39;VAR PrepmtAmountInvLCY@1001: Dezimal);
TempPrePayDeductLCYPurchLine := PurchLine;
WENN TempPrePayDeductLCYPurchLine.FIND THEN
PrepmtAmountInvLCY := PrepmtAmountInvLCY - TempPrePayDeductLCYPurchLine."Prepmt. Amount Inv. (LCY)";Ändern Sie den Code in der RoundAmounts-Funktion in der Codeunit „Sales-Post Prepaids" (442) wie folgt:
Vorhandener Code...
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBuf,SalesHeader,DummySalesLine,FALSE,0);
WENN SalesHeader."Währungscode" <> '' DANN BEGINNEN
MwSt. := PrepmtInvLineBuf.Amount <> PrepmtInvLineBuf."Betrag inkl. MwSt.";
// Folgende Zeilen löschen.
PrepmtInvLineBuf."Betrag inkl. MwSt." :=
AmountToLCY(
SalesHeader,TotalPrepmtInvLineBuf."Betrag inkl. MwSt.",TotalPrepmtInvLineBufLCY."Betrag inkl. MwSt.");
// Ende der Zeilen.
WENN MEHRWERTSTEUER DANN
PrepmtInvLineBuf.Amount := ROUND(PrepmtInvLineBuf."Betrag inkl. MwSt." / (1 + PrepmtInvLineBuf."VAT %" / 100))
ANDERS
PrepmtInvLineBuf.Amount := PrepmtInvLineBuf."Betrag inkl. MwSt.";
PrepmtInvLineBuf."VAT Amount" := PrepmtInvLineBuf."Amount Incl. VAT" - PrepmtInvLineBuf.Amount;
IF PrepmtInvLineBuf."VAT Base Amount" <> 0 THEN
PrepmtInvLineBuf."VAT Base Amount" := PrepmtInvLineBuf.Amount;
ENDE;
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBufLCY,SalesHeader,DummySalesLine,FALSE,0);
...Ersatzcode
...
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBuf,SalesHeader,DummySalesLine,FALSE,0);
WENN SalesHeader."Währungscode" <> '' DANN BEGINNEN
MwSt. := PrepmtInvLineBuf.Amount <> PrepmtInvLineBuf."Betrag inkl. MwSt.";
// Fügen Sie die folgenden Zeilen hinzu.
PrepmtInvLineBuf."Betrag inkl. MwSt." :=
RUNDEN(
AmountToLCY(
SalesHeader,TotalPrepmtInvLineBuf."Betrag inkl. MwSt.",TotalPrepmtInvLineBufLCY."Betrag inkl. MwSt."),
GLSetup."Amount Rounding Precision");
// Ende der Zeilen.
WENN MEHRWERTSTEUER DANN
PrepmtInvLineBuf.Amount := ROUND(PrepmtInvLineBuf."Betrag inkl. MwSt." / (1 + PrepmtInvLineBuf."VAT %" / 100))
ANDERS
PrepmtInvLineBuf.Amount := PrepmtInvLineBuf."Betrag inkl. MwSt.";
PrepmtInvLineBuf."VAT Amount" := PrepmtInvLineBuf."Amount Incl. VAT" - PrepmtInvLineBuf.Amount;
IF PrepmtInvLineBuf."VAT Base Amount" <> 0 THEN
PrepmtInvLineBuf."VAT Base Amount" := PrepmtInvLineBuf.Amount;
ENDE;
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBufLCY,SalesHeader,DummySalesLine,FALSE,0);
...Ändern Sie den Code in der InitInvoiceRoundingLine-Funktion in der Codeunit „Sales-Post Prepaids" (442) wie folgt:
Vorhandener Code...
"Einzelpreis",
RUNDEN(
InvoiceRoundingAmount /
(1 + (1 - SalesHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
Währung."Betragsrundungsgenauigkeit"));
VALIDATE("Betrag inklusive Mehrwertsteuer",InvoiceRoundingAmount);
ENDE;
EXIT(TRUE);Ersatzcode
...
"Einzelpreis",
RUNDEN(
InvoiceRoundingAmount /
(1 + (1 - SalesHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
Währung."Betragsrundungsgenauigkeit"));
// Fügen Sie die folgende Zeile hinzu.
VALIDATE("Vorauszahlungsbetrag",InvoiceRoundingAmount);
VALIDATE("Betrag inklusive Mehrwertsteuer",InvoiceRoundingAmount);
ENDE;
EXIT(TRUE);Ändern Sie den Code in der RoundAmounts-Funktion in der Codeunit Purchase-Post Prepaids (444) wie folgt:
Vorhandener Code...
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBuf,PurchHeader,DummyPurchLine,FALSE,0);
WENN PurchHeader."Währungscode" <> '' DANN BEGINNEN
MwSt. := PrepmtInvLineBuf.Amount <> PrepmtInvLineBuf."Betrag inkl. MwSt.";
PrepmtInvLineBuf."Betrag inkl. MwSt." :=
// Folgende Zeilen löschen.
AmountToLCY(
PurchHeader,TotalPrepmtInvLineBuf."Betrag inkl. MwSt.",TotalPrepmtInvLineBufLCY."Betrag inkl. MwSt.");
WENN MEHRWERTSTEUER DANN
PrepmtInvLineBuf.Amount := ROUND(PrepmtInvLineBuf."Betrag inkl. MwSt." / (1 + PrepmtInvLineBuf."VAT %" / 100))
ANDERS
PrepmtInvLineBuf.Amount := PrepmtInvLineBuf."Betrag inkl. MwSt.";
// Ende der Zeilen.
PrepmtInvLineBuf."VAT Amount" := PrepmtInvLineBuf."Amount Incl. VAT" - PrepmtInvLineBuf.Amount;
IF PrepmtInvLineBuf."VAT Base Amount" <> 0 THEN
PrepmtInvLineBuf."VAT Base Amount" := PrepmtInvLineBuf.Amount;
ENDE;
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBufLCY,PurchHeader,DummyPurchLine,FALSE,0);
...Ersatzcode
...
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBuf,PurchHeader,DummyPurchLine,FALSE,0);
WENN PurchHeader."Währungscode" <> '' DANN BEGINNEN
MwSt. := PrepmtInvLineBuf.Amount <> PrepmtInvLineBuf."Betrag inkl. MwSt.";
PrepmtInvLineBuf."Betrag inkl. MwSt." :=
// Fügen Sie die folgenden Zeilen hinzu.
RUNDEN(
AmountToLCY(
PurchHeader,TotalPrepmtInvLineBuf."Betrag inkl. MwSt.",TotalPrepmtInvLineBufLCY."Betrag inkl. MwSt."),
GLSetup."Amount Rounding Precision");
WENN MEHRWERTSTEUER DANN
PrepmtInvLineBuf.Amount := ROUND(PrepmtInvLineBuf."Betrag inkl. MwSt." / (1 + PrepmtInvLineBuf."VAT %" / 100))
ANDERS
PrepmtInvLineBuf.Amount := PrepmtInvLineBuf."Betrag inkl. MwSt.";
// Ende der Zeilen.
PrepmtInvLineBuf."VAT Amount" := PrepmtInvLineBuf."Amount Incl. VAT" - PrepmtInvLineBuf.Amount;
IF PrepmtInvLineBuf."VAT Base Amount" <> 0 THEN
PrepmtInvLineBuf."VAT Base Amount" := PrepmtInvLineBuf.Amount;
ENDE;
IncrAmounts(PrepmtInvLineBuf,TotalPrepmtInvLineBufLCY,PurchHeader,DummyPurchLine,FALSE,0);
...Ändern Sie den Code in der Funktion „InitInvoiceRoundingLine" in der Codeunit „Purchase-Post Prepaids" (444) wie folgt:
Vorhandener Code...
„Direkte Stückkosten",
RUNDEN(
InvoiceRoundingAmount /
(1 + (1 - PurchHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
Währung."Betragsrundungsgenauigkeit"));
VALIDATE("Betrag inklusive Mehrwertsteuer",InvoiceRoundingAmount);
ENDE;
EXIT(TRUE);Ersatzcode
...
„Direkte Stückkosten",
RUNDEN(
InvoiceRoundingAmount /
(1 + (1 - PurchHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
Währung."Betragsrundungsgenauigkeit"));
// Fügen Sie die folgende Zeile hinzu.
VALIDATE("Vorauszahlungsbetrag",InvoiceRoundingAmount);
VALIDATE("Betrag inklusive Mehrwertsteuer",InvoiceRoundingAmount);
ENDE;
EXIT(TRUE);
Voraussetzungen
Um diesen Hotfix anwenden zu können, muss eines der folgenden Produkte installiert sein:
Microsoft Dynamics NAV 2009 R2
Microsoft Dynamics NAV 2009 Service Pack 1
Informationen zum Entfernen
Sie können diesen Hotfix nicht entfernen.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Gilt für" aufgeführt sind.
Hinweis Dies ist ein „FAST PUBLISH"-Artikel, der direkt von der Microsoft-Supportorganisation erstellt wurde. Die hierin enthaltenen Informationen werden unverändert als Reaktion auf neu auftretende Probleme bereitgestellt. Aufgrund der schnellen Bereitstellung können die Materialien Tippfehler enthalten und jederzeit ohne Vorankündigung überarbeitet werden. Weitere Hinweise finden Sie in den Nutzungsbedingungen .
No comments:
Post a Comment