ERP – Configuração de Web Services – Violação de chave
Incidente
No módulo de Cadastros, ao tentar inserir uma nova configuração de Web Services através da tela F000CWS, é apresentada a mensagem: Violação de chave.
Causa
As configurações são gravadas na tabela E000CMP. A chave da tabela E000CMP é o campo seqcmp.
Esse campo seqcmp, é controlado na tabela R900NXV, onde a cada nova tentativa de gravação gera o próximo número.
A tabela R900NXV está com um sequencial menor do que consta já gravado no campo E000CMP.seqcmp. Isso justifica o erro que é apresentado.
Solução
Para que a mensagem não seja apresentada ao efetuar inclusão da configuração, realize os passos a seguir:
1. Verifique o último numero gravado na tabela E000CMP. Segue o comando a ser executado para essa validação:
SELECT MAX(SEQCMP) FROM E000CMP
Exemplo abaixo:
2. Verifique o maior LSTVAL gravado no campo da tabela E000CMP. Segue comando a ser executado para esta validação:
SELECT * FROM R900NXV WHERE CODPKY = 'E000CMP'
Exemplo abaixo:
Observação
No exemplo apresentado o valor do campo:
E000CMP.seqcmp = 20561
E o valor apresentado no campo:
R900NXV.lstval = 12089
3. Se o valor do campo E000CMP.seqcmp, retornado no passo 1, for menor ou igual ao número do controle de chave da tabela R900NXV.LstVal, retornado no passo 2, é possível afirmar que o controle está adequado e não é o causador dessa mensagem.
Já se o valor do campo E000CMP.seqcmp, retornado no passo 1, for maior que o número do controle de chave da tabela R900NXV.LstVal, retornado no passo 2, é possível afirmar que isto é a causa da mensagem, pois ao buscar o próximo número da chave retorna um que já existe e por isso resulta na mensagem de Violação de chave.
4. Confirmado problema no controle de chave, ajuste via comando no banco de dados o sequencial da tabela R900NXV para essa chave da tabela E000CMP.
Insira um número igual ou maior que maior E000CMP.seqcmp já utilizado na tabela, conforme informação retornada no passo 1.
Exemplo de comando para realizar essa alteração:
UPDATE R900NXV SET LSTVAL = 'XX' WHERE CODPKY = 'E000CMP'
Atenção! Antes de realizar qualquer alteração, analise o impacto que poderá ter e faça backup da informação original dos registros que serão afetados.