24449 - Mudança de plano contábil - violação de chave
Problema: Descrição do Problema: Ao efetuar a mudança de plano de contas contábil, apresenta erro de violação de chaves "Não foi possível atualizar contas nas tabelas dos outros módulos: Não foi possível atualizar E055CTB.CtaRed Violação de chave"
Rotina / Tela:
· F043VMP - Cadastros / Modelos de plano / Validade
Solução:
Rotina / Tela:
· F043VMP - Cadastros / Modelos de plano / Validade
Solução:
Solução: Segue abaixo os detalhes do problema como também o que é necessário fazer para ajustar a situação em sua base:
A tabela E055CTB é utilizada para registrar Parâmetros Contábeis para Formação da Base de Impostos, e um dos campos 'chave' desta tabela é a Conta Contábil (CtaRed).
A tabela E043RMP é utilizada para realizar o Relacionamento entre as Contas Contábeis atuais e as contas contábeis novas (futuras), que serão assumidas após a mudança de plano contábil.
O problema de violação de chave está ocorrendo porque as configurações de Parâmetros Contábeis para Formação da Base de Impostos estão fora de sincronia com relação ao relacionamento das contas contábeis.
Exemplo:
Parâmetros Contábeis para Formação da Base de Impostos
-------------------------------------------------------
Empresa | Filial | Imposto | Data Base | Conta Contábil | Opção Devedor | Opção Credor | Opção Saldo
1 | 1 | 50 | 01/01/1900 | 200 | + | + | +
1 | 1 | 50 | 01/01/1900 | 300 | - | - | -
1 | 1 | 50 | 01/01/1900 | 400 | + | - | +
Relacionamento entre as Contas
------------------------------
Modelo Atual | Conta Atual | Modelo Novo | Conta Nova
100 | 200 | 5000 | 1000
100 | 300 | 5000 | 1000
100 | 400 | 5000 | 1000
Perceba que as contas contábeis 200, 300 e 400 estão indicadas no relacionamento para se tornarem a nova conta 1.000 (do novo plano de contas), no que diz respeito a relacionamento entre contas, aqui não vemos nenhum problema.
O problema está nos Parâmetros Contábeis para Formação da Base de Impostos, pois durante o processo de mudança de plano contábil, o sistema tentará substituir as contas antigas (200, 300 e 400) pelas novas (1.000), como a conta contábil faz parte da formação da chave da tabela (registro único), ocorre violação de chaves, veja abaixo.
Como ficaria a tabela E055CTB após a conversão com as configurações atuais:
Parâmetros Contábeis para Formação da Base de Impostos
-------------------------------------------------------
Empresa | Filial | Imposto | Data Base | Conta Contábil | Opção Devedor | Opção Credor | Opção Saldo
1 | 1 | 50 | 01/01/1900 | 1.000 | + | + | + (Mudança de conta ok)
1 | 1 | 50 | 01/01/1900 | 1.000 | - | - | - (Violação de chaves ocorre aqui)
1 | 1 | 50 | 01/01/1900 | 1.000 | + | - | + (Violação de chaves ocorre aqui)
Note que estes campos chave: "Empresa | Filial | Imposto | Data Base | Conta Contábil", se repetiriam as 3 vezes após o processo de mudança de plano, como a ferramenta de banco de dados não permite esta operação é gerado a consistência de violação de chaves.
Sistematicamente não podemos tratar essa operação com um automatismo durante o processo de mudança de plano contábil, uma vez que não saberíamos quais das configurações de impostos ("Opção Devedor | Opção Credor | Opção Saldo") deveríamos manter quando fizéssemos com que os 3 registros antigos se torne apenas 1.
Abaixo estamos disponibilizando um comando SQL para auxiliar na identificação dos 'Parâmetros Contábeis para Formação da Base de Impostos' das conta contábeis com relacionamentos "Muitas para Uma" (N x 1):
SELECT C.*
FROM E055CTB C
WHERE C.CODEMP={CODEMP}
AND C.CTARED IN (SELECT B.CTAANT
FROM E043RMP B, (SELECT A.CODMPC, A.CODMPU, A.CODMPA, A.CTAATU, COUNT(A.CTAANT) QTDREL
FROM E043RMP A
WHERE A.CODMPC={CODMPC}
AND A.CODMPU={CODMPU}
AND A.CODMPA={CODMPA}
GROUP BY A.CODMPC, A.CODMPU, A.CODMPA, A.CTAATU) RPM
WHERE B.CODMPC=RPM.CODMPC
AND B.CODMPU=RPM.CODMPU
AND B.CODMPA=RPM.CODMPA
AND B.CTAATU=RPM.CTAATU
AND RPM.QTDREL > 1)
ORDER BY C.CODEMP, C.CODFIL, C.CODIMP, C.DATBAS, C.CTARED
Conclusão:
Para que não ocorra o problema de violação de chaves, deve ser mantido apenas 1 configuração de imposto para o grupo de contas antigas que está sendo convertida em apenas uma nova.
Desta forma, é necessário excluir os demais registros na tela F055PPF.
Utilizando o exemplo acima a solução seria apagar 2 dos registros de configuração e manter apenas 1:
Parâmetros Contábeis para Formação da Base de Impostos
-------------------------------------------------------
Empresa | Filial | Imposto | Data Base | Conta Contábil | Opção Devedor | Opção Credor | Opção Saldo
1 | 1 | 50 | 01/01/1900 | 200 | ? | ? | ?