Corrección de errores de datos que impiden la integración de Management Reporter

En este artículo se proporciona un script para corregir errores de datos que impiden la integración de Management Reporter.

Se aplica a: Microsoft Dynamics SL 2011 Service Pack 2, Microsoft Dynamics SL 2011 Service Pack 1, Microsoft Dynamics SL 2011, Microsoft Dynamics SL 2015
Número de KB original: 2931999

Resumen

En este artículo se proporcionan los pasos para ejecutar un script de Diagnostics.sql para Management Reporter 2012 para Microsoft Dynamics SL 2011 y Dynamics SL 2015. Este script puede identificar errores de datos que pueden impedir una integración correcta de Management Reporter. Los errores de datos pueden originarse en muchos orígenes y pueden provocar incoherencia entre tablas o crear valores de campo no válidos.

En la parte inferior de este artículo, también hay un par de scripts que se usan para buscar datos en minúsculas que pueden causar problemas en MR.

Resolución

Descargue el siguiente archivo de script y siga estos pasos para ejecutar los scripts en la base de datos de aplicaciones de Microsoft Dynamics SL en Management Reporter. Cambie el tipo de salida a Salida de texto para facilitar la visualización.

MR4.zip

Nota:

Esta misma información se incluye en el archivo Diagnostics4.Sql, que se incluye en el archivo MR4.zip.

Importante

Realice siempre una copia de seguridad de la base de datos antes de actualizar los datos de Management Studio.

Paso 1

  • ¿Tiene más de un identificador de moneda configurado?

    Select 'Step1a', CASE WHEN COUNT(*)>1 then 'YES' else 'NO' end, count(*) from currncy with (nolock)
    

    Nota:

    • No = moneda única
    • Sí = varias monedas que están configuradas en Mantenimiento de divisas y que tienen el número enumerado.
  • ¿Está habilitada la simultaneidad múltiple?

    Select top 1 'Step1b',case isnull((select MAX(mcactivated) from cmsetup),-99) WHEN 1 then 'ENABLED' when -99 then 'NOT SETUP' else 'NOT ENABLED' end
    

Nota:

Este script devuelve Habilitado o No configurado.

Paso 2

Busque un registro de configuración de moneda incorrecto. Evaluar cada situación. Para obtener ayuda para hacerlo, póngase en contacto con el soporte técnico de Microsoft Dynamics.

  • Esta debe ser la moneda base de la base de datos de la aplicación:

    Select 'Step2a',BaseCuryId from glsetup with (nolock)
    
  • La moneda base del libro de contabilidad real (tipo de saldo = 'a') debe ser la moneda base de la base de datos.

    Select 'Step2b',BaseCuryID,LedgerID, BalanceType from ledger with (nolock)
    
  • El campo BaseCuryID de todas las empresas de una base de datos de aplicación determinada debe ser el mismo.

  • Este script muestra el campo BaseCuryID de todas las bases de datos de aplicación asociadas a la base de datos del sistema.

    Select 'Step2c',BaseCuryID, CpnyID, databasename from vs_company with (nolock)
    
  • El campo BaseCuryIDs debe existir en la tabla de mantenimiento de monedas. Las monedas extranjeras también deben existir en esta tabla.

    Select 'Step2d',curyid from currncy with (nolock)
    

Paso 3

