Error "La diferencia debe ser cero antes de poder conciliar esta chequera" al conciliar la chequera en Seleccionar transacciones bancarias

En este artículo se proporciona una solución para el problema de que la diferencia se muestra como cero al conciliar la chequera en Seleccionar transacciones bancarias en Microsoft Dynamics GP.

Se aplica a:   Conciliación bancaria de Microsoft Dynamics GP, Microsoft Dynamics SL
Número KB original:   851301

Síntomas

Al conciliar la chequera en Seleccionar transacciones bancarias en Microsoft Dynamics GP, la diferencia se muestra como cero, pero recibe el siguiente mensaje de error:

La diferencia debe ser cero antes de poder conciliar esta chequera.

Causa

Esto se debe a una diferencia fraccional. La ventana Seleccionar transacciones bancarias solo mostrará tantas posiciones decimales como estén configuradas para el identificador de moneda asignado a la chequera correspondiente. Por ejemplo, si a la chequera se le asigna un identificador de moneda con dos posiciones decimales, solo se muestran dos posiciones decimales en la ventana Seleccionar transacciones bancarias. Sin embargo, los registros de la tabla de SQL almacenan hasta cinco posiciones decimales para un campo de importe, por lo que este problema puede ocurrir si tiene cantidades en los decimales restantes para cualquier registro de las tablas de SQL y puede provocar una diferencia fraccional. Esto suele ocurrir si los registros se importaron a Microsoft Dynamics GP con cantidades que son más decimales que el identificador de moneda para el que está configurado.

Solución

Siga los pasos siguientes para buscar registros con decimales fraccionados y use los scripts siguientes para resolverlo:

  1. Inicie Microsoft SQL Server Management Studio y seleccione el botón Nueva consulta para abrir una ventana de consulta.

  2. Ejecute el siguiente script en la base de datos de la empresa para determinar si hay registros que tienen cantidades con un valor de tercera, cuarta o quinta posición decimal que no sea cero:

    Nota

    Si la moneda de la chequera tiene 2 decimales, el "3" del script siguiente en cada línea comprobará la 3ª posición de una fracción. Por lo tanto, si la moneda tiene 3 posiciones decimales, ajusta el script a "4", y así sucesivamente.

    select * from CM20200 where right(ClrdAmt,3)<>0
    or right(TRXAMNT,3)<>0
    or right(ORIGAMT,3)<>0
    or right(Checkbook_Amount,3)<>0
    select * from CM20400 where right(DEBITAMT,3)<>0
    or right(CRDTAMNT,3)<>0
    select * from CM20500 where right(StmntBal,3)<>0
    or right(CUTOFFBAL,3)<>0
    or right(ClrePayAmt,3)<>0
    or right(ClrdDepAmt,3)<>0
    or right(ClrdDepAmt,3)<>0
    or right(Cleared_Difference,3)<>0
    or right(OUTPAYTOT,3)<>0
    or right(OUTDEPTOT,3)<>0
    or right(IINADJTOT,3)<>0
    or right(DECADJTOT,3)<>0
    or right(ASOFBAL,3)<>0
    select * from CM20501 where right(TRXAMNT,3)<>0
    select * from CM20201 where right(ORCHKTTL,3)<>0
    or right(Orig_Credit_Card_Total,3)<>0
    or right(Originating_Cash_Total,3)<>0
    or right(Originating_Deposit_Amou,3)<>0
    or right(Originating_Checkbook_Am,3)<>0
    

    Importante

    Asegúrese de desplazarse por todos los registros devueltos para tener en cuenta todas las columnas de "cantidad" de los registros devueltos.

  3. Además, ejecute este script para revisar también los importes de la tabla Patrón de la libreta de comprobación:

    select CURRBLNC,* from CM00100 where CHEKBKID = 'xxx'
    --modify the xxx placeholder with your checkbook ID.
    
  4. Realice una copia de seguridad restaurable actual de la base de datos de la empresa antes de continuar o haga esto primero en un entorno de prueba.

    Importante

    No omita este paso.

  5. En función de las tablas o campos en los que encontró la fracción, lea los dos métodos siguientes y use el método adecuado para resolver el problema:

    Método 1: Actualice cada campo uno a la vez directamente SQL para quitar el decimal fraccional.

    Simplemente puede actualizar las cantidades encontradas por los scripts anteriores directamente en las tablas de SQL con un script similar al ejemplo siguiente. Después de actualizar los importes para quitar la fracción no deseada, actualice la ventana Seleccionar transacciones bancarias para ver si se resuelve el problema.

    Este es un script de ejemplo para actualizar un campo a la vez:

    UPDATE CMXXXXX SET YYYYY = '$.$$000' where DEX_ROW_ID = x
    
    --Before executing this script, update the placedholders as needed:
     -Modify the CMXXXXX placeholder with the correct table name; 
     -Modify the YYYYY placedholder with the correct field name in that table; 
     -Modify the $.$$000 with the correct amount with 2 decimal places,
     -Modify the x with the specific Dex Row ID for the record that you need to modify. 
    
    Repeat as many times as needed to update each field/table returned by the script in step 2
    and/or step 3 that has more than 2 decimal places.
    

    Nota

    Sea coherente. Si actualiza cualquier cantidad de una tabla encontrada por el script en el paso 2 para un campo Checkbook_Amt, es posible que también tenga que actualizar el valor actual del saldo de la chequera en la tabla Maestro de la libreta de comprobación CM00100 en la misma dirección. Además, asegúrese de que todos los usuarios no están en Microsoft Dynamics GP antes de ejecutar un script de actualización en la tabla Checkbook Master. No desea que nadie publique y cambie la cantidad del saldo actual de la chequera exactamente al mismo tiempo que está realizando este mantenimiento.

    Método 2: Suma de totales de campo para ver si los totales tienen un decimal fraccional.

    Ejecute el script siguiente para comprobar los totales de campo por tipo. Revise para ver si alguno tiene más decimales que el identificador de moneda que está usando. Además, si los registros se importaron en o desde un software de terceros, es posible que haya importado en cantidades con más decimales de los permitidos en GP. En este caso, deberá calcular la "diferencia neta" y actualizar un único registro para esta diferencia de modo que se equilibra a 0,00000 USD exactamente. Es posible que deba abrir un incidente de soporte técnico si necesita más ayuda para hacerlo. Si lo hace usted mismo, asegúrese de hacerlo primero en una compañía de pruebas.

