Sunday, October 1, 2023

Eine falsche Zahlungstoleranz wird gebucht, wenn Sie eine Rechnung einer Zahlung in Microsoft Dynamics NAV zuordnen – Microsoft-Support

Rapidly Published-Artikel bieten Informationen direkt aus der Microsoft-Supportorganisation. Die hierin enthaltenen Informationen wurden als Reaktion auf neue oder einzigartige Themen erstellt oder sollen andere Informationen der Wissensdatenbank ergänzen.

Dieser Artikel gilt für Microsoft Dynamics NAV für alle Länder und alle Sprachgebietsschemas.

Symptome

Wenn Sie eine Rechnung einer Zahlung in Microsoft Dynamics NAV zuordnen, wird eine falsche Zahlungstoleranz gebucht. Dieses Problem tritt bei folgenden Produkten auf:

  • Microsoft Dynamics NAV 2009 Service Pack 1

  • Microsoft Dynamics NAV 2009

  • Microsoft Dynamics NAV 5.0 Service Pack 1

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 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:

  1. Ändern Sie den Code im OnRun-Trigger in der Codeunit „Gen. Jnl.-Apply" (225) wie folgt:
    Vorhandener Code 1

     ...
    WENN CustLedgEntry.FIND('-') DANN BEGIN
    CurrencyCode2 := CustLedgEntry."Währungscode";
    WENN Betrag = 0, DANN BEGINNEN
    WIEDERHOLEN
    CheckAgainstApplnCurrency(CurrencyCode2,CustLedgEntry."Currency Code",AccType::Customer,TRUE);
    ...

    Ersatzcode 1

     ...
    WENN CustLedgEntry.FIND('-') DANN BEGIN
    CurrencyCode2 := CustLedgEntry."Währungscode";
    WENN Betrag = 0, DANN BEGINNEN
    WIEDERHOLEN

    // Fügen Sie die folgende Zeile hinzu.
    PaymentToleranceMgt.DelPmtTolApllnDocNo(GenJnlLine,CustLedgEntry."Document No.");

    CheckAgainstApplnCurrency(CurrencyCode2,CustLedgEntry."Currency Code",AccType::Customer,TRUE);
    ...

    Vorhandener Code 2

     ...
    WENN VendLedgEntry.FIND('-') DANN BEGIN
    CurrencyCode2 := VendLedgEntry."Währungscode";
    WENN Betrag = 0, DANN BEGINNEN
    WIEDERHOLEN
    CheckAgainstApplnCurrency(CurrencyCode2,VendLedgEntry."Currency Code",AccType::Vendor,TRUE);
    ...

    Ersatzcode 2

     ...
    WENN VendLedgEntry.FIND('-') DANN BEGIN
    CurrencyCode2 := VendLedgEntry."Währungscode";
    WENN Betrag = 0, DANN BEGINNEN
    WIEDERHOLEN

    // Fügen Sie die folgende Zeile hinzu.
    PaymentToleranceMgt.DelPmtTolApllnDocNo(GenJnlLine,VendLedgEntry."Document No.");

    CheckAgainstApplnCurrency(CurrencyCode2,VendLedgEntry."Currency Code",AccType::Vendor,TRUE);
    ...
  2. Ändern Sie den Code in der Funktion CalcCustApplnAmount in der Codeunit „Payment Tolerance Management" (426) wie folgt:
    Vorhandener Code

     ...
    TempAmount := TempAmount + AppliedCustLedgEntry."Anzuwendender Betrag";
    UNTIL AppliedCustLedgEntry.NEXT = 0;

    // Folgende Zeilen löschen.
    // Zahlungstoleranz prüfen
    WENN (CustledgEntry."Document Type" = CustledgEntry."Document Type"::Payment) DANN BEGINNEN
    WENN TempAmount - CustledgeEntry."Remaining Amount" < MaxPmtTolAmount THEN
    MaxPmtTolAmount := TempAmount - CustledgeEntry."Remaining Amount";
    END ELSE IF (CustledgEntry."Document Type" = CustledgEntry."Document Type"::Refund) THEN BEGIN
    WENN TempAmount - CustledgeEntry."Remaining Amount" > MaxPmtTolAmount THEN
    MaxPmtTolAmount := TempAmount - CustledgeEntry."Remaining Amount";
    ENDE;
    // Ende der gelöschten Zeilen.

    TempAmount := TempAmount + MaxPmtTolAmount;
    PositiveFilter := TempAmount <= 0;
    ...

    Ersatzcode

     ...
    TempAmount := TempAmount + AppliedCustLedgEntry."Anzuwendender Betrag";
    UNTIL AppliedCustLedgEntry.NEXT = 0;

    TempAmount := TempAmount + MaxPmtTolAmount;
    PositiveFilter := TempAmount <= 0;
    ...
  3. Ändern Sie den Code in der Funktion CalcVendApplnAmount in der Codeunit „Payment Tolerance Management" (426) wie folgt:
    Vorhandener Code

     ...
    TempAmount := TempAmount + AppliedVendLedgEntry."Anzuwendender Betrag";
    UNTIL AppliedVendLedgEntry.NEXT = 0;

    // Folgende Zeilen löschen.
    // Zahlungstoleranz prüfen
    WENN (VendledgEntry."Document Type" = VendledgEntry."Document Type"::Payment) DANN BEGINNEN
    WENN TempAmount - VendledgEntry."Remaining Amount" > MaxPmtTolAmount THEN
    MaxPmtTolAmount := TempAmount - VendledgEntry."Remaining Amount";
    END ELSE IF (VendledgEntry."Document Type" = VendledgEntry."Document Type"::Refund) THEN BEGIN
    WENN TempAmount - VendledgEntry."Remaining Amount" < MaxPmtTolAmount THEN
    MaxPmtTolAmount := TempAmount - VendledgEntry."Remaining Amount";
    ENDE;
    // Ende der gelöschten Zeilen.

    TempAmount := TempAmount + MaxPmtTolAmount;
    PositiveFilter := TempAmount >= 0;
    ...

    Ersatzcode

     ...
    TempAmount := TempAmount + AppliedVendLedgEntry."Anzuwendender Betrag";
    UNTIL AppliedVendLedgEntry.NEXT = 0;

    TempAmount := TempAmount + MaxPmtTolAmount;
    PositiveFilter := TempAmount >= 0;
    ...
  4. Ändern Sie den Code in der Funktion DelPmtTolApllnDocNo in der Codeunit „Payment Tolerance Management" (426) wie folgt:
    Vorhandener Code

     ...
    AppliedCustLedgEntry.SETRANGE(Open,TRUE);
    AppliedCustLedgEntry.SETRANGE("Document No.",DocumentNo);
    AppliedCustLedgEntry.LOCKTABLE;

    // Folgende Zeilen löschen.

    WENN AppliedCustLedgEntry.FIND('-') THEN BEGIN
    AppliedCustLedgEntry."Akzeptierte Zahlungstoleranz" := 0;
    AppliedCustLedgEntry."Accepted Pmt. Disc. Tolerance" := FALSE;
    AppliedCustLedgEntry.MODIFY;
    // Ende der gelöschten Zeilen.
    BEGEHEN;
    ENDE;
    ...

    Ersatzcode

     ...
    AppliedCustLedgEntry.SETRANGE(Open,TRUE);
    AppliedCustLedgEntry.SETRANGE("Document No.",DocumentNo);
    AppliedCustLedgEntry.LOCKTABLE;

    // Fügen Sie die folgenden Zeilen hinzu.
    WENN AppliedCustLedgEntry.FINDSET THEN BEGIN
    WIEDERHOLEN
    AppliedCustLedgEntry."Akzeptierte Zahlungstoleranz" := 0;
    AppliedCustLedgEntry."Accepted Pmt. Disc. Tolerance" := FALSE;
    AppliedCustLedgEntry.MODIFY;
    UNTIL AppliedCustLedgEntry.NEXT = 0;
    //Ende der hinzugefügten Zeilen.

    BEGEHEN;
    ENDE;
    ...
  5. Ändern Sie den Code im DelPmtTolApllnDocNo-Trigger in der Codeunit „Payment Tolerance Management" (426) wie folgt:
    Vorhandener Code

     ...
    AppliedVendLedgEntry.SETRANGE(Open,TRUE);
    AppliedVendLedgEntry.SETRANGE("Document No.",DocumentNo);
    AppliedVendLedgEntry.LOCKTABLE;

    // Folgende Zeilen löschen.

    WENN AppliedVendLedgEntry.FIND('-') THEN BEGIN
    AppliedVendLedgEntry."Akzeptierte Zahlungstoleranz" := 0;
    AppliedVendLedgEntry."Accepted Pmt. Disc. Tolerance" := FALSE;
    AppliedVendLedgEntry.MODIFY;
    // Ende der gelöschten Zeilen

    BEGEHEN;
    ENDE;
    ENDE;
    ...

    Ersatzcode

     ...
    AppliedVendLedgEntry.SETRANGE(Open,TRUE);
    AppliedVendLedgEntry.SETRANGE("Document No.",DocumentNo);
    AppliedVendLedgEntry.LOCKTABLE;

    // Fügen Sie die folgenden Zeilen hinzu.

    WENN AppliedVendLedgEntry.FINDSET, DANN BEGINNEN
    WIEDERHOLEN
    AppliedVendLedgEntry."Akzeptierte Zahlungstoleranz" := 0;
    AppliedVendLedgEntry."Accepted Pmt. Disc. Tolerance" := FALSE;
    AppliedVendLedgEntry.MODIFY;
    UNTIL AppliedVendLedgEntry.NEXT = 0;
    //Ende der hinzugefügten Zeilen.

    BEGEHEN;
    ENDE;
    ENDE;
    ...