Busque valores incorrectos para los campos CuryID y ledgerID en los registros de transacción y resumen. Estas instrucciones solo tienen acceso a los 100 registros principales. Para ver todos los registros, quite las palabras 100 principales del script.

  • Accthist que tiene un identificador de moneda que no está en la tabla de mantenimiento de divisas.

    Select top 100 'Step3a',CpnyID, LedgerID, FiscYr, Acct, SUB, CuryId, * from accthist with (nolock) where CuryId not in (select CuryId from Currncy with (nolock))
    

    Corrección: es posible que tenga que actualizar el campo CuryID para que coincida con el campo BaseCuryID. Sin embargo, es posible que ese registro ya exista. En este caso, recibirá un mensaje 6909. Si esto ocurre, determine si el registro es necesario.

  • Accthist que tiene un identificador de moneda que no coincide con el registro del libro de contabilidad (o para un libro de contabilidad que no está en la tabla del libro de contabilidad).

    Select top 100 'Step3b',a.CpnyID, a.LedgerID, a.FiscYr, a.Acct, a.SUB, a.CuryId, l.BaseCuryID,* from accthist a with (nolock) left join Ledger l with (nolock) on a.LedgerID=l.LedgerID where l.LedgerID is null OR l.BaseCuryID<>a.CuryId
    

    Corrección: La actualización depende de cada situación.

  • CuryAcct que tiene un CuryID que no está en la tabla de mantenimiento de monedas.

    Select top 100 'Step3c',CpnyID, LedgerID, FiscYr, Acct, SUB,BaseCuryID, CuryId, * from curyacct with (nolock) where CuryId not in (select CuryId from Currncy with (nolock))
    

    Corrección: La actualización dependerá de cada situación. Es posible que tenga que eliminar el registro más adelante si no hay ningún registro AcctHist correspondiente. Además, es posible que tenga que actualizar el campo CuryID. Sin embargo, es posible que ese registro ya exista. En este caso, recibirá un mensaje 6909. Si esto ocurre, determine si el registro es necesario.

  • CuryAcct con un BasecuryID que no coincide con el registro del libro de contabilidad (o para un libro de contabilidad que no está en la tabla del libro de contabilidad).

    Select top 100 'Step3d',c.CpnyID, c.LedgerID, c.FiscYr, c.Acct, c.SUB,c.BaseCuryID, c.CuryId,l.BaseCuryID, * from curyacct c with (nolock) left join Ledger l with (nolock) on c.LedgerID=l.LedgerID where l.LedgerID is null OR c.BaseCuryID<>l.BaseCuryId
    

    Corrección: La actualización depende de cada situación.

  • GLTran con un CuryID que no está en la tabla de mantenimiento de divisas.

    Select top 100 'Step3e',CpnyID, LedgerID, FiscYr, Acct, SUB,BaseCuryID, CuryId,* from gltran with (nolock) where Posted='P' and CuryId not in (select CuryId from Currncy)
    

    Corrección: La actualización depende de cada situación. Es posible que tenga que actualizar el campo CuryId a un valor válido.

  • GLTran con un valor de campo BaseCuryID que no coincide con el registro del libro de contabilidad (o para un libro de contabilidad que no está en la tabla del libro de contabilidad).

    Select top 100 'Step3f',g.CpnyID, g.LedgerID, g.FiscYr, g.Acct, g.SUB, g.BaseCuryID, g.CuryId, * from gltran g with (nolock) left join Ledger l with (nolock) on g.LedgerID=l.LedgerID where g.Posted='P' and g.LedgerID is null OR l.BaseCuryID<>g.BaseCuryId
    

    Corrección: La actualización dependerá de cada situación. Es posible que tenga que actualizar el campo BaseCuryID a un valor válido.

Paso 4

