16040 - Violação de Chave na Transferência de Empresa/Filial R040ACU
Problema: Ao tentar efetuar transferência de empresa/filial, seja individual ou coletivamente, ocorre a mensagem Violação de Chave.
Quando ocorre / onde se aplica: Colaboradores > Históricos > Filial, Colaboradores > Históricos > Coletivos
Solução: Ao gerar o SQLMON do momento do erro, verificamos que o problema era um registros duplicado na tabela R040ACU, ao analisar o Select desta tabela de um colaborador.
A rotina que transfere o colaborador de filial constrói um insert na tabela R040ACU com valores fixos da filial destino nas colunas NumEmp, TipCol, NumCad e valor fixo na coluna TabEve com a tabela de eventos da empresa destino, para cada registro existente na R040ACU da filial origem do colaborador transferido. As colunas IniPer, CodTot e ValTot do insert são populadas com o resultado da consulta na filial origem, ou seja, são variáveis.
O problema acontece porque no select feito na empresa de origem o valor da coluna TabEve é variável, e existe um registro praticamente idêntico, mudando apenas o código da TabEve de 1 para 2, por exemplo. Quando vai inserir esse registro na empresa destino, ele tenta inserir duas vezes o mesmo registro, pois o insert foi construído com valor da tabela de eventos da empresa destino.
Em resumo, existe o mesmo totalizador para tabelas de eventos diferentes, com o mesmo valor e em um mesmo período de férias(anexo) e isso não pode ocorrer. Isso está gerando a violação de chave.
Isso pode ocorrer se a folha foi importada, se houveram problemas de importação, se houve alteração na tabela de eventos.
Lembrando sempre que a empresa de destino deve utilizar a mesma tabela de eventos da empresa de origem.
Quando ocorre / onde se aplica: Colaboradores > Históricos > Filial, Colaboradores > Históricos > Coletivos
Solução: Ao gerar o SQLMON do momento do erro, verificamos que o problema era um registros duplicado na tabela R040ACU, ao analisar o Select desta tabela de um colaborador.
A rotina que transfere o colaborador de filial constrói um insert na tabela R040ACU com valores fixos da filial destino nas colunas NumEmp, TipCol, NumCad e valor fixo na coluna TabEve com a tabela de eventos da empresa destino, para cada registro existente na R040ACU da filial origem do colaborador transferido. As colunas IniPer, CodTot e ValTot do insert são populadas com o resultado da consulta na filial origem, ou seja, são variáveis.
O problema acontece porque no select feito na empresa de origem o valor da coluna TabEve é variável, e existe um registro praticamente idêntico, mudando apenas o código da TabEve de 1 para 2, por exemplo. Quando vai inserir esse registro na empresa destino, ele tenta inserir duas vezes o mesmo registro, pois o insert foi construído com valor da tabela de eventos da empresa destino.
Em resumo, existe o mesmo totalizador para tabelas de eventos diferentes, com o mesmo valor e em um mesmo período de férias(anexo) e isso não pode ocorrer. Isso está gerando a violação de chave.
Isso pode ocorrer se a folha foi importada, se houveram problemas de importação, se houve alteração na tabela de eventos.
Lembrando sempre que a empresa de destino deve utilizar a mesma tabela de eventos da empresa de origem.