Este es un script de ejemplo para sumar cada uno de los campos de cantidad de la tabla CM20200 por tipo:

select Distinct(CMTRXTYPE)as 'Type',SUM(TRXAMNT)as 'TRXAMNT', SUM (ORIGAMT)as 'ORIGAMT', SUM(Checkbook_Amount)as 'Checkbook_Amount' from CM20200 where CHEKBKID='XXX' group by CMTRXTYPE
--update the XXX placeholder with the appropriate checkbook ID.

Tipo de transacción:

1 = Depósito
2 = Recibo
3 = Comprobar
4 = Retirada
5 = Ajuste de aumento
6 = Reducción del ajuste
7 = Transferencia
101 = Ingresos por intereses
102 = Otros ingresos
103 = Otros gastos
104 = Cargo de servicio

Nota

Anote cualquier cantidad que cambie, ya que es posible que también necesite actualizar el saldo de la chequera CM00100 en la misma dirección para la misma diferencia.

Más información

Como último recurso, compruebe la intercalación SQL y SQL Server de ordenación para ver si se encuentra en un entorno compatible. (SQL intercalación de Latin1-General y SQL Server orden de ordenación de 50 o 52. La conciliación puede no ejecutarse en una versión no compatible incluso si la diferencia es de 0,00000 $). Si se usa una intercalación de SQL no admitida o un criterio de ordenación SQL Server, deberá abrir un incidente de soporte técnico con el equipo de SQL Server para obtener ayuda adicional sobre cómo cambiar el criterio de ordenación de SQL/SQL antes de poder continuar. Ejecute este script para determinar el SQL intercalación y el SQL Server ordenación:

sp_helpsort