Busque registros de resumen no coincidentes.

  • Busque registros CuryAcct sin registros AcctHist.

    Select top 100 'Step4a',c.CpnyID, c.LedgerID, c.FiscYr, c.Acct, c.Sub, c.BaseCuryID, c.CuryId,* from CuryAcct c with (nolock) left join AcctHist a with (nolock) on c.CpnyID=a.CpnyID and c.Acct=a.Acct and c.Sub=a.Sub and c.LedgerID=a.LedgerID and c.FiscYr=a.FiscYr where a.CpnyID is null order by c.CpnyID, c.Acct, c.SUB, c.ledgerid, c.FiscYr
    

    Corrección: Ejecute el script de Fix4a.SQL desde MR2.zip en bases de datos de moneda única y de varias monedas si se notifican errores.

  • Busque Accthist sin registros de CuryAcct.

    Select top 100 'Step4b',a.CpnyID, a.LedgerID, a.FiscYr, a.Acct, a.Sub, a.CuryId, * from AcctHist a with (nolock) left join Curyacct c with (nolock) on c.CpnyID=a.CpnyID and c.Acct=a.Acct and c.Sub=a.Sub and c.LedgerID=a.LedgerID and c.FiscYr=a.FiscYr where a.BalanceType='A' and c.CpnyID is null order by a.CpnyID, a.Acct, a.SUB, a.ledgerid, a.FiscYr
    

    Corrección: en el caso de las bases de datos de simultaneidad múltiple, inicialice un registro curyacct en el modo de inicialización en elhistorial de cuentas de GL> o publique una transacción en el acct/sub/ledger/fiscyr/cpnyid/curyid. Para crear o actualizar un registro curyacct en la pestañaMoneda delhistorial> de cuentas de GL>, debe especificar los datos de cada período. Al crear un lote para registrar una transacción en la cuenta, debe crear un registro CuryAcct que contenga valores para cada período. Asegúrese de usar el año en el que se notifica el error como año de contabilización. A continuación, invierta el lote para quitar los dólares de la cuenta.

    Para una base de datos de moneda única, abra el registro en elhistorial de cuentasde GL> durante el modo de inicialización si solo hay uno o dos registros. Cambie el saldo inicial por alguna cantidad, guarde el registro, revierta y, a continuación, vuelva a guardarlo. Esto crea el registro curyacct. O bien, puede ejecutar el script desde el paso 6a en esta sección.

  • GLTrans sin AcctHist

    Esta consulta se ejecutará lentamente si hay muchas entradas gltrans y si todas las entradas son válidas. (La consulta realmente se ejecuta más rápido si hay datos incorrectos).

    Select top 100 'Step4c',g.CpnyID, g.LedgerID, g.FiscYr, g.Acct, g.Sub, g.BaseCuryID, g.CuryId, * from GLTran g with (nolock) left join AcctHist a with (nolock) on g.CpnyID=a.CpnyID and g.Acct=a.Acct and g.Sub=a.Sub and g.LedgerID=a.LedgerID and g.FiscYr=a.FiscYr inner join vs_company c with (nolock) on g.CpnyID=c.CpnyID and c.CpnyCOA in (select CpnyID from glsetup with (nolock)) -- only companies in this application DB where g.posted='P' and a.CpnyID is null order by g.CpnyID, g.LedgerID, g.FiscYr, g.Acct, g.Sub option (force order) -- added for performance in larger databases
    

    Corrección: Evalúe las entradas del campo GLtrans. Si no hay ningún registro AcctHist, el financiero no usa estas transacciones para los informes.

  • Normalmente, esto se debe a que las transacciones son antiguas. Puede decidir eliminarlos o realizar alguna otra acción. Evalúe detenidamente estas entradas.

Paso 5

