Tipos de cambio de moneda se actualizan incorrectamente al integrar Microsoft Dynamics CRM con Microsoft Dynamics NAV 2009 R2 utilizando el conector para Microsoft Dynamics

Seleccione idioma Seleccione idioma
Id. de artículo: 2597312 - Ver los productos a los que se aplica este artículo
En este artículo se aplica a Microsoft Dynamics NAV para todos los países y todas las configuraciones regionales.
Expandir todo | Contraer todo

En esta página

Síntomas

Se supone integrar Microsoft Dynamics CRM con Microsoft Dynamics NAV 2009 R2 utilizando el conector para Microsoft Dynamics característica Pack 5. En ciertos escenarios, tipos de cambio de moneda se actualizan incorrectamente en Microsoft Dynamics CRM.
Al actualizar los tipos de cambio de divisa en Microsoft Dynamics NAV 2009 R2, recibirá el mensaje de error siguiente:
[Tipo de cambio a la moneda] ha encontrado un error al procesar ?
TransactionCurrency con ID = <guid>no existe.</guid>
En esta situación, sólo el primer registro de los tipos de cambio de moneda se sincroniza con Microsoft Dynamics CRM. Cuando el sistema sincroniza los registros posteriores que se escriben en la tabla de cambio de divisa con fechas de comienzo posterior, se produce este error.

Causa

Este problema se produce porque el último cambiado cambio de divisa, en lugar de la actual tasa de cambio para la divisa en particular, se sincroniza con Microsoft Dynamics CRM mediante el conector para Microsoft Dynamics.

Solución

Información de hotfix

Ahora hay una revisión compatible de Microsoft. Sin embargo, sólo se diseñó para corregir el problema que se describe en este artículo. Aplica sólo a los sistemas que experimenten este problema específico. Esta revisión puede recibir comprobaciones adicionales. Por tanto, si no se ve muy afectado por este problema, recomendamos que espere al próximo service pack de Microsoft Dynamics NAV 2009 o la próxima versión de Microsoft Dynamics NAV que contenga este hotfix.

Nota En casos especiales, los costos derivados de llamadas pueden cancelarse si un profesional de soporte técnico de Microsoft Dynamics y productos relacionados de soporte determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las cuestiones y problemas que no califican para la actualización en cuestión.

Información de instalación

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin garantía explícita o implícita. Esto incluye, pero no se limita a las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.

Nota Antes de instalar este hotfix, compruebe que todos los usuarios del cliente de Microsoft Navision han salido del sistema. Esto incluye Microsoft Navision Application Services (NAS) los usuarios del cliente. Debe ser el único usuario del cliente conectado cuando implemente este hotfix.

Para implementar esta revisión, debe tener una licencia de desarrollador.

Recomendamos que la cuenta de usuario en la ventana de inicios de sesión de Windows o en la ventana Conexiones de base de datos se asigne en el identificador de rol "SUPER". Si la cuenta de usuario no se puede asignar el identificador de rol "SUPER", debe comprobar que la cuenta de usuario tiene los permisos siguientes:
  • El permiso de modificación para el objeto que vaya a cambiar.
  • El permiso de ejecución para el ID de objeto sistema 5210 objeto y para el ID de objeto sistema 9015 objeto.


Nota No necesita tener derechos para los almacenes de datos a menos que deba realizar reparaciones de datos.

Cambios de código

Nota Siempre el código de prueba corrige en un entorno controlado antes de aplicar las correcciones a los equipos de producción.
Para resolver este problema, siga estos pasos:
  1. Aplicar los cambios de código siguiente en Microsoft Dynamics NAV 2009 R2:
    1. Crear un nuevo GetCurrencyFactor función en la tabla de cambio de divisa (330) como sigue:
      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. Crear un nuevo SetCurrencyFactor función en la tabla de cambio de divisa (330) como sigue:
      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. Agregar una nueva variable global en forma de monedas (5) y, a continuación, especifique la variable como sigue:
      • Nombre: CurrencyFactor
      • Tipo de datos: Decimal
    4. Agregar el Factor de divisa campo (46) en el formulario de monedas (5).
    5. Agregar una nueva variable local en el Factor de divisa - OnValidate desencadenador en el formulario de monedas (5) y, a continuación, especifique la variable como sigue:
      • Nombre: CurrencyExchangeRate
      • Tipo de datos: Registro
      • Subtipo: Cambio de divisa
    6. Agregue el siguiente código en el Factor de divisa - OnValidate desencadenador en el formulario de monedas (5):
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    7. Agregar una nueva variable local en el OnAfterGetRecord desencadenador en el formulario de monedas (5) y, a continuación, especifique la variable como sigue:
      • Nombre: CurrencyExchangeRate
      • Tipo de datos: Registro
      • Subtipo: Cambio de divisa
    8. Agregue el siguiente código en el OnAfterGetRecord desencadenador en el formulario de monedas (5):
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    9. Agregar una nueva variable global en la página de monedas (5) y, a continuación, especifique la variable como sigue:
      • Nombre: CurrencyFactor
      • Tipo de datos: Decimal
    10. Agregar el Factor de divisa campo en la página de monedas (5) y, a continuación, especificar el campo de la siguiente manera:
      • Nombre: CurrencyFactor
      • Título: Factor de divisa
      • Tipo: Campo
      • SourceExpr: CurrencyFactor
    11. Agregar una nueva variable local en el Factor de divisa - OnValidate desencadenador en la página de monedas (5) y, a continuación, especifique la variable como sigue:
      • Nombre: CurrencyExchangeRate
      • Tipo de datos: Registro
      • Subtipo: Cambio de divisa
    12. Agregue el siguiente código en el Factor de divisa - OnValidate desencadenador en la página de monedas (5):
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    13. Agregar una nueva variable local en el OnAfterGetRecord desencadenador en la página de monedas (5) y, a continuación, especifique la variable como sigue:
      • Nombre: CurrencyExchangeRate
      • Tipo de datos: Registro
      • Subtipo: Cambio de divisa
    14. Agregue el siguiente código en el OnAfterGetRecord desencadenador en la página de monedas (5):
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    15. Agregar una nueva variable local en el UpdateParentIntegrationRecord función del módulo de gestión de la integración (5150) y, a continuación, especifique la variable como sigue:
      • Nombre: Moneda
      • Tipo de datos: Registro
      • Subtipo: Moneda
    16. Cambie el código de la UpdateParentIntegrationRecord función del módulo de gestión de la integración (5150) como sigue:
      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 reemplazo
      ...
       
        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. Cambie el código de la EnableConnector función del módulo de gestión de la integración (5150) como sigue:
      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 reemplazo
      ...
      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. Cambie el código de la SetupIntegrationTable función del módulo de gestión de la integración (5150) como sigue:
      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 reemplazo
      ...
      InitializeIntegrationRecords(DATABASE::"Unit of Measure");
      InitializeIntegrationRecords(DATABASE::"Ship-to Address");
      InitializeIntegrationRecords(DATABASE::Contact);
      InitializeIntegrationRecords(DATABASE::"Customer Discount Group");
      ...
    19. Cambie el código de la IsIntergrationRecord función del módulo de gestión de la integración (5150) como sigue:
      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 reemplazo
      ...
      DATABASE::"Unit of Measure",
      DATABASE::"Ship-to Address",
      DATABASE::Contact,
      DATABASE::"Customer Discount Group",
      ...
    20. Cambie el código de la IsIntegrationRecordChild función del módulo de administración de la integración (5150) como sigue:
      Código existente
      ...
      IF TableID IN
        [DATABASE::"Sales Line",
         DATABASE::"Sales Invoice Line"]
      THEN
        EXIT(TRUE);
      EXIT(FALSE);
      ...
      Código de reemplazo
      ...
      IF TableID IN
        [DATABASE::"Sales Line",
      
         // Add the following line.
         DATABASE::"Currency Exchange Rate",
      
         DATABASE::"Sales Invoice Line"]
      THEN
        EXIT(TRUE);
      EXIT(FALSE);
      ...
  2. Instalar el conector para Microsoft Dynamics Feature Pack 6.
    NotaDespués de instalar el conector para Microsoft Dynamics característica Pack 6, debe desactivar el mapa de "Tipos de cambio de moneda de NAV a la moneda" en el conector y importar el nuevo mapa de "NAV monedas a moneda", vuelva a ejecutar la configuración del adaptador de NAV y, a continuación, activar la nueva asignación.

Requisitos previos

Debe tener instalado para aplicar esta revisión de Microsoft Dynamics NAV 2009 R2.

Información sobre la eliminación

No se puede quitar este hotfix.

Estado

Microsoft ha confirmado que se trata de un problema en los productos de Microsoft enumerados en la sección "Se refiere a:".
Nota Se trata de un artículo "FAST publicar" creado directamente desde dentro de la organización de soporte técnico de Microsoft. La información contenida en este documento se proporciona como-es en respuesta a nuevos problemas. Como resultado de la velocidad de puesta a disposición, los materiales pueden incluir errores tipográficos y podrán revisarse en cualquier momento sin previo aviso. Consulte Condiciones de uso para otras consideraciones.

Propiedades

Id. de artículo: 2597312 - Última revisión: martes, 30 de agosto de 2011 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Dynamics NAV 2009
Palabras clave: 
kbqfe kbmbsmigrate kbmbscodefix kberrmsg kbsurveynew kbmt KB2597312 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 2597312

Enviar comentarios

 

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