Dieser Artikel gilt für Microsoft Dynamics NAV für alle Länder und alle Gebietsschemas.
Problembeschreibung
Angenommen Sie, Saldomethode gelten als Ausgleichsmethode für den Kreditor in Microsoft Dynamics NAV 2009 festlegen. Und Sie eine Gutschrift und zwei Rechnungen über eine Erfassung buchen. Als Ergebnis wendet das System die Gutschrift beide Rechnungen. Später aufheben Sie alle Dokumente. Beim Ausführen der Funktion Stornotransaktion für Gutschriftzeile, erstellt das System in diesem Fall unnötig Sachposten.
Dieses Problem tritt in den folgenden Produkten auf:
-
Microsoft Dynamics NAV 2009
-
Microsoft Dynamics NAV 2009 R2
Problemlösung
Hotfix-Informationen
Ein unterstützter Hotfix ist inzwischen von Microsoft erhältlich. Allerdings ist es lediglich zur Behebung dieses Problems. Wenden Sie es nur auf Systeme an, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise noch getestet. Wenn Ihr System durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfehlen wir, dass Sie warten auf das nächste Servicepack für Microsoft Dynamics NAV 2009 oder die nächste Microsoft Dynamics NAV-Version, die diesen Hotfix enthält.
Hinweis In besonderen Fällen bestimmt Gebühren fallen normalerweise Support aufrufen Wenn Experte Support für Microsoft Dynamics und zugehörige Produkte storniert werden können, dass ein bestimmtes Update Ihr Problem behebt. Die normalen Supportkosten gilt für zusätzliche Supportfragen und Probleme, die nicht für das betreffende Update qualifizieren.
Informationen zur Installation
Microsoft bietet Programmierbeispiele lediglich zur Veranschaulichung, ohne ausdrückliche oder konkludente Gewährleistung. Dies beinhaltet, ist jedoch nicht beschränkt auf, konkludente Gewährleistungen der Tauglichkeit oder Eignung für einen bestimmten Zweck. Dieser Artikel setzt voraus, dass Sie mit der von Beispielen verwendeten Programmiersprache und den Tools, die zum Erstellen und Debuggen von Prozeduren verwendet werden, vertraut sind. Microsoft-Supporttechniker helfen der Erläuterung der Funktionalität bestimmter Prozeduren. Allerdings werden sie diese Beispiele nicht ändern, um zusätzliche Funktionalität bereitzustellen oder Prozeduren erstellen, die Ihren spezifischen Bedürfnisse erfüllen.
Hinweis Bevor Sie diesen Hotfix installieren, stellen Sie sicher, dass alle Microsoft Dynamics NAV-Clientbenutzer vom System abgemeldet werden. Hierzu gehören Dienste Microsoft Dynamics NAV Application Server (NAS). Sie sollte nur-Client-Benutzers, der angemeldet ist, wenn Sie diesen Hotfix installieren.
Muss eine Entwicklerlizenz verfügen, um diesen Hotfix installieren können.
Es wird empfohlen, das Benutzerkonto im Fenster Windows-Benutzernamen oder im Fenster Datenbank-Anmeldenamen "SUPER" Rollen-ID zugewiesen werden Wenn das Benutzerkonto die Rollen-ID "SUPER" nicht zugeordnet werden kann, müssen Sie sicherstellen, dass das Benutzerkonto die folgenden Berechtigungen verfügt:
-
Änderungsberechtigung für das Objekt, das Sie ändern.
-
Ausführungsberechtigung für System Object ID 5210 und System Object ID 9015
Objekt.
Hinweis Sie müssen keine Rechte für die Datenspeicher haben, es sei denn, Sie müssen eine Datenreparatur durchführen.
Ändern von Code
Hinweis Testen Sie Programmcodeverbesserungen generell erst in einem Testsytem, bevor Sie sie im Produktionssystem verwenden.
Gehen Sie folgendermaßen vor, um dieses Problem zu beheben:
-
Ändern Sie den Code in der Funktion InsertReversalEntry in der Tabelle Stornoposten (179) wie folgt:
Vorhandener Code 1...CLEAR(DtldCustLedgEntry);
DtldCustLedgEntry.SETCURRENTKEY("Transaction No.","Customer No.","Entry Type");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Transaction No.",CustLedgEntry."Transaction No.");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Customer No.",CustLedgEntry."Customer No.");
DtldCustLedgEntry.SETFILTER(
DtldCustLedgEntry."Entry Type",'<>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
// Delete the following line.
IF DtldCustLedgEntry.FIND('-') THEN BEGIN
// End of the deleted line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Delete the following lines.
CLEAR(DtldCustLedgEntry);
DtldCustLedgEntry.SETCURRENTKEY("Cust. Ledger Entry No.");
DtldCustLedgEntry.SETRANGE("Cust. Ledger Entry No.",CustLedgEntry."Entry No.");
DtldCustLedgEntry.SETRANGE(Unapplied,TRUE);
IF DtldCustLedgEntry.FIND('-') THEN BEGIN
REPEAT
TempRevertTransactionNo.Number := DtldCustLedgEntry."Transaction No.";
IF TempRevertTransactionNo.INSERT THEN;
UNTIL DtldCustLedgEntry.NEXT = 0;
END;
END;
// End of the deleted lines.
UNTIL CustLedgEntry.NEXT = 0;
IF VendLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
...Neuer Code 1
...CLEAR(DtldCustLedgEntry);
DtldCustLedgEntry.SETCURRENTKEY("Transaction No.","Customer No.","Entry Type");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Transaction No.",CustLedgEntry."Transaction No.");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Customer No.",CustLedgEntry."Customer No.");
DtldCustLedgEntry.SETFILTER(
DtldCustLedgEntry."Entry Type",'<>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
// Add the following line.
IF NOT DtldCustLedgEntry.ISEMPTY THEN
// End of the added line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Add the following line.
CheckDtldCustLedgEntry(CustLedgEntry);
// End of the added line.
UNTIL CustLedgEntry.NEXT = 0;
IF VendLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
...Vorhandener Code 2
...CLEAR(DtldVendLedgEntry);
DtldVendLedgEntry.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Transaction No.",VendLedgEntry."Transaction No.");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Vendor No.",VendLedgEntry."Vendor No.");
DtldVendLedgEntry.SETFILTER(
DtldVendLedgEntry."Entry Type",'<>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
// Delete the following line.
IF DtldVendLedgEntry.FIND('-') THEN BEGIN
// End of the deleted line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Delete the following lines.
CLEAR(DtldVendLedgEntry);
DtldVendLedgEntry.SETCURRENTKEY("Vendor Ledger Entry No.");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendLedgEntry."Entry No.");
DtldVendLedgEntry.SETRANGE(Unapplied,TRUE);
IF DtldVendLedgEntry.FIND('-') THEN BEGIN
REPEAT
TempRevertTransactionNo.Number := DtldVendLedgEntry."Transaction No.";
IF TempRevertTransactionNo.INSERT THEN;
UNTIL DtldVendLedgEntry.NEXT = 0;
END;
END;
// End of the deleted lines.
UNTIL VendLedgEntry.NEXT = 0;
IF BankAccLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
...Neuer Code 2
...CLEAR(DtldVendLedgEntry);
DtldVendLedgEntry.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Transaction No.",VendLedgEntry."Transaction No.");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Vendor No.",VendLedgEntry."Vendor No.");
DtldVendLedgEntry.SETFILTER(
DtldVendLedgEntry."Entry Type",'<>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
// Add the following line.
IF NOT DtldVendLedgEntry.ISEMPTY THEN
// End of the added line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Add the following line.
CheckDtldVendLedgEntry(VendLedgEntry);
// End of the added line.
UNTIL VendLedgEntry.NEXT = 0;
IF BankAccLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
... -
Ändern Sie den Code in der Funktion CheckDtldCustLedgEntry in der Tabelle Stornoposten (179) wie folgt:
Vorhandener code...LOCAL PROCEDURE CheckDtldCustLedgEntry@2(CustLedgEntry@1000 : Record 21) : Boolean;
VAR
DtldCustLedgEntry@1001 : Record 379;
BEGIN
// Delete the following lines.
DtldCustLedgEntry.SETCURRENTKEY("Cust. Ledger Entry No.");
DtldCustLedgEntry.SETRANGE("Cust. Ledger Entry No.",CustLedgEntry."Entry No.");
IF DtldCustLedgEntry.FIND('-') THEN
REPEAT
IF (DtldCustLedgEntry."Entry Type" <> DtldCustLedgEntry."Entry Type"::"Initial Entry") AND
(NOT DtldCustLedgEntry.Unapplied)
THEN
ERROR(
Text000,CustLedgEntry.TABLECAPTION,CustLedgEntry."Entry No.");
UNTIL DtldCustLedgEntry.NEXT = 0;
// End of the deleted lines.
END;
...Neuer code
...LOCAL PROCEDURE CheckDtldCustLedgEntry@2(CustLedgEntry@1000 : Record 21) : Boolean;
VAR
DtldCustLedgEntry@1001 : Record 379;
BEGIN
// Add the following lines.
DtldCustLedgEntry.SETCURRENTKEY("Cust. Ledger Entry No.","Entry Type");
DtldCustLedgEntry.SETRANGE("Cust. Ledger Entry No.",CustLedgEntry."Entry No.");
DtldCustLedgEntry.SETFILTER("Entry Type",'<>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
DtldCustLedgEntry.SETRANGE(Unapplied,FALSE);
IF NOT DtldCustLedgEntry.ISEMPTY THEN
ERROR(Text000,CustLedgEntry.TABLECAPTION,CustLedgEntry."Entry No.");
// End of the added lines.
END;
... -
Ändern Sie den Code in der Funktion CheckDtldVendLedgEntry in der Tabelle Stornoposten (179) wie folgt:
Vorhandener code...LOCAL PROCEDURE CheckDtldVendLedgEntry@28(VendLedgEntry@1000 : Record 25) : Boolean;
VAR
DtldVendLedgEntry@1001 : Record 380;
BEGIN
// Delete the following lines.
DtldVendLedgEntry.SETCURRENTKEY("Vendor Ledger Entry No.");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendLedgEntry."Entry No.");
IF DtldVendLedgEntry.FIND('-') THEN
REPEAT
IF (DtldVendLedgEntry."Entry Type" <> DtldVendLedgEntry."Entry Type"::"Initial Entry") AND
(NOT DtldVendLedgEntry.Unapplied)
THEN
ERROR(
Text000,VendLedgEntry.TABLECAPTION,VendLedgEntry."Entry No.");
UNTIL DtldVendLedgEntry.NEXT = 0;
// End of the deleted lines.
END;
...Neuer code
...LOCAL PROCEDURE CheckDtldVendLedgEntry@28(VendLedgEntry@1000 : Record 25) : Boolean;
VAR
DtldVendLedgEntry@1001 : Record 380;
BEGIN
// Add the following lines.
DtldVendLedgEntry.SETCURRENTKEY("Vendor Ledger Entry No.","Entry Type");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendLedgEntry."Entry No.");
DtldVendLedgEntry.SETFILTER("Entry Type",'<>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
DtldVendLedgEntry.SETRANGE(Unapplied,FALSE);
IF NOT DtldVendLedgEntry.ISEMPTY THEN
ERROR(Text000,VendLedgEntry.TABLECAPTION,VendLedgEntry."Entry No.");
// End of the added lines.
END;
...
Voraussetzungen
Sie müssen Microsoft Dynamics NAV 2009 verfügen, um diesen Hotfix installieren.
Informationen zur Deinstallation
Dieser Hotfix kann nicht entfernt werden.
Status
Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.
Hinweis Dies ist ein im Schnellverfahren veröffentlichter Artikel, der direkt in der Microsoft Support-Organisation erstellt wurde. Die hierin enthaltenen Informationen werden ohne Mängelgewähr in Reaktion auf neue Probleme bereitgestellt. Aufgrund der schnellen Bereitstellung kann das Material möglicherweise typografische Fehler enthalten und jederzeit ohne vorherige Ankündigung geändert werden. Weitere Hinweise finden Sie unter Geschäftsbedingungen.