Busque registros GLTrans que tengan fechas o períodos no válidos. Estos registros pueden producir los siguientes errores en Management Reporter:

  • Texto de error: los parámetros Year, Month y Day describen un datetime no representativo.

  • Texto de error: la referencia de objeto no se establece en una instancia de un objeto.

  • Registros GLTrans que tienen un campo FiscYr en blanco.

    Select top 100 'Step5a',CpnyID, LedgerID, FiscYr, Acct, Sub, perpost, perent, trandate, Posted, Rlsed, BatNbr, Module, * from GLTran with (nolock) where FiscYr='' and (Rlsed=1 or Posted='P')
    

    Corrección: considere la posibilidad de actualizar el campo FiscYr en función del valor perpost.

  • Los registros GLTrans que tienen un valor de poste que está lejos de un intervalo normal.

    Select top 100 'Step5b',CpnyID, LedgerID, FiscYr, Acct, Sub, perpost, perent, trandate, Posted, Rlsed, BatNbr, Module, * from GLTran with (nolock) where (PerPost>='204812' or PerPost<='195001') and (Rlsed=1 or Posted='P')
    

    Corrección: es probable que estos lotes tengan un período futuro para publicar. Puede abrir estos lotes en GL>Journal Transacciones durante el modo de inicialización. Elimínelos, cambie el período para publicarlos o procesándolos, según corresponda.

  • Los registros GLTrans que tienen un valor de fecha trans que está lejos de un intervalo normal (con frecuencia al tener un año 2079).

    Select top 100 'Step5c',CpnyID, LedgerID, FiscYr, Acct, Sub, perpost, perent, trandate,Posted, Rlsed, BatNbr, Module, * from GLTran with (nolock) where (trandate>='01/01/2048' or trandate<='01/01/1950') and (Rlsed=1 or Posted='P') and TranDate<>'1/1/1900'
    

    Corrección: actualice trandate a crtd_datetime. Este script muestra cómo.

    update gltran set trandate=crtd_datetime where (trandate>='01/01/2048' or trandate<='01/01/1950') and (Rlsed=1 or Posted='P') and TranDate<>'1/1/1900'
    
  • Registros acctHist con un campo FiscYr lejos de un intervalo normal.

    select top 100 'Step5d',a.CpnyID, a.LedgerID, a.FiscYr, a.Acct, a.Sub, a.CuryId, * from AcctHist a with (nolock) where a.FiscYr>'2048' or a.FiscYr<'1950' or len(a.FiscYr) < 4
    

    Corrección: Estos son probablemente registros no deseados. Al manipular los datos históricamente, es posible que haya establecido el año fiscal en un año futuro para mantener los registros para una revisión posible posterior.

Paso 6

Busque instancias en las que los importes del registro AcctHist no coincidan con los importes del registro CuryAcct .

Nota:

Ejecute esta instrucción solo después de que se hayan corregido los problemas de los pasos 1 a 5.

select
   top 1000 'Step6a',
   a.CpnyID,
   a.Acct,
   a.Sub,
   a.LedgerID,
   a.FiscYr,
   c.numCuryAcct,
   a.BegBal,
   c.begbal,
   a.PtdBal00,
   c.ptdbal00,
   a.PtdBal01,
   c.ptdbal01,
   a.PtdBal02,
   c.ptdbal02,
   a.PtdBal03,
   c.ptdbal03,
   a.PtdBal04,
   c.ptdbal04,
   a.PtdBal05,
   c.ptdbal05,
   a.PtdBal06,
   c.ptdbal06,
   a.PtdBal07,
   c.ptdbal07,
   a.PtdBal08,
   c.ptdbal08,
   a.PtdBal09,
   c.ptdbal09,
   a.PtdBal10,
   c.ptdbal10,
   a.PtdBal11,
   c.ptdbal11,
   a.PtdBal12,
   c.ptdbal12,
   a.ytdBal00,
   c.ytdbal00,
   a.ytdBal01,
   c.ytdbal01,
   a.ytdBal02,
   c.ytdbal02,
   a.ytdBal03,
   c.ytdbal03,
   a.ytdBal04,
   c.ytdbal04,
   a.ytdBal05,
   c.ytdbal05,
   a.ytdBal06,
   c.ytdbal06,
   a.ytdBal07,
   c.ytdbal07,
   a.ytdBal08,
   c.ytdbal08,
   a.ytdBal09,
   c.ytdbal09,
   a.ytdBal10,
   c.ytdbal10,
   a.ytdBal11,
   c.ytdbal11,
   a.ytdBal12,
   c.ytdbal12
