你目前正处于脱机状态,正在等待 Internet 重新连接

当您通过使用 Microsoft 动态连接线与 Microsoft 动态导航 2009 R2 集成 Microsoft Dynamics CRM 货币汇率是不正确地更新

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 2597312
本文适用于 Microsoft 动态导航,为所有国家/地区和语言的所有语言环境。
症状
假定您与 Microsoft 动态导航 2009 R2 集成 Microsoft Dynamics CRM,通过连接器 Microsoft 动态功能包 5。在某些情况下,货币汇率 Microsoft Dynamics CRM 中不正确地更新。
当您在更新中的 Microsoft 动态导航 2009 R2 的货币汇率时,您会收到以下错误消息:
[为货币的货币汇率] … 处理时遇到了一个错误
Id 为 TransactionCurrency =<guid>不存在。</guid>
在此情况下,只有第一个记录的币种汇率被同步到 Microsoft Dynamics CRM。系统同步时具有更高版本的开始日期输入币种汇率表中的后续记录,则会发生此错误。
原因
因为最后一次更改后的货币汇率,代替当前的汇率,针对特定的货币,都通过连接器为 Microsoft 动态同步到 Microsoft Dynamics CRM,将出现此问题。
解决方案

修补程序信息

现在可以从 Microsoft 获得支持的修补程序。但是,它只用于解决本文中描述的问题。它仅适用于出现这一特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待下一个 Microsoft 动态导航 2009 service pack 或包含此修复程序的下一个 Microsoft 动态导航版本。

注意 在特殊情况下,通常免调用可能会被取消如果技术支持专业人员为 Microsoft 动态和相关的产品的支持费用确定特定的更新将解决您的问题。正常收取支持费用将应用于特定的更新不计的其他支持问题和事项。

安装信息

Microsoft 提供的编程示例仅用于说明,没有任何明示或暗示的担保。这包括但不限于对适销性或对特定用途的适用性的暗示担保。本文假定您熟悉与演示的编程语言和用于创建和调试过程的工具。Microsoft 的支持工程师可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程以满足您的特定要求。

注意 在安装此修补程序之前,验证所有 Microsoft Navision 客户端用户都将被都注销系统。这包括 Microsoft Navision 应用程序服务 (NAS) 客户端用户。您应该在实现此修补程序时,在登录的唯一客户端用户。

若要实现此修补程序,您必须具有开发人员许可证。

我们建议在 Windows 登录窗口中或数据库登录窗口中的用户帐户具有"SUPER"角色 id。如果"SUPER"角色 ID 不能分配的用户帐户,您必须验证的用户帐户具有下列权限:
  • 您将更改该对象的修改权限。
  • 对于执行权限 系统对象 ID ™ 5210 对象和 系统对象 ID 9015 对象。


注意 您不必具有数据存储库的权限,除非您需要执行数据修复。

代码更改

