Erro ao tentar postar transações de Contabilidade Analítica ou salvar um registro mestre no Microsoft Dynamics GP: não é possível inserir chave duplicada no objeto 'AAGXXXXXX'

Este artigo fornece uma solução para um erro que ocorre quando você posta transações de Contabilidade Analítica ou salva um registro mestre no Microsoft Dynamics GP.

Aplica-se a: Microsoft Dynamics GP
Número original do KB: 897280

Sintomas

Ao tentar postar transações de Contabilidade Analítica no Microsoft Dynamics GP, você pode receber a seguinte mensagem de erro:

[Microsoft] [ODBC SQL Server Driver][SQL Server]Violação do PKAAG30000', não pode inserir chave duplicada no objeto 'AAG30003'

Observação

Nesta mensagem de erro, AAG30000 é um espaço reservado para a tabela. A palavra "contraint" é um erro de ortografia de "restrição".

A mensagem de erro real que você recebe pode conter uma das seguintes tabelas:

  • AAG00103
  • AAG00500
  • AAG00600
  • AAG00601
  • AAG00602
  • AAG00603
  • AAG00400
  • AAG00401
  • AAG00201
  • AAG00310
  • AAG00900
  • AAG00901
  • AAG00902
  • AAG00903
  • AAG10000
  • AAG10001
  • AAG10002
  • AAG10003
  • AAG20000
  • AAG20001
  • AAG20002
  • AAG20003
  • AAG30000
  • AAG30001
  • AAG30002
  • AAG30003

Motivo

Esse problema ocorre porque o próximo valor disponível (aaRowID) indicado para esta tabela (aaTableID) na tabela AAG00102 já foi usado na tabela aplicável (ou série de sub-tabelas).

Por exemplo, a tabela '30000' na tabela AAG00102 examinará as tabelas AAG30000, AAG30001, AAG30002 e AAG30003, portanto, tenha cuidado para marcar todas as tabelas da série para a tabela aplicável.

Resolução

Para contornar esse problema, use um dos seguintes métodos abaixo para comparar o valor usado mais alto na tabela AA (e sub-tabelas) com o próximo valor disponível armazenado na tabela AAG00102.

Observação

Antes de seguir as instruções deste artigo, certifique-se de ter uma cópia de backup completa do banco de dados que você pode restaurar se ocorrer um problema.

Método 1: usar o script SQL para atualizar valores em AAG00102 para a maioria das tabelas AA

Você pode baixar um script SQL usando o link abaixo e executá-lo em SQL Server Management Studio no banco de dados da empresa para atualizar automaticamente o próximo número disponível armazenado na tabela AAG00102 em comparação com o último valor usado na tabela AA. O script examinará as seguintes tabelas:

AAG10000, AAG20000, AAG30000, AAG00201, AAG00400, AAG00401, AAG00500, AAG00600, AAG00900 e AAG00903

Portanto, ele olha para a maioria das tabelas AA, mas não todas, e não sub-tabelas para uma série.

Método 2: método manual para pesquisar e atualizar o valor em AAG00102 para uma tabela AA por vez

  1. Abra o SQL Server Management Studio. Para fazer isso, clique em Iniciar, aponte para Programas, aponte para a versão do Microsoft SQL Server e clique em SQL Server Management Studio.

  2. Na janela Conectar a SQL Server, faça logon no SQL Server Management Studio usando sua senha sa.

  3. Clique no ícone Nova Consulta para abrir uma janela de consulta e copiar ou digitar o script a seguir na janela de consulta. Execute no banco de dados da empresa.

    select MAX (aaGLHdrID) from AAG30000
    */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
    
  4. Observe os resultados da consulta que mostrarão o valor mais alto usado pela última vez na tabela. (Se a tabela tiver sub-tabelas, certifique-se de marcar o valor mais alto usado por último também.)

  5. Digite o seguinte script na janela de consulta e execute no banco de dados Dynamics:

    select * from AAG00102 where CMPANYID = 'nnn'
    

    Nesta consulta, substitua o espaço reservado nnn pela ID da empresa. Para localizar a ID da empresa, digite a consulta a seguir na janela de consulta.

    select * from SY01500
    

    Selecione o banco de dados DYNAMICS na lista na parte superior da janela e pressione F5.

  6. Verifique se o valor no campo aaRowID para o valor aaTableID de 30000 (ou tabela apropriada) é igual ou maior que o valor que você observou na etapa 4.

  7. Use o script a seguir para atualizar o valor. Para fazer isso, digite o script abaixo na janela de consulta e pressione F5.

    update aag00102 set aaROWID = 'yyyy' where aaTableID = 30000 and CMPANYID = 'zzz'
    

    Observação

    Neste script, substitua o espaço reservado yyyyy pelo valor que você observou na etapa 4. Substitua o espaço reservado zzz pela ID da empresa. Substitua também o aaTableID pela tabela apropriada.