from
   AcctHist a
   inner join
      (
         select
            count(*) as numCuryAcct,
            CpnyID,
            Acct,
            Sub,
            LedgerID,
            FiscYr,
            SUM(begbal) as begbal,
            SUM(ptdbal00) as ptdbal00,
            SUM(ptdbal01) as ptdbal01,
            SUM(ptdbal02) as ptdbal02,
            SUM(ptdbal03) as ptdbal03,
            SUM(ptdbal04) as ptdbal04,
            SUM(ptdbal05) as ptdbal05,
            SUM(ptdbal06) as ptdbal06,
            SUM(ptdbal07) as ptdbal07,
            SUM(ptdbal08) as ptdbal08,
            SUM(ptdbal09) as ptdbal09,
            SUM(ptdbal10) as ptdbal10,
            SUM(ptdbal11) as ptdbal11,
            SUM(ptdbal12) as ptdbal12,
            SUM(ytdbal00) as ytdbal00,
            SUM(ytdbal01) as ytdbal01,
            SUM(ytdbal02) as ytdbal02,
            SUM(ytdbal03) as ytdbal03,
            SUM(ytdbal04) as ytdbal04,
            SUM(ytdbal05) as ytdbal05,
            SUM(ytdbal06) as ytdbal06,
            SUM(ytdbal07) as ytdbal07,
            SUM(ytdbal08) as ytdbal08,
            SUM(ytdbal09) as ytdbal09,
            SUM(ytdbal10) as ytdbal10,
            SUM(ytdbal11) as ytdbal11,
            SUM(ytdbal12) as ytdbal12
         from
            curyacct
         group by
            CpnyID,
            Acct,
            Sub,
            LedgerID,
            FiscYr
      )
      c
      on a.CpnyID = c.CpnyID
      and a.Acct = c.Acct
      and a.Sub = c.Sub
      and a.LedgerID = c.LedgerID
      and a.FiscYr = c.FiscYr
where
   round(a.BegBal, 2) <> round(c.begbal, 2)
   or round(a.PtdBal00, 2) <> round(c.PtdBal00, 2)
   or round(a.PtdBal01, 2) <> round(c.PtdBal01, 2)
   or round(a.PtdBal02, 2) <> round(c.PtdBal02, 2)
   or round(a.PtdBal03, 2) <> round(c.PtdBal03, 2)
   or round(a.PtdBal04, 2) <> round(c.ptdbal04, 2)
   or round(a.PtdBal05, 2) <> round(c.PtdBal05, 2)
   or round(a.PtdBal06, 2) <> round(c.PtdBal06, 2)
   or round(a.PtdBal07, 2) <> round(c.PtdBal07, 2)
   or round(a.PtdBal08, 2) <> round(c.PtdBal08, 2)
   or round(a.PtdBal09, 2) <> round(c.PtdBal09, 2)
   or round(a.PtdBal10, 2) <> round(c.PtdBal10, 2)
   or round(a.PtdBal11, 2) <> round(c.PtdBal11, 2)
   or round(a.PtdBal12, 2) <> round(c.PtdBal12, 2)
   or round(a.ytdBal00, 2) <> round(c.ytdBal00, 2)
   or round(a.ytdBal01, 2) <> round(c.ytdBal01, 2)
   or round(a.ytdBal02, 2) <> round(c.ytdBal02, 2)
   or round(a.ytdBal03, 2) <> round(c.ytdBal03, 2)
   or round(a.ytdBal04, 2) <> round(c.ytdbal04, 2)
   or round(a.ytdBal05, 2) <> round(c.ytdBal05, 2)
   or round(a.ytdBal06, 2) <> round(c.ytdBal06, 2)
   or round(a.ytdBal07, 2) <> round(c.ytdBal07, 2)
   or round(a.ytdBal08, 2) <> round(c.ytdBal08, 2)
   or round(a.ytdBal09, 2) <> round(c.ytdBal09, 2)
   or round(a.ytdBal10, 2) <> round(c.ytdBal10, 2)
   or round(a.ytdBal11, 2) <> round(c.ytdBal11, 2)
   or round(a.ytdBal12, 2) <> round(c.ytdBal12, 2)

