Errore durante il tentativo di registrare transazioni di contabilità analitica o salvare un record master in Microsoft Dynamics GP: Impossibile inserire una chiave duplicata nell'oggetto 'AAGXXXXX'

Questo articolo fornisce una soluzione a un errore che si verifica quando si registrano transazioni di contabilità analitica o si salva un record master in Microsoft Dynamics GP.

Si applica a: Microsoft Dynamics GP
Numero KB originale: 897280

Sintomi

Quando si tenta di pubblicare transazioni di contabilità analitica in Microsoft Dynamics GP, è possibile che venga visualizzato il messaggio di errore seguente:

[Microsoft] [ODBC SQL Server Driver][SQL Server]Violazione della violazione della chiave PRIMARIA 'PKAAG30000', impossibile inserire una chiave duplicata nell'oggetto 'AAG30003'

Nota

In questo messaggio di errore AAG30000 è un segnaposto per la tabella. La parola "contraint" è un errore di ortografia di "vincolo".

Il messaggio di errore effettivo visualizzato può contenere una delle tabelle seguenti:

  • 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

Causa

Questo problema si verifica perché il valore disponibile successivo (aaRowID) indicato per questa tabella (aaTableID) nella tabella AAG00102 è già stato usato nella tabella applicabile (o serie di sottocartelle).

Ad esempio, la tabella '30000' nella tabella AAG00102 esaminerà le tabelle AAG30000, AAG30001, AAG30002 e AAG30003, quindi prestare attenzione a controllare tutte le tabelle della serie per la tabella applicabile.

Risoluzione

Per risolvere questo problema, usare uno dei metodi seguenti per confrontare il valore più alto utilizzato nella tabella AA (e nelle sottotabella) con il valore disponibile successivo archiviato nella tabella AAG00102.

Nota

Prima di seguire le istruzioni in questo articolo, assicurarsi di disporre di una copia di backup completa del database che è possibile ripristinare in caso di problemi.

Metodo 1: Usare script SQL per aggiornare i valori in AAG00102 per la maggior parte delle tabelle AA

È possibile scaricare uno script SQL usando il collegamento seguente ed eseguirlo in SQL Server Management Studio nel database aziendale per aggiornare automaticamente il numero disponibile successivo archiviato nella tabella AAG00102 rispetto all'ultimo valore usato nella tabella AA. Lo script esaminerà le tabelle seguenti:

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

Quindi esamina la maggior parte delle tabelle AA, ma non tutte, e non le sotto-tabelle per una serie.

Metodo 2: Metodo manuale per la ricerca e l'aggiornamento del valore in AAG00102 per una tabella AA alla volta

  1. Aprire SQL Server Management Studio. A tale scopo, fare clic sul pulsante Start, scegliere Programmi, Microsoft SQL Server versione e quindi fare clic su SQL Server Management Studio.

  2. Nella finestra Connetti a SQL Server accedere a SQL Server Management Studio usando la password sa.

  3. Fare clic sull'icona Nuova query per aprire una finestra di query e copiare o digitare lo script seguente nella finestra della query. Eseguire nel database aziendale.

    select MAX (aaGLHdrID) from AAG30000
    */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
    
  4. Si noti i risultati della query che mostreranno l'ultimo valore più alto usato nella tabella. Se la tabella include tabelle secondarie, assicurarsi di controllare anche l'ultimo valore utilizzato più alto in tali tabelle.

  5. Digitare lo script seguente nella finestra della query ed eseguire nel database Dynamics:

    select * from AAG00102 where CMPANYID = 'nnn'
    

    In questa query sostituire il segnaposto nnn con l'ID società. Per trovare l'ID società, digitare la query seguente nella finestra della query.

    select * from SY01500
    

    Selezionare il database DYNAMICS nell'elenco nella parte superiore della finestra e quindi premere F5.

  6. Verificare che il valore nel campo aaRowID per il valore aaTableIDdi 30000 (o tabella appropriata) sia uguale o maggiore del valore annotato nel passaggio 4.

  7. Usare lo script seguente per aggiornare il valore. A tale scopo, digitare lo script seguente nella finestra della query e quindi premere F5.

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

    Nota

    In questo script sostituire il segnaposto aaaa con il valore annotato nel passaggio 4. Sostituire il segnaposto zzz con l'ID società. Sostituire anche aaTableID con la tabella appropriata.