Erro "A diferença deve ser zero antes que você possa reconciliar este guia de seleção" ao reconciliar a pasta de seleção em Selecionar Transações Bancárias

Este artigo fornece uma resolução para o problema em que a diferença é mostrada como zero quando você reconcilia a caixa de seleção em Selecionar Transações Bancárias no Microsoft Dynamics GP.

Aplica-se a: Microsoft Dynamics GP, Reconciliação bancária do Microsoft Dynamics SL
Número KB original: 851301

Sintomas

Quando você reconcilia a pasta de seleção em Selecionar Transações Bancárias no Microsoft Dynamics GP, a diferença é exibida como zero, mas você recebe a seguinte mensagem de erro:

A diferença deve ser zero antes que você possa reconciliar essa pasta de seleção.

Motivo

Isso é causado por uma diferença fracionária. A janela Selecionar Transações Bancárias exibirá apenas quantas casas decimais forem configuradas para a ID de moeda atribuída à respectiva pasta de seleção. Portanto, por exemplo, se a sua pasta de seleção receber uma ID de moeda com duas casas decimais, apenas duas casas decimais aparecerão na janela Selecionar Transações Bancárias. No entanto, os registros na Tabela SQL armazenam até cinco casas decimais para um campo de valor, portanto, esse problema pode ocorrer se você tiver valores nas casas decimais restantes para qualquer registro nas tabelas SQL e pode resultar em uma diferença fracionária. Isso normalmente acontece se os registros foram importados para o Microsoft Dynamics GP com valores que são mais casas decimais do que a ID da moeda está configurada.

Resolução

Use as etapas abaixo para verificar se há registros com casas decimais fracionárias e use os scripts abaixo para resolvê-lo:

  1. Inicie o Microsoft SQL Server Management Studio e selecione o botão Nova Consulta para abrir uma janela de consulta.

  2. Execute o seguinte script no banco de dados da empresa para determinar se há registros que têm valores com um terceiro, quarto ou quinto valor decimal diferente de zero:

    Observação

    Se a moeda da pasta de seleção tiver 2 decimais, o '3' no script abaixo em cada linha verificará a terceira posição em uma fração. Portanto, se sua moeda tiver 3 casas decimais, ajuste o script para '4' e assim por diante.

    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

    Certifique-se de rolar em todos os registros retornados para anotar todas as colunas 'amount' para todos os registros retornados.

  3. Além disso, execute esse script para examinar os valores na tabela Mestre do Checkbook também:

    select CURRBLNC,* from CM00100 where CHEKBKID = 'xxx'
    --modify the xxx placeholder with your checkbook ID.
    
  4. Faça um backup restaurável atual do banco de dados da empresa antes de continuar ou faça isso primeiro em um ambiente de teste.

    Importante

    Não ignore esta etapa.

  5. Dependendo de quais tabelas/campos você encontrou a fração, leia os dois métodos abaixo e use o método apropriado para resolver o problema:

    Método 1: atualize cada campo um de cada vez diretamente no SQL para remover o decimal fracionário.

    Você pode simplesmente atualizar os valores encontrados pelos scripts acima diretamente nas Tabelas SQL usando um script semelhante ao exemplo abaixo. Depois de atualizar os valores para remover a fração indesejada, atualize a janela Selecionar Transações Bancárias para ver se o problema foi resolvido.

    Aqui está um script de exemplo para atualizar um campo por 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.
    

    Observação

    Seja consistente. Se você atualizar qualquer valor em uma tabela encontrada pelo script na etapa 2 para um campo Checkbook_Amt, talvez seja necessário atualizar também o valor atual do saldo da pasta de seleção na tabela CM00100 Checkbook Master na mesma direção. Além disso, certifique-se de ter todos os usuários fora do Microsoft Dynamics GP antes de executar um script de atualização na tabela Checkbook Master. Você não quer que ninguém poste e altere a quantidade do saldo atual da pasta de seleção exatamente ao mesmo tempo em que você está fazendo essa manutenção.

    Método 2: somar totais de campo para ver se algum total tem um decimal fracionário.

    Execute o script abaixo para verificar os totais de campo por tipo. Examine para ver se há mais decimais do que a ID de moeda que você está usando. Além disso, se os registros foram importados em ou de um software de terceiros, você pode ter importado em quantidades com mais decimais do que o permitido na GP. Nesse caso, você precisará calcular a "diferença líquida" e atualizar um único registro para essa diferença para que você balancee exatamente para US$ 0,00000. Talvez seja necessário abrir um incidente de suporte se precisar de mais assistência para fazer isso. Se você fizer isso por conta própria, certifique-se de fazer isso em uma empresa de teste primeiro.

Aqui está um script de exemplo para somar cada um dos campos de valor para a tabela 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 transação:

1 = Depósito
2 = Recibo
3 = Verificar
4 = Retirada
5 = Aumentar Ajuste
6 = Diminuir Ajuste
7 = Transferência
101 = Rendimento dos Juros
102 = Outros Rendimentos
103 = Outras Despesas
104 = Cobrança do serviço

Observação

Anote os valores que você alterar, pois talvez você também precise atualizar o saldo da pasta de seleção CM00100 na mesma direção para a mesma diferença.

Mais informações

Como último recurso, verifique a ordenação SQL e SQL Server ordem de classificação para ver se você está em um ambiente com suporte. (Há suporte para a ordenação SQL Latin1-General e SQL Server ordem de classificação de 50 ou 52. A Reconciliação pode não ser executada em uma versão sem suporte, mesmo que a diferença seja de US$ 0,00000.) Se uma Ordenação SQL ou uma Ordem de Classificação SQL Server sem suporte estiver sendo usada, você precisará abrir um incidente de suporte com a equipe do SQL Server para obter assistência adicional sobre como alterar a Ordenação SQL/Ordem de Classificação do SQL antes de continuar. Execute este script para determinar a ordenação sql e a SQL Server classificação:

sp_helpsort