Taxas de câmbio são atualizadas incorretamente quando você integrar o Microsoft Dynamics CRM com o Microsoft Dynamics NAV 2009 R2 usando o conector do Microsoft Dynamics

Traduções de Artigos Traduções de Artigos
Artigo: 2597312 - Ver produtos para os quais este artigo se aplica.
Este artigo se aplica ao Microsoft Dynamics NAV para todos os países e todas as localidades de idioma.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Suponha que você integrar o Microsoft Dynamics CRM com o Microsoft Dynamics NAV 2009 R2 usando o conector para o Microsoft Dynamics recurso Pack 5. Em determinados cenários, taxas de câmbio são atualizadas incorretamente no Microsoft Dynamics CRM.
Quando você atualiza as taxas de câmbio da moeda no Microsoft Dynamics NAV 2009 R2, você pode receber a seguinte mensagem de erro:
[Taxas de câmbio para a moeda] encontrou um erro ao processar ?
TransactionCurrency com ID = <guid>não existe.</guid>
Nessa situação, apenas o primeiro registro de taxas de câmbio da moeda é sincronizado com o Microsoft Dynamics CRM. Quando o sistema sincroniza os registros subseqüentes que são inseridos na tabela a taxa de câmbio com datas de início posteriores, este erro ocorre.

Causa

Esse problema ocorre porque a taxa de câmbio de moeda alterado última, em vez de taxa de câmbio atual para a moeda específica, é sincronizada para Microsoft Dynamics CRM usando o conector do Microsoft Dynamics.

Resolução

Informações sobre o hotfix

Um hotfix compatível foi disponibilizado pela Microsoft. No entanto, ela é destinada apenas para corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico. Este hotfix pode receber testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo service pack do Microsoft Dynamics NAV 2009 ou a próxima versão do Microsoft Dynamics NAV que contém esse hotfix.

Observação Em alguns casos, taxas cobradas para suporte a chamadas podem ser canceladas se um profissional de suporte técnico do Microsoft Dynamics e produtos relacionados determina que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões de suporte adicionais e problemas que não se qualificam à atualização específica em questão.

Informações sobre a instalação

A Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação um propósito específico. Este artigo presume que você esteja familiarizado com a linguagem de programação que está sendo demonstrada e com as ferramentas usadas para criar e depurar procedimentos. Engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender a necessidades específicas.

Observação Antes de instalar esse hotfix, verifique se todos os usuários do Microsoft Navision cliente fez logoff do sistema. Isso inclui o Microsoft Navision Application Server (NAS) os usuários do cliente. Você deve ser o único usuário do cliente que está conectado ao implementar esse hotfix.

Para implementar esse hotfix, você deve ter uma licença de desenvolvedor.

Recomendamos que a conta de usuário na janela Logins do Windows ou na janela de Logins de banco de dados seja atribuída a ID de função "SUPER". Se a conta de usuário não pode ser atribuída a ID de função "SUPER", você deve verificar se a conta de usuário tem as seguintes permissões:
  • A permissão Modificar para o objeto que você estará alterando.
  • A permissão de execução para o ID de objeto do sistema 5210 objeto e para o ID de objeto de sistema 9015 objeto.


Observação Não é necessário ter direitos para os armazenamentos de dados, a menos que você precise executar o reparo de dados.

Alterações de código

