Saturday, December 2, 2023

Basen und Beträge werden in der spanischen Version von Microsoft Dynamics NAV 2009 - Microsoft Support - falsch für denselben Mehrwertsteuersatz und denselben Zeitraum gruppiert

Symptome

Die Grundlagen und Beträge sind in der 340-Erklärung mit den in der spanischen Version von Microsoft Dynamics NAV 2009 enthaltenen Mehrwertsteuerzahlungen fälschlicherweise für denselben Mehrwertsteuersatz und -zeitraum gruppiert.
Das gleiche Szenario mit normaler Mehrwertsteuer funktioniert wie erwartet, wobei jede Rechnung getrennt wird, unabhängig davon, ob sie den gleichen Mehrwertsteuersatz haben. Befolgen Sie die Schritte im Abschnitt „Codeänderungen", um dieses Problem zu beheben. Dieses Problem tritt bei folgenden Produkten auf:

  • Die spanische Version von Microsoft Dynamics NAV 2009 R2

  • Die spanische Version von Microsoft Dynamics NAV 2009 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 eines bestimmten Verfahrens 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 Dynamics NAV-Clients vom System abgemeldet sind. Dazu gehören Microsoft Dynamics NAV Application Server (NAS)-Dienste. 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

    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 Bericht „Make 340 Declaration" (10743) wie folgt:
    Vorhandener Code 1

     ...
    ENDE;
    ENDE;

    // Folgende Zeile löschen.
    OnAfterGetRecord=BEGIN
    // Ende der gelöschten Zeile.

    OperationCode := GetOperationCode(VATEntry2);

    VATBuffer."VAT %" := "VAT %";
    ...

    Ersatzcode 1

     ...
    ENDE;
    ENDE;

    // Fügen Sie die folgenden Zeilen hinzu.
    OnAfterGetRecord=VAR
    VendLedgEntryAppl@1100000: Datensatz 25;
    NewEntry@1100001 : Boolean;
    BEGINNEN
    // Ende der hinzugefügten Zeilen.

    OperationCode := GetOperationCode(VATEntry2);

    VATBuffer."VAT %" := "VAT %";
    ...

    Vorhandener Code 2

     ...
    VATBuffer.Amount := Betrag;
    ENDE;
    VATBuffer.INSERT;

    // Folgende Zeilen löschen.

    IF Type = VATEntry.Type::Purchase THEN BEGIN
    VATEntryTemporary := VATEntry2;
    VATEntryTemporary.INSERT;
    ENDE;
    ENDE;
    // Ende der gelöschten Zeilen.

    ENDE;

    TotalFields=Basis,Betrag;
    ...

    Ersatzcode 2

     ...
    VATBuffer.Amount := Betrag;
    ENDE;
    VATBuffer.INSERT;

    // Fügen Sie die folgenden Zeilen hinzu.
    ENDE;

    IF Type = VATEntry.Type::Purchase THEN
    WENN HasBeenRealized("Eintragsnr.") ODER ("Nicht realisierte Umsatzsteuereintragsnr." <> 0) DANN BEGINNEN
    NewEntry := CheckVLEApplication(VATEntry2);

    VATEntryTemporary.SETRANGE("Posting Date","Posting Date");
    VATEntryTemporary.SETRANGE("Dokumentnr.", "Dokumentnr.");
    VATEntryTemporary.SETRANGE("Dokumenttyp","Dokumenttyp");
    VATEntryTemporary.SETRANGE(Type,Type);
    VATEntryTemporary.SETRANGE("VAT %","VAT %");
    VATEntryTemporary.SETRANGE("Transaktionsnr.", "Transaktionsnr.");
    WENN VATEntryTemporary.FINDFIRST UND NICHT NewEntry, DANN BEGIN
    VATEntryTemporary.Base += Base;
    VATEntryTemporary.Amount += Betrag;
    VATEntryTemporary.MODIFY;
    ENDE SONST BEGINNEN
    VATEntryTemporary := VATEntry2;
    VATEntryTemporary.INSERT;
    ENDE;

    ENDE SONST BEGINNEN
    VATEntryTemporary := VATEntry2;
    VATEntryTemporary.INSERT;
    ENDE;
    // Ende der hinzugefügten Zeilen.

    ENDE;

    TotalFields=Basis,Betrag;
    ...

    Vorhandener Code 3

     ...
    DataItemVarName=<Integer2>;
    OnPreDataItem=BEGIN
    VATBuffer.FIND('-');
    VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
    IF VATEntryTemporary.FINDFIRST THEN;
    CurrReport.CREATETOTALS(VATBuffer2.Base,VATBuffer2.Amount);
    Fin := FALSE;
    ...

    Ersatzcode 3

     ...
    DataItemVarName=<Integer2>;
    OnPreDataItem=BEGIN
    VATBuffer.FIND('-');

    // Folgende Zeile löschen.
    VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
    // Ende der gelöschten Zeile.

    IF VATEntryTemporary.FINDFIRST THEN;
    CurrReport.CREATETOTALS(VATBuffer2.Base,VATBuffer2.Amount);
    Fin := FALSE;
    ...

    Vorhandener Code 4

     ...
    WENN VATEntry.Type = VATEntry.Type::Purchase DANN BEGINNEN
    VATEntryTemporary.Amount := VATBuffer.Amount;
    VATDeductAmt := CheckDeductibleVAT(VATEEntryTemporary);

    // Folgende Zeilen löschen.
    VATEntryTemporary.NEXT;
    RecordTypePurchase(VATEntry2);
    // Ende der gelöschten Zeilen.

    ENDE;
    Fin := VATBuffer.NEXT = 0;
    ENDE;
    ...

    Ersatzcode 4

     ...
    WENN VATEntry.Type = VATEntry.Type::Purchase DANN BEGINNEN
    VATEntryTemporary.Amount := VATBuffer.Amount;
    VATDeductAmt := CheckDeductibleVAT(VATEEntryTemporary);

    // Fügen Sie die folgenden Zeilen hinzu.

    VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
    VATEntryTemporary.SETRANGE("VAT %",VATBuffer."VAT %");
    VATEntryTemporary.SETRANGE("EC %",VATBuffer."EC %");
    VATEntryTemporary.FINDSET;
    WIEDERHOLEN
    RecordTypePurchase(VATEntryTemporary);
    BIS VATEntryTemporary.NEXT = 0;
    // Ende der hinzugefügten Zeilen.

    ENDE;
    Fin := VATBuffer.NEXT = 0;
    ENDE;
    ...
  2. Ändern Sie den Code in „Globale Variablen" im Bericht „Make 340 Declaration" (10743) wie folgt:
    Vorhandener Code

     ...
    VATEntryTemporary@1100078: TEMPORÄRER Datensatz 254;
    TempDeclarationLines@1100149: TEMPORÄRER Datensatz 10744;
    TempVATEntry@1100007: TEMPORÄRER Datensatz 254;
    CommonDialogMgt@1100015: Codeeinheit 412;
    OutFile@1100016 : Datei;
    DeclarationNum@1100017 : Text[4];
    ...

    Ersatzcode

     ...
    VATEntryTemporary@1100078: TEMPORÄRER Datensatz 254;
    TempDeclarationLines@1100149: TEMPORÄRER Datensatz 10744;
    TempVATEntry@1100007: TEMPORÄRER Datensatz 254;

    // Fügen Sie die folgende Zeile hinzu.
    TempDtldVendLedgerEntry@1100115: TEMPORÄRER Datensatz 380;
    // Ende der hinzugefügten Zeile.

    CommonDialogMgt@1100015: Codeeinheit 412;
    OutFile@1100016 : Datei;
    DeclarationNum@1100017 : Text[4];
    ...
  3. Ändern Sie den Code in der RecordTypePurchase-Funktion im Bericht „Make 340 Declaration" (10743) wie folgt:
    Vorhandener Code

     ...
    ENDE SONST
    OperationDateText := FormatDate(VATEntryRec."Posting Date");

    // Folgende Zeilen löschen.
    WENN VATEntryRec."Document Type" IN [VATEntryRec."Document Type"::Payment,VATEntryRec."Document Type"::Refund] DANN BEGINNEN
    UnrealizedVATEntryNo := VATEntryRec."Unrealisierte MwSt.-Eintragsnr.";
    DocumentDate := VATEntryRec."Posting Date";
    WENN UnrealizedVATEntryNo <> 0, DANN BEGINNEN
    UnrealizedVATEntry.GET(UnrealizedVATEntryNo);
    OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
    DocumentDate := UnrealizedVATEntry."Dokumentdatum";
    // Ende der gelöschten Zeilen.

    ENDE;
    ENDE SONST
    UnrealizedVATEntryNo := 0;
    ...

    Ersatzcode

     ...
    ENDE SONST
    OperationDateText := FormatDate(VATEntryRec."Posting Date");

    // Fügen Sie die folgenden Zeilen hinzu.
    VATBuffer2.Base := VATBuffer.Base;
    VATBuffer2.Amount := VATBuffer.Amount;

    WENN VATEntryRec."Document Type" IN [VATEntryRec."Document Type"::Payment,VATEntryRec."Document Type"::Refund] DANN BEGINNEN
    UnrealizedVATEntryNo := VATEntryTemporary."Unrealisierte MwSt.-Eintragsnr.";
    DocumentDate := VATEntryTemporary."Posting Date";
    WENN UnrealizedVATEntryNo <> 0, DANN BEGINNEN
    UnrealizedVATEntry.GET(UnrealizedVATEntryNo);
    OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
    DocumentDate := UnrealizedVATEntry."Dokumentdatum";
    IF FindPmtOrderBillGrBankAcc(VATEntry.Type,VATEntry."Document No.") = '' THEN BEGIN
    VendorDocumentNo := UnrealizedVATEntry."External Document No.";
    VATBuffer2.Base := VATEntryTemporary.Base;
    VATBuffer2.Amount := VATEntryTemporary.Amount;
    ENDE;
    // Ende der hinzugefügten Zeilen.

    ENDE;
    ENDE SONST
    UnrealizedVATEntryNo := 0;
    ...
  4. Ändern Sie den Code in der CheckVLEApplication-Funktion im Bericht „Make 340 Declaration" (10743) wie folgt:
    Vorhandener Code

     ...
    PrevDeclarationNumEnable := ReplacementDeclaration;
    ENDE;

    BEGINNEN
    ENDE.
    }
    ...

    Ersatzcode

     ...
    PrevDeclarationNumEnable := ReplacementDeclaration;
    ENDE;

    // Fügen Sie die folgenden Zeilen hinzu.
    LOKALES PROZEDUR CheckVLEApplication@1100074(VATEntry@1100000: Datensatz 254): Boolean;
    VAR
    VendorLedgerEntry@1100001: Datensatz 25;
    DtldVendLedgEntry@1100002: Datensatz 380;
    CheckVendLedgEntry@1100003: Datensatz 25;
    UnrealizedVendLedgEntry@1100004: Ganzzahl;
    BEGINNEN
    FilterVendLedgerEntryByVATEntry(VendorLedgerEntry,VATEntry);
    UnrealizedVendLedgEntry := GetUnrealizedInvoiceVLENo(VATEntry."Unrealized VAT Entry No.");

    IF VendorLedgerEntry.FINDSET THEN
    WIEDERHOLEN
    DtldVendLedgEntry.RESET;
    DtldVendLedgEntry.SETRANGE(Unapplied,FALSE);
    DtldVendLedgEntry.SETRANGE("Entry Type",DtldVendLedgEntry."Entry Type"::Application);
    DtldVendLedgEntry.SETRANGE("Angewandte Vend. Ledger Entry No.",VendorLedgerEntry."Entry No.");
    WENN UnrealizedVendLedgEntry <> 0 DANN
    DtldVendLedgEntry.SETRANGE("Kreditorenbucheintrag Nr.",UnrealizedVendLedgEntry);

    IF DtldVendLedgEntry.FINDSET THEN
    WIEDERHOLEN
    IF (DtldVendLedgEntry."Kreditorenbucheintragsnr." <> DtldVendLedgEntry."Angewandte Vend. Ledgereintragsnr.") UND
    CheckVendLedgEntry.GET(DtldVendLedgEntry."Kreditorenbucheintrag Nr.")
    DANN BEGINNEN
    IF ExistDtldVLE(DtldVendLedgEntry."Kreditorenposten-Nr.",DtldVendLedgEntry."Angewandte Vend.-Postennr.") THEN
    EXIT(FALSE);
    InsertTempDtldVLE(DtldVendLedgEntry."Kreditorenbucheintrag Nr.",DtldVendLedgEntry."Angewandte Vend. Ledgereintragsnr.");
    EXIT(TRUE);
    ENDE;
    BIS DtldVendLedgEntry.NEXT = 0
    Sonst beginnen
    DtldVendLedgEntry.SETRANGE("Angewandter Verkauf. Hauptbucheintragsnr.");
    DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendorLedgerEntry."Entry No.");
    WENN UnrealizedVendLedgEntry <> 0 DANN
    DtldVendLedgEntry.SETRANGE("Angewandte Vend. Ledger Entry No.",UnrealizedVendLedgEntry);

    IF DtldVendLedgEntry.FINDSET THEN
    WIEDERHOLEN
    IF CheckVendLedgEntry.GET(DtldVendLedgEntry."Applied Vend. Ledger Entry No.") THEN BEGIN
    IF ExistDtldVLE(DtldVendLedgEntry."Applied Vend. Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No.") THEN
    EXIT(FALSE);
    InsertTempDtldVLE(DtldVendLedgEntry."Applied Vend. Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No.");
    EXIT(TRUE);
    ENDE;
    BIS DtldVendLedgEntry.NEXT = 0;
    ENDE;
    BIS VendorLedgerEntry.NEXT = 0;

    EXIT(TRUE);
    ENDE;

    LOKALE VERFAHREN GetUnrealizedInvoiceVLENo@1100075(VATEntryNo@1100000 : Integer) : Integer;
    VAR
    VATEntry@1100002: Datensatz 254;
    VendLedgEntry@1100001: Datensatz 25;
    BEGINNEN
    WENN NICHT VATEntry.GET(VATEntryNo) DANN
    EXIT(0);
    FilterVendLedgerEntryByVATEntry(VendLedgEntry,VATEntry);
    WENN VendLedgEntry.FINDFIRST DANN
    EXIT(VendLedgEntry."Entry No.");
    EXIT(0);
    ENDE;

    LOKALE VERFAHREN FilterVendLedgerEntryByVATEntry@1100087(VAR VendLedgEntry@1100001: Datensatz 25;VATEntry@1100000: Datensatz 254);
    BEGINNEN
    VendLedgEntry.SETRANGE("Lieferanten-Nr.,VATEntry."Rechnungs-/Zahlungsempfänger-Nr.");
    VendLedgEntry.SETRANGE("Posting Date",VATEntry."Posting Date");
    VendLedgEntry.SETRANGE("Dokumenttyp",VATEntry."Dokumenttyp");
    VendLedgEntry.SETRANGE("Document No.",VATEntry."Document No.");
    VendLedgEntry.SETRANGE("Transaktions-Nr.,VATEntry."Transaktions-Nr.");
    ENDE;

    LOKALES PROZEDUR HasBeenRealized@1100064(VATEntryNo@1100000 : Integer) : Boolean;
    VAR
    UnrealizedVATEntry@1100001: Datensatz 254;
    BEGINNEN
    UnrealizedVATEntry.SETRANGE("Nicht realisierte Umsatzsteuer-Eintragsnummer.",VATEntryNo);
    EXIT(NOT UnrealizedVATEntry.ISEMPTY);
    ENDE;

    LOKALE PROZEDUR ExistDtldVLE@1100195(VLENo@1100001 : Ganzzahl;AppliedVLENo@1100000 : Ganzzahl) : Boolean;
    BEGINNEN
    TempDtldVendLedgerEntry.SETRANGE("Kreditorenbucheintragsnr.",VLENo);
    TempDtldVendLedgerEntry.SETRANGE("Applied Vend. Ledger Entry No.",AppliedVLENo);
    EXIT(NOT TempDtldVendLedgerEntry.ISEMPTY);
    ENDE;

    LOKALE PROZEDUR InsertTempDtldVLE@1100191(VLENo@1100000: Ganzzahl;AppliedVLENo@1100001: Ganzzahl);
    BEGINNEN
    TempDtldVendLedgerEntry.INIT;
    IF TempDtldVendLedgerEntry.FINDLAST THEN;
    TempDtldVendLedgerEntry."Eintrag Nr." += 1;
    TempDtldVendLedgerEntry."Kreditorenbucheintrag Nr." := VLENo;
    TempDtldVendLedgerEntry."Angewandte Verkaufsbucheintragsnr." := AppliedVLENo;
    TempDtldVendLedgerEntry.INSERT;
    ENDE;

    // Ende der hinzugefügten Zeilen.

    BEGINNEN
    ENDE.
    }
    ...

Voraussetzungen

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

  • Die spanische Version von Microsoft Dynamics NAV 2009 R2

  • Die spanische Version von Microsoft Dynamics NAV 2009 SP1

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