注意 始终测试代码修复在受控环境中之前,应用到生产计算机的修补程序。
若要解决此问题,请按照下列步骤:
  1. 应用以下的代码更改,在 Microsoft 动态导航 2009 R2 中:
    1. 创建新的 GetCurrencyFactor 在正常工作的币种汇率表 (330),如下所示:
      PROCEDURE GetCurrentCurrencyFactor@14(CurrencyCode@1000 : Code[10]) : Decimal;    BEGIN      SETRANGE("Currency Code",CurrencyCode);      IF FINDLAST THEN        EXIT("Exchange Rate Amount" / "Relational Exch. Rate Amount")    END;
    2. 创建新的 SetCurrencyFactor 在正常工作的币种汇率表 (330),如下所示:
      PROCEDURE SetCurrentCurrencyFactor@15(CurrencyCode@1000 : Code[10];CurrencyFactor@1001 : Decimal);    VAR      RateForTodayExists@1002 : Boolean;    BEGIN      "Currency Code" := CurrencyCode;      TESTFIELD("Currency Code");      RateForTodayExists := GET(CurrencyCode,TODAY);      "Exchange Rate Amount" := 1;      "Relational Exch. Rate Amount" := 1 / CurrencyFactor;      "Adjustment Exch. Rate Amount" := "Exchange Rate Amount";      "Relational Adjmt Exch Rate Amt" := "Relational Exch. Rate Amount";     IF RateForTodayExists THEN BEGIN       "Relational Currency Code" := '';       MODIFY;     END ELSE BEGIN       "Starting Date" := TODAY;       INSERT;     END;    END;
    3. (5)、 货币窗体中添加新的全局变量,然后指定该变量,如下所示:
      • 名称: CurrencyFactor
      • 数据类型: 十进制
    4. 添加 货币因素 (5) 中的货币窗体中的字段 (46)。
    5. 添加新的本地变量中 货币因素-OnValidate 触发窗体中的货币 (5),然后指定该变量,如下所示:
      • 名称: CurrencyExchangeRate
      • 数据类型: 记录
      • 子类型: 货币汇率
    6. 下面的代码中添加 货币因素-OnValidate 触发窗体中的货币 (5):
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    7. 添加新的本地变量中 OnAfterGetRecord 触发窗体中的货币 (5),然后指定该变量,如下所示:
      • 名称: CurrencyExchangeRate
      • 数据类型: 记录
      • 子类型: 货币汇率
    8. 下面的代码中添加 OnAfterGetRecord 触发窗体中的货币 (5):
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    9. (5) 中的货币页中添加一个新的全局变量,然后指定该变量,如下所示:
      • 名称: CurrencyFactor
      • 数据类型: 十进制
    10. 添加 货币因素 (5) 中的货币页中字段,然后再指定的字段,如下所示:
      • 名称: CurrencyFactor
      • 标题: 货币因素
      • 类型: 字段
      • SourceExpr: CurrencyFactor
    11. 添加新的本地变量中 货币因素-OnValidate 在货币页 (5)、 触发,然后指定该变量,如下所示:
      • 名称: CurrencyExchangeRate
      • 数据类型: 记录
      • 子类型: 货币汇率
    12. 下面的代码中添加 货币因素-OnValidate 触发 (5) 中的货币页中:
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    13. 添加新的本地变量中 OnAfterGetRecord 在货币页 (5)、 触发,然后指定该变量,如下所示:
      • 名称: CurrencyExchangeRate
      • 数据类型: 记录
      • 子类型: 货币汇率
    14. 下面的代码中添加 OnAfterGetRecord 触发 (5) 中的货币页中:
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    15. 添加新的本地变量中 UpdateParentIntegrationRecord 集成管理 codeunit (5150),在正常工作,然后指定该变量,如下所示:
      • 名称: 货币
      • 数据类型: 记录
      • 子类型: 货币
    16. 更改中的代码 UpdateParentIntegrationRecord 在正常工作的集成管理 codeunit (5150),如下所示:
      现有代码
      ...  DATABASE::"Ship-to Address":    BEGIN      FieldRef1 := RecRef.FIELD(1); // "Customer No."      IF Customer.GET(FieldRef1.VALUE) THEN BEGIN        ParentRecRef.GETTABLE(Customer);        InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);      END;    END;END;
      替换代码
      ...   DATABASE::"Ship-to Address":    BEGIN      FieldRef1 := RecRef.FIELD(1); // "Customer No."      IF Customer.GET(FieldRef1.VALUE) THEN BEGIN        ParentRecRef.GETTABLE(Customer);        InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);      END;    END;// Add the following lines.  DATABASE::"Currency Exchange Rate":    BEGIN      FieldRef1 := RecRef.FIELD(1); // "Currency Code"      IF Currency.GET(FieldRef1.VALUE) THEN BEGIN        ParentRecRef.GETTABLE(Currency);        InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);      END;    END;// End of the lines.END;
    17. 更改中的代码 EnableConnector 在正常工作的集成管理 codeunit (5150),如下所示:
      现有代码
      ...SetupWebServicePages(FORM::"Ship-to Address",DATABASE::"Ship-to Address");SetupWebServicePages(FORM::"Contact Card",DATABASE::Contact);//Delete the following line.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");...
      替换代码
      ...SetupWebServicePages(FORM::"Ship-to Address",DATABASE::"Ship-to Address");SetupWebServicePages(FORM::"Contact Card",DATABASE::Contact);SetupWebServicePages(FORM::"Customer Disc. Groups",DATABASE::"Customer Discount Group");SetupWebServicePages(FORM::"Item Disc. Groups",DATABASE::"Item Discount Group");...
    18. 更改中的代码 SetupIntegrationTable 在正常工作的集成管理 codeunit (5150),如下所示:
      现有代码
      ...InitializeIntegrationRecords(DATABASE::"Unit of Measure");InitializeIntegrationRecords(DATABASE::"Ship-to Address");InitializeIntegrationRecords(DATABASE::Contact);//Delete the following line.InitializeIntegrationRecords(DATABASE::"Currency Exchange Rate");InitializeIntegrationRecords(DATABASE::"Customer Discount Group");...
      替换代码
      ...InitializeIntegrationRecords(DATABASE::"Unit of Measure");InitializeIntegrationRecords(DATABASE::"Ship-to Address");InitializeIntegrationRecords(DATABASE::Contact);InitializeIntegrationRecords(DATABASE::"Customer Discount Group");...
    19. 更改中的代码 IsIntergrationRecord 在正常工作的集成管理 codeunit (5150),如下所示:
      现有代码
      ...DATABASE::"Unit of Measure",DATABASE::"Ship-to Address",DATABASE::Contact,//Delete the following line.DATABASE::"Currency Exchange Rate",DATABASE::"Customer Discount Group",...
      替换代码
      ...DATABASE::"Unit of Measure",DATABASE::"Ship-to Address",DATABASE::Contact,DATABASE::"Customer Discount Group",...
    20. 更改中的代码 IsIntegrationRecordChild 在正常工作的集成管理 codeunit (5150),如下所示:
      现有代码
      ...IF TableID IN  [DATABASE::"Sales Line",   DATABASE::"Sales Invoice Line"]THEN  EXIT(TRUE);EXIT(FALSE);...
      替换代码
      ...IF TableID IN  [DATABASE::"Sales Line",   // Add the following line.   DATABASE::"Currency Exchange Rate",   DATABASE::"Sales Invoice Line"]THEN  EXIT(TRUE);EXIT(FALSE);...
  2. 安装 Microsoft 动态功能包 6 连接器。
    注意对于 Microsoft 动态功能包 6 安装连接器后,必须停用该连接器中的"导航货币汇率为货币"映射和导入新的"第货币到货币导航"地图、 重新运行导航适配器配置,然后激活新映射。

系统必备组件

您必须拥有要应用此修补程序安装 Microsoft 动态导航 2009 R2。

删除信息

您不能删除此修补程序。
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的一个问题。
注意 这是直接从 Microsoft 支持组织内创建"快速发布"文章。此处包含的信息按原样提供,如-是为了响应新出现的问题。由于中使其可用的速度,而导致的资料可能包括打字错误,而且可能在任何时候,恕不另行通知进行修订。请参阅 使用的条款 有关其他事项。

属性

文章 ID:2597312 - 上次审阅时间:08/30/2011 02:11:00 - 修订版本: 3.0

Microsoft Dynamics NAV 2009

  • kbqfe kbmbsmigrate kbmbscodefix kberrmsg kbsurveynew kbmt KB2597312 KbMtzh
反馈
one; " src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">