Voraussetzungen

Um diesen Hotfix anwenden zu können, muss eines der folgenden Produkte installiert sein:

  • Microsoft Dynamics NAV 2009 Service Pack 1

  • Microsoft Dynamics NAV 2009

  • Microsoft Dynamics NAV 5.0 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.

MICROSOFT UND/ODER SEINE LIEFERANTEN GEBEN KEINERLEI ZUSICHERUNGEN ODER GEWÄHRLEISTUNGEN HINSICHTLICH DER EIGNUNG, ZUVERLÄSSIGKEIT ODER GENAUIGKEIT DER INFORMATIONEN, DIE IN DEN AUF DIESER WEBSITE VERÖFFENTLICHTEN DOKUMENTEN UND DEN ZUGEHÖRIGEN GRAFIKEN (DIE „MATERIALIEN") FÜR IRGENDEINEN ZWECK ENTHALTEN SIND.

DIE MATERIALIEN KÖNNEN TECHNISCHE UNGENAUIGKEITEN ODER TYPOGRAFISCHE FEHLER ENTHALTEN UND KÖNNEN JEDERZEIT OHNE VORANKÜNDIGUNG ÜBERARBEITET WERDEN. SOWEIT NACH ANWENDBAREM RECHT ZULÄSSIG, LEHNEN MICROSOFT UND/ODER SEINE LIEFERANTEN ALLE AUSDRÜCKLICHEN, STILLSCHWEIGENDEN ODER GESETZLICHEN ZUSICHERUNGEN, GEWÄHRLEISTUNGEN UND BEDINGUNGEN AB UND SCHLIESSEN SIE AUS, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF ZUSICHERUNGEN, GEWÄHRLEISTUNGEN ODER BEDINGUNGEN IN BEZUG AUF TITEL, NICHTVERLETZUNG, ZUFRIEDENSTELLENDER ZUSTAND ODER ZUFRIEDENSTELLENDE QUALITÄT, MARKTGÄNGIGKEIT UND EIGNUNG FÜR EINEN BESTIMMTEN ZWECK IN BEZUG AUF DIE MATERIALIEN.

No comments:

Post a Comment