Observação Sempre teste código corrige em um ambiente controlado antes de aplicar as correções para os computadores de produção.
Para resolver esse problema, siga estas etapas:
  1. Aplique as seguintes alterações de código no Microsoft Dynamics NAV 2009 R2:
    1. Criar um novo GetCurrencyFactor função da tabela de taxa de câmbio (330) da seguinte maneira:
      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. Criar um novo SetCurrencyFactor função da tabela de taxa de câmbio (330) da seguinte maneira:
      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. Adicionar uma nova variável global no formulário moedas (5) e, em seguida, especifique a variável da seguinte maneira:
      • Nome: CurrencyFactor
      • Tipo de dados: Decimal
    4. Adicionar a Fator de unidade monetária campo (46) do formulário de moedas (5).
    5. Adicionar uma nova variável local no Fator de unidade monetária - OnValidate acionar o formulário de moedas (5) e, em seguida, especifique a variável da seguinte maneira:
      • Nome: CurrencyExchangeRate
      • Tipo de dados: Registro
      • Subtipo: Taxa de câmbio
    6. Adicione o seguinte código na Fator de unidade monetária - OnValidate acionar o formulário de moedas (5):
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    7. Adicionar uma nova variável local no OnAfterGetRecord acionar o formulário de moedas (5) e, em seguida, especifique a variável da seguinte maneira:
      • Nome: CurrencyExchangeRate
      • Tipo de dados: Registro
      • Subtipo: Taxa de câmbio
    8. Adicione o seguinte código na OnAfterGetRecord acionar o formulário de moedas (5):
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    9. Adicionar uma nova variável global na página de moedas (5) e, em seguida, especifique a variável da seguinte maneira:
      • Nome: CurrencyFactor
      • Tipo de dados: Decimal
    10. Adicionar a Fator de unidade monetária Na página de moedas (5) de campo e, em seguida, especifique o campo da seguinte maneira:
      • Nome: CurrencyFactor
      • Legenda: Fator de unidade monetária
      • Tipo: Campo
      • SourceExpr: CurrencyFactor
    11. Adicionar uma nova variável local no Fator de unidade monetária - OnValidate disparar na página de moedas (5) e, em seguida, especifique a variável da seguinte maneira:
      • Nome: CurrencyExchangeRate
      • Tipo de dados: Registro
      • Subtipo: Taxa de câmbio
    12. Adicione o seguinte código na Fator de unidade monetária - OnValidate disparar na página de moedas (5):
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    13. Adicionar uma nova variável local no OnAfterGetRecord disparar na página de moedas (5) e, em seguida, especifique a variável da seguinte maneira:
      • Nome: CurrencyExchangeRate
      • Tipo de dados: Registro
      • Subtipo: Taxa de câmbio
    14. Adicione o seguinte código na OnAfterGetRecord disparar na página de moedas (5):
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    15. Adicionar uma nova variável local no UpdateParentIntegrationRecord função na integração de gerenciamento codeunit (5150) e, em seguida, especifique a variável da seguinte maneira:
      • Nome: Moeda
      • Tipo de dados: Registro
      • Subtipo: Moeda
    16. Altere o código a UpdateParentIntegrationRecord função na integração de gerenciamento codeunit (5150) da seguinte maneira:
      Código existente
      ...
        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;
      Código de substituição
      ...
       
        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. Altere o código a EnableConnector função na integração de gerenciamento codeunit (5150) da seguinte maneira:
      Código existente
      ...
      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");
      ...
      Código de substituição
      ...
      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. Altere o código a SetupIntegrationTable função na integração de gerenciamento codeunit (5150) da seguinte maneira:
      Código existente
      ...
      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");
      ...
      Código de substituição
      ...
      InitializeIntegrationRecords(DATABASE::"Unit of Measure");
      InitializeIntegrationRecords(DATABASE::"Ship-to Address");
      InitializeIntegrationRecords(DATABASE::Contact);
      InitializeIntegrationRecords(DATABASE::"Customer Discount Group");
      ...
    19. Altere o código a IsIntergrationRecord função na integração de gerenciamento codeunit (5150) da seguinte maneira:
      Código existente
      ...
      DATABASE::"Unit of Measure",
      DATABASE::"Ship-to Address",
      DATABASE::Contact,
      
      //Delete the following line.
      DATABASE::"Currency Exchange Rate",
      
      DATABASE::"Customer Discount Group",
      ...
      Código de substituição
      ...
      DATABASE::"Unit of Measure",
      DATABASE::"Ship-to Address",
      DATABASE::Contact,
      DATABASE::"Customer Discount Group",
      ...
    20. Altere o código a IsIntegrationRecordChild função na integração de gerenciamento codeunit (5150) da seguinte maneira:
      Código existente
      ...
      IF TableID IN
        [DATABASE::"Sales Line",
         DATABASE::"Sales Invoice Line"]
      THEN
        EXIT(TRUE);
      EXIT(FALSE);
      ...
      Código de substituição
      ...
      IF TableID IN
        [DATABASE::"Sales Line",
      
         // Add the following line.
         DATABASE::"Currency Exchange Rate",
      
         DATABASE::"Sales Invoice Line"]
      THEN
        EXIT(TRUE);
      EXIT(FALSE);
      ...
  2. Instale o conector para o Microsoft Dynamics Feature Pack 6.
    ObservaçãoDepois de instalar o conector para o Microsoft Dynamics recurso Pack 6, você deve desativar o mapa de "NAV moeda taxas de câmbio para moeda" no conector e importar o novo mapa "NAV moedas para moeda", execute novamente a configuração do adaptador NAV e em seguida, ative o novo mapa.

Pré-requisitos

Você deve ter o Microsoft Dynamics NAV 2009 R2 instalado para aplicar esse hotfix.

Informações sobre a remoção

Você não pode remover esse hotfix.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Observação Este é um artigo "FAST publicar" criado diretamente de dentro da organização de suporte da Microsoft. As informações contidas neste documento são fornecidas como-está em resposta aos problemas emergentes. Como resultado de velocidade em disponibilizá-lo, os materiais podem incluir erros tipográficos e podem ser revisados a qualquer momento sem prévio aviso. Consulte Termos de uso Para obter outras considerações.

Propriedades

Artigo: 2597312 - Última revisão: 30 de agosto de 2011 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Dynamics NAV 2009
Palavras-chave: 
kbqfe kbmbsmigrate kbmbscodefix kberrmsg kbsurveynew kbmt KB2597312 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 2597312

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com