7076 - Violação de chave
Problema: Descrição do Problema: Fiz a mudança de plano contábil, porem deu um erro Não foi possível atualizar contas nas tabelas dos outros módulos: Violação de chave .
Rotina / Tela: Tela F043VMP.
Solução:
Caso for desejado juntar uma conta existente com uma diferente do plano origem, é necessário criar uma terceira conta:
Exemplo:
Criar 99999
Origem Destino
50363 99999
7657 99999
Observação:
Rotina / Tela: Tela F043VMP.
Solução:
Solução 7076: Esta mensagem pode ocorrer por alguns motivos:
1) No Plano velho existe uma conta contábil 100, que está relacionado com o Plano de conta novo nº 200. Até aqui está correto, porém no Plano Novo não existe a conta nº 200.
Solução é Cadastrar no plano novo a conta 200.
2) Avaliando em conexão verificamos que a conta 7657 existe no plano de contas antigo e no novo plano com o mesmo código, porém, já foi utilizada no módulo de Projetos. caso não tivesse sido utilizada não ocorreria este problema.
Um registro de relacionamento da conta origem 50363 para a conta destino 7657. A conta destino não pode ter movimento para ser considerada válida.
Caso for desejado juntar uma conta existente com uma diferente do plano origem, é necessário criar uma terceira conta:
Exemplo:
Criar 99999
Origem Destino
50363 99999
7657 99999
Observação:
O mesmo está acontecendo para a conta origem 15556 com destino 28027(esta conta tem movimento nos projetos).
O comando abaixo permite identificar os dois casos:
-- esse comando está ajustado para a tabela E615RAT, mas pode ser adaptada para outras tabelas.
select distinct CodEmp, CtaRed, NovCtaRed from
(select CodEmp, NumPrj, CodFpj, CtaFin, CtaRed, CodCcu, SeqRat,
(SELECT DISTINCT CTAATU FROM E043RMP
WHERE CODMPC=100
AND CODMPU=0
AND CODMPA=200
AND CTAANT=E615RAT.CtaRed) as NovCtaRed
from E615RAT
WHERE E615RAT.CODEMP = 1
and (CtaRed <> (SELECT DISTINCT CTAATU FROM E043RMP
WHERE CODMPC=100
AND CODMPU=0
AND CODMPA=200
AND CTAANT=E615RAT.CtaRed))) aux
where exists(select 1 from e615rat b where b.codemp=aux.codemp and b.numprj=aux.numprj and b.ctafin=aux.ctafin and b.ctared=aux.NovCtaRed)
order by 1,2,3
O retorno nesse caso é:
CodEmp CtaRed NovCtaRed
1 15556 28027
1 50363 7657
O comando abaixo permite identificar os dois casos:
-- esse comando está ajustado para a tabela E615RAT, mas pode ser adaptada para outras tabelas.
select distinct CodEmp, CtaRed, NovCtaRed from
(select CodEmp, NumPrj, CodFpj, CtaFin, CtaRed, CodCcu, SeqRat,
(SELECT DISTINCT CTAATU FROM E043RMP
WHERE CODMPC=100
AND CODMPU=0
AND CODMPA=200
AND CTAANT=E615RAT.CtaRed) as NovCtaRed
from E615RAT
WHERE E615RAT.CODEMP = 1
and (CtaRed <> (SELECT DISTINCT CTAATU FROM E043RMP
WHERE CODMPC=100
AND CODMPU=0
AND CODMPA=200
AND CTAANT=E615RAT.CtaRed))) aux
where exists(select 1 from e615rat b where b.codemp=aux.codemp and b.numprj=aux.numprj and b.ctafin=aux.ctafin and b.ctared=aux.NovCtaRed)
order by 1,2,3
O retorno nesse caso é:
CodEmp CtaRed NovCtaRed
1 15556 28027
1 50363 7657