ERP – Processo Automático 163 Integração do fluxo de caixa entre ERP x SeniorX – Violação de Chave
Incidente
Ao tentar fazer a carga inicial do Fluxo de Caixa do Senior X é apresentada a mensagem:
Erro na execução do processo automático: Processo: Baixa de títulos a receber - Erro
executando inserção de registros na tabela E000MCR - Violação de chave.
ou
Não foi possível processar Inter-Company: Violação de chave.
ou
Processo cancelado! Erro ao tentar inserir um relacionamento de lançamentos na Tabela XX.
Causa
Estas mensagens são retornadas, pois existem divergências de informações nas tabelas do Gestão Empresarial | ERP.
Solução
Para que a mensagem não seja apresentada ao efetuar a carga inicial do fluxo de caixa, realize os passos a seguir:
Importante
Iremos tomar como exemplo a tabela E000MCR, porém pode variar qual é a tabela que consta na mensagem.
1. Identifique a tabela com erro que consta na mensagem;
2. Identifique qual a chave sequencial dessa tabela. Se a tabela que consta na mensagem for a E000MCR a chave sequencial é o campo SeqInt:
Observação
Em outras tabelas podem haver mais de um campo na chave. Exemplo: CodEmp, CodFil, SeqInt, neste caso leve em consideração todos os campos da chave na cláusula WHERE do SQL a seguir;
3. Verifique qual o valor máximo desse campo, através de um comando SELECT no banco de dados:
SELECT MAX(SEQINT) FROM E000MCR
Salve esse número que retornou;
4. Verifique se a tabela em questão tem sua sequencia controlada pelo sistema na tabela R900NXV:
SELECT * FROM R900NXV WHERE UPPER(CODPKY) LIKE '%E000MCR%'
No exemplo com a tabela E000MCR podemos constatar que ele é controlada pela tabela R900NXV, pois foi encontrada na busca. Se não fosse encontrada, o problema pode ser outro;
Nesse exemplo verificamos que o resultado da busca anterior é 12.980 é maior do que 12.000 do campo LSTVAL encontrado na busca atual e isso precisa ser ajustado, pois o campo LSTVAL da tabela R900NXV controla qual será o próximo SEQINT da tabela E000MCR.
Quando o sistema tentar inserir um novo registro na E000MCR irá consultar a R900NXV e somar 1. Vai inserir 12.001 e ocasionar chave duplicada, pois essa sequência já existe.
5. Para corrigir a situação, execute um comando update e atualize o campo LSTVAL na tabela R900NXV com o número atualizado para gerar a próxima sequencia:
UPDATE R900NXV SET LSTVAL = (SELECT MAX (SEQINT) FROM E000MCR (WHERE chave se houver)) WHERE UPPER(CODPKY) = 'E000MCR'
6. Execute novamente os 2 comandos SELECT acima e observe que o valor de SeqInt (campo que vai
variar de acordo com a tabela com problema) será o mesmo que LSTVAL da R900NXV, assim resolvendo o problema.
Importante
Caso esteja desenvolvendo alguma regra ou relatório que insere informações em alguma tabela que utilize campo sequencial controlado pela R900NXV (identifique no passo 4), não deve incrementar
manualmente a chave. Para isso, utilize na programação da regra a função GetNextValue que irá fazer uma busca da próxima chave válida.
Exemplo:
ExecSP("GETNEXTVALUE", "pKey='E000MCR#1';pIncrement='1';pSelect=''",Retorno);
Utilize a variável Retorno para alimentar o campo sequencial necessário.