Saturday, March 2, 2024

Wechselkurse werden falsch aktualisiert, wenn Sie Microsoft Dynamics CRM mit Microsoft Dynamics NAV 2009 R2 integrieren, indem Sie den Connector für Microsoft Dynamics verwenden – Microsoft-Support

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

Symptome

Gehen Sie davon aus, dass Sie Microsoft Dynamics CRM mit Microsoft Dynamics NAV 2009 R2 integrieren, indem Sie den Connector für Microsoft Dynamics Feature Pack 5 verwenden. In bestimmten Szenarios werden Wechselkurse in Microsoft Dynamics CRM falsch aktualisiert.
Wenn Sie Wechselkurse in Microsoft Dynamics NAV 2009 R2 aktualisieren, erhalten Sie die folgende Fehlermeldung:

Bei der Verarbeitung von [Währungsumrechnungskurse zu Währung] ist ein Fehler aufgetreten …
Transaktionswährung mit ID = <GUID> existiert nicht.

In diesem Fall wird nur der erste Datensatz der Wechselkurse mit Microsoft Dynamics CRM synchronisiert. Wenn das System nachfolgende Datensätze, die in die Wechselkurstabelle eingegeben werden, mit späteren Startdaten synchronisiert, tritt dieser Fehler auf.

Ursache

Dieses Problem tritt auf, weil der zuletzt geänderte Wechselkurs und nicht der aktuelle Wechselkurs für die jeweilige Währung mithilfe des Connectors für Microsoft Dynamics mit Microsoft Dynamics CRM synchronisiert wird.

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:

  1. Wenden Sie die folgenden Codeänderungen in Microsoft Dynamics NAV 2009 R2 an:

    1. Erstellen Sie wie folgt eine neue GetCurrencyFactor-Funktion in der Währungswechselkurstabelle (330):

       VERFAHREN GetCurrentCurrencyFactor@14(CurrencyCode@1000 : Code[10]): Decimal;
      BEGINNEN
      SETRANGE("Währungscode",CurrencyCode);
      WENN FINDLAST DANN
      EXIT("Wechselkursbetrag" / "Relationaler Wechselkursbetrag")
      ENDE;
    2. Erstellen Sie wie folgt eine neue SetCurrencyFactor-Funktion in der Währungswechselkurstabelle (330):

       VERFAHREN SetCurrentCurrencyFactor@15(CurrencyCode@1000: Code[10];CurrencyFactor@1001: Dezimal);
      VAR
      RateForTodayExists@1002 : Boolean;
      BEGINNEN
      "Währungscode" := WährungsCode;
      TESTFIELD("Währungscode");
      RateForTodayExists := GET(CurrencyCode,TODAY);
      „Wechselkursbetrag" := 1;
      „Relationaler Wechselkursbetrag" := 1 / Währungsfaktor;
      „Adjustment Exchange Rate Amount" := „Exchange Rate Amount";
      „Relational Adjmt Exchange Rate Amt" := „Relational Exchange Rate Amount";
      WENN RateForTodayExists DANN BEGINNEN
      "Relationaler Währungscode" := '';
      ÄNDERN;
      ENDE SONST BEGINNEN
      „Startdatum" := HEUTE;
      EINFÜGEN;
      ENDE;
      ENDE;
    3. Fügen Sie im Formular „Währungen" (5) eine neue globale Variable hinzu und geben Sie die Variable dann wie folgt an:

      • Name : Währungsfaktor

      • Datentyp : Dezimal

    4. Fügen Sie das Feld „Währungsfaktor" (46) im Formular „Währungen" (5) hinzu.

    5. Fügen Sie im Währungsformular (5) eine neue lokale Variable im Auslöser „Währungsfaktor – OnValidate" hinzu und geben Sie die Variable dann wie folgt an:

      • Name : WährungExchangeRate

      • Datentyp : Datensatz

      • Untertyp : Wechselkurs

    6. Fügen Sie den folgenden Code im Währungsfaktor – OnValidate-Trigger im Währungsformular (5) hinzu:

       CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor); 
    7. Fügen Sie im OnAfterGetRecord-Trigger im Währungsformular (5) eine neue lokale Variable hinzu und geben Sie die Variable dann wie folgt an:

      • Name : WährungExchangeRate

      • Datentyp : Datensatz

      • Untertyp : Wechselkurs

    8. Fügen Sie den folgenden Code im OnAfterGetRecord-Trigger im Währungsformular (5) hinzu:

       Währungsfaktor := WährungExchangeRate.GetCurrentCurrencyFactor(Code); 
    9. Fügen Sie auf der Seite „Währungen" (5) eine neue globale Variable hinzu und geben Sie die Variable dann wie folgt an:

      • Name : Währungsfaktor

      • Datentyp : Dezimal

    10. Fügen Sie das Feld „Währungsfaktor" auf der Seite „Währungen" (5) hinzu und geben Sie das Feld dann wie folgt an:

      • Name : Währungsfaktor

      • Bildunterschrift : Währungsfaktor

      • Typ : Feld

      • SourceExpr : Währungsfaktor

    11. Fügen Sie eine neue lokale Variable im Trigger „Währungsfaktor – OnValidate" auf der Seite „Währungen" (5) hinzu und geben Sie die Variable dann wie folgt an:

      • Name : WährungExchangeRate

      • Datentyp : Datensatz

      • Untertyp : Wechselkurs

    12. Fügen Sie den folgenden Code im Auslöser „Währungsfaktor – OnValidate" auf der Seite „Währungen" (5) hinzu:

       CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor); 
    13. Fügen Sie im OnAfterGetRecord-Trigger auf der Seite „Währungen" (5) eine neue lokale Variable hinzu und geben Sie die Variable dann wie folgt an:

      • Name : WährungExchangeRate

      • Datentyp : Datensatz

      • Untertyp : Wechselkurs

    14. Fügen Sie den folgenden Code im OnAfterGetRecord-Trigger auf der Seite „Währungen" (5) hinzu:

       Währungsfaktor := WährungExchangeRate.GetCurrentCurrencyFactor(Code); 
    15. Fügen Sie eine neue lokale Variable in der Funktion UpdateParentIntegrationRecord in der Integration Management-Codeunit (5150) hinzu und geben Sie die Variable dann wie folgt an:

      • Name : Währung

      • Datentyp : Datensatz

      • Untertyp : Währung

    16. Ändern Sie den Code in der UpdateParentIntegrationRecord-Funktion in der Integration Management-Codeunit (5150) wie folgt:
      Vorhandener Code

       ...
      DATENBANK::"Lieferadresse":
      BEGINNEN
      FieldRef1 := RecRef.FIELD(1); // "Kunden-Nr."
      WENN Customer.GET(FieldRef1.VALUE) THEN BEGIN
      ParentRecRef.GETTABLE(Customer);
      InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);
      ENDE;
      ENDE;
      ENDE;

      Ersatzcode

       ...

      DATENBANK::"Lieferadresse":
      BEGINNEN
      FieldRef1 := RecRef.FIELD(1); // "Kunden-Nr."
      WENN Customer.GET(FieldRef1.VALUE) THEN BEGIN
      ParentRecRef.GETTABLE(Customer);
      InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);
      ENDE;
      ENDE;

      // Fügen Sie die folgenden Zeilen hinzu.
      DATENBANK::"Wechselkurs":
      BEGINNEN
      FieldRef1 := RecRef.FIELD(1); // "Währungscode"
      WENN Währung.GET(FieldRef1.VALUE) DANN BEGIN
      ParentRecRef.GETTABLE(Currency);
      InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);
      ENDE;
      ENDE;
      // Ende der Zeilen.

      ENDE;
    17. Ändern Sie den Code in der EnableConnector-Funktion in der Integration Management-Codeunit (5150) wie folgt:
      Vorhandener Code

       ...
      SetupWebServicePages(FORM::"Lieferadresse",DATABASE::"Lieferadresse");
      SetupWebServicePages(FORM::"Kontaktkarte",DATABASE::Kontakt);

      //Löschen Sie die folgende Zeile.
      SetupWebServicePages(FORM::"Currency Exchange Rates",DATABASE::"Currency Exchange Rate");

      SetupWebServicePages(FORM::"Customer Disc. Groups",DATABASE::"Customer Discount Group");
      SetupWebServicePages(FORM::"Item Disc. Groups",DATABASE::"Item Discount Group");
      ...

      Ersatzcode

       ...
      SetupWebServicePages(FORM::"Lieferadresse",DATABASE::"Lieferadresse");
      SetupWebServicePages(FORM::"Kontaktkarte",DATABASE::Kontakt);
      SetupWebServicePages(FORM::"Customer Disc. Groups",DATABASE::"Customer Discount Group");
      SetupWebServicePages(FORM::"Item Disc. Groups",DATABASE::"Item Discount Group");
      ...
    18. Ändern Sie den Code in der SetupIntegrationTable-Funktion in der Integration Management-Codeunit (5150) wie folgt:
      Vorhandener Code

       ...
      InitializeIntegrationRecords(DATABASE::"Maßeinheit");
      InitializeIntegrationRecords(DATABASE::"Lieferadresse");
      InitializeIntegrationRecords(DATABASE::Contact);

      //Löschen Sie die folgende Zeile.
      InitializeIntegrationRecords(DATABASE::"Currency Exchange Rate");

      InitializeIntegrationRecords(DATABASE::"Customer Discount Group");
      ...

      Ersatzcode

       ...
      InitializeIntegrationRecords(DATABASE::"Maßeinheit");
      InitializeIntegrationRecords(DATABASE::"Lieferadresse");
      InitializeIntegrationRecords(DATABASE::Contact);
      InitializeIntegrationRecords(DATABASE::"Customer Discount Group");
      ...
    19. Ändern Sie den Code in der IsIntergrationRecord-Funktion in der Integration Management-Codeunit (5150) wie folgt:
      Vorhandener Code

       ...
      DATENBANK::"Maßeinheit",
      DATENBANK::"Lieferadresse",
      DATENBANK::Kontakt,

      //Löschen Sie die folgende Zeile.
      DATENBANK::"Wechselkurs",

      DATENBANK::"Kundenrabattgruppe",
      ...

      Ersatzcode

       ...
      DATENBANK::"Maßeinheit",
      DATENBANK::"Lieferadresse",
      DATENBANK::Kontakt,
      DATENBANK::"Kundenrabattgruppe",
      ...
    20. Ändern Sie den Code in der IsIntegrationRecordChild-Funktion in der Integration Mangement-Codeunit (5150) wie folgt:
      Vorhandener Code

       ...
      IF TableID IN
      [DATABASE::"Sales Line",
      DATABASE::"Sales Invoice Line"]
      DANN
      EXIT(TRUE);
      EXIT(FALSE);
      ...

      Ersatzcode

       ...
      IF TableID IN
      [DATABASE::"Sales Line",

      // Fügen Sie die folgende Zeile hinzu.
      DATENBANK::"Wechselkurs",

      DATABASE::"Sales Invoice Line"]
      DANN
      EXIT(TRUE);
      EXIT(FALSE);
      ...
  2. Installieren Sie den Connector für Microsoft Dynamics Feature Pack 6.
    Hinweis Nachdem Sie den Connector für Microsoft Dynamics Feature Pack 6 installiert haben, müssen Sie die Karte „NAV-Währungswechselkurse zu Währung" im Connector deaktivieren und die neue Karte „NAV-Währungen zu Währung" importieren, die NAV-Adapterkonfiguration erneut ausführen und dann aktivieren die neue Karte.

Voraussetzungen

Um diesen Hotfix anwenden zu können, muss Microsoft Dynamics NAV 2009 R2 installiert sein.

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