Para una base de datos de moneda única, abra el registro en elhistorial de cuentasde GL> durante el modo de inicialización si solo hay unos pocos registros. Cambie el saldo inicial por alguna cantidad, guarde el registro, revierta el registro y, a continuación, guárdelo de nuevo. Esto actualiza el registro curyacct para que coincida con el registro accthist . Si hay muchos registros, ejecute el script de ResetCuryAcctfromAcctHistStep6a.sql desde el archivo MR2.zip .

En una base de datos de simultaneidad múltiple, abrael Historial de cuentas de GL> durante el modo de inicialización si solo hay unos pocos registros y, a continuación, haga clic en la pestaña Moneda. Corrija cada período individualmente, según corresponda. Si hay muchos registros, ejecute el script de MultiCurrencyStep6aFix.sql desde el archivo MR2.zip . Cualquier cambio se realiza en el registro CuryID base.

Después de completar el paso 6, vuelva a ejecutar el script Diagnostics2.SQL para comprobar que ya no notifica errores.

Scripts adicionales para buscar datos en minúsculas que pueden causar problemas en MR.

Este script busca varios registros en los Company.DatabaseName que no tienen el mismo caso (por ejemplo, SLDemoApp y SLDEMOAPP). Ejecute este script en la base de datos del sistema.

select c.DatabaseName, c.CpnyID from Company c left outer join sys.databases sd on c.DatabaseName COLLATE Latin1_General_CS_AS= sd.name COLLATE Latin1_General_CS_AS
where sd.name is null and DatabaseName in (select c1.DatabaseName from Company c1 left outer join company c2 on c1.DatabaseName = c2.DatabaseName where c1.DatabaseName=c2.DatabaseName and c1.DatabaseName COLLATE Latin1_General_CS_AS != c2.DatabaseName COLLATE Latin1_General_CS_AS)

Corrección: actualice el nombre de la base de datos para que esté en mayúsculas.

Este script busca el identificador de empresa en minúsculas y la subcuenta en las tablas accthist, curyacct y gltran. Ejecute este script en la base de datos del sistema.

DECLARE @DbName VARCHAR(50)
DECLARE @useStatement VARCHAR(256)
DECLARE @fullStatement VARCHAR(8000)
DECLARE db_cursor CURSOR FOR
select distinct
   DatabaseName
from
   Company OPEN db_cursor FETCH NEXT
FROM
   db_cursor INTO @DbName WHILE @@FETCH_STATUS = 0
   BEGIN
set
   @DbName = LTRIM(RTRIM(@DbName))
set
   @useStatement = 'USE ' + @DbName + ''
set
   @fullStatement = '

   SELECT
      sub as ''Sub - AcctHist - ' + @DbName + ''',
      *
   FROM
      AcctHist
   WHERE
      UPPER(sub) <> sub COLLATE Latin1_General_CS_AS
      SELECT
         sub as ''Sub - GLTran - ' + @DbName + ''',
         *
      FROM
         GLTran
      WHERE
         UPPER(sub) <> sub COLLATE Latin1_General_CS_AS
         SELECT
            sub as ''Sub - CuryAcct - ' + @DbName + ''',
            *
         FROM
            CuryAcct
         WHERE
            UPPER(sub) <> sub COLLATE Latin1_General_CS_AS
            SELECT
               CpnyID as ''CpnyID - AcctHist - ' + @DbName + ''',
               *
            FROM
               AcctHist
            WHERE
               UPPER(CpnyID) <> CpnyID COLLATE Latin1_General_CS_AS
               SELECT
                  CpnyID as ''CpnyID - GLTran - ' + @DbName + ''',
                  *
               FROM
                  GLTran
               WHERE
                  UPPER(CpnyID) <> CpnyID COLLATE Latin1_General_CS_AS
                  SELECT
                     CpnyID as ''CpnyID - CuryAcct - ' + @DbName + ''',
                     *
                  FROM
                     CuryAcct
                  WHERE
                     UPPER(CpnyID) <> CpnyID COLLATE Latin1_General_CS_AS
                     SELECT
                        SUB as ''Sub - SubAcct - ' + @DbName + ''',
                        *
                     from
                        SubAcct
                     where
                        (
                           SUB collate sql_latin1_general_cp1_cs_as <> upper(SUB)
                        )
                        or
                        (
                           ConsolSub collate sql_latin1_general_cp1_cs_as <> upper(ConsolSub)
                        )
                        '
 exec (@useStatement + @fullStatement) FETCH NEXT
                     FROM
                        db_cursor INTO @DbName
   END
   CLOSE db_cursor DEALLOCATE db_cursor

Corrección: Si encuentra subcuentas minúsculas, puede ejecutarlas para colocarlas en mayúsculas.

update GLTran set Sub = UPPER(Sub)
update AcctHist set Sub = UPPER(Sub)
update CuryAcct set Sub = UPPER(Sub)

Si encuentra identificadores de empresa en minúsculas, puede ejecutarlos para colocarlos en mayúsculas.

update accthist set cpnyid = UPPER(cpnyid) WHERE UPPER(CpnyID) <> CpnyID COLLATE Latin1_General_CS_AS
update curyacct set cpnyid = UPPER(cpnyid) WHERE UPPER(CpnyID) <> CpnyID COLLATE Latin1_General_CS_AS
update gltran set cpnyid = UPPER(cpnyid) WHERE UPPER(CpnyID) <> CpnyID COLLATE Latin1_General_CS_AS

Este script busca ledgerID en minúsculas en las tablas accthist, curyacct y gltran. Ejecute este script en la base de datos de la aplicación.

SELECT TOP 1 LedgerID FROM AcctHist WHERE UPPER(LedgerID) <> LedgerID COLLATE Latin1_General_CS_AS
SELECT TOP 1 LedgerID FROM GLTran WHERE UPPER(LedgerID) <> LedgerID COLLATE Latin1_General_CS_AS
SELECT TOP 1 LedgerID FROM CuryAcct WHERE UPPER(LedgerID) <> LedgerID COLLATE Latin1_General_CS_AS

Corrección: Si encuentra cualquier ledgerID en minúsculas, puede ejecutarlos para colocarlos en mayúsculas.

update AcctHist set LedgerID = UPPER(LedgerID) where LedgerID COLLATE Latin1_General_BIN like '%[a-z]%'
update GLTran set LedgerID = UPPER(LedgerID) where LedgerID COLLATE Latin1_General_BIN like '%[a-z]%'
update CuryAcct set LedgerID = UPPER(LedgerID) where LedgerID COLLATE Latin1_General_BIN like '%[a-z]%'

Este script busca CuryID en minúsculas en las tablas accthist, curyacct y gltran. Ejecute este script en la base de datos de la aplicación.

SELECT TOP 1 CuryID FROM AcctHist WHERE UPPER(CuryID) <> CuryID COLLATE Latin1_General_CS_AS
SELECT TOP 1 CuryID FROM GLTran WHERE UPPER(CuryID) <> CuryID COLLATE Latin1_General_CS_AS
SELECT TOP 1 CuryID FROM CuryAcct WHERE UPPER(CuryID) <> CuryID COLLATE Latin1_General_CS_AS

Corrección: Si encuentra cualquier CuryID en minúsculas, puede ejecutarlos para colocarlos en mayúsculas.

update AcctHist set CuryId = UPPER(CuryId) where CuryId COLLATE Latin1_General_BIN like '%[a-z]%'  
update GLTran set CuryId = UPPER(CuryId) where CuryId COLLATE Latin1_General_BIN like '%[a-z]%'
update CuryAcct set CuryId = UPPER(CuryId) where CuryId COLLATE Latin1_General_BIN like '%[a-z]%'  

Si no se notifica ningún error después de volver a ejecutar el script de Diagnostic2.SQL, management Reporter Data Mart debe volver a integrarse siguiendo los pasos descritos en KB2964624.