Fel när du försöker publicera analysredovisningstransaktioner eller spara en huvudpost i Microsoft Dynamics GP: Det går inte att infoga dubblettnyckeln i objektet "AAGXXXXX"

Den här artikeln innehåller en lösning på ett fel som uppstår när du publicerar analytiska redovisningstransaktioner eller sparar en huvudpost i Microsoft Dynamics GP.

Gäller för: Microsoft Dynamics GP
Ursprungligt KB-nummer: 897280

Symptom

När du försöker publicera analytiska redovisningstransaktioner i Microsoft Dynamics GP kan du få följande felmeddelande:

[Microsoft] [ODBC SQL Server Driver][SQL Server]Överträdelse av PRIMARY KEY contraint 'PKAAG30000', kan inte infoga dubblettnyckel i objektet 'AAG30003'

Obs!

I det här felmeddelandet är AAG30000 en platshållare för tabellen. Ordet "contraint" är en felstavning av "begränsning".

Det faktiska felmeddelandet som du får kan innehålla någon av följande tabeller:

  • 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

Orsak

Det här problemet beror på att nästa tillgängliga värde (aaRowID) som anges för den här tabellen (aaTableID) i tabellen AAG00102 redan har använts i den tillämpliga tabellen (eller serier med undertabeller).

Tabellen "30000" i tabellen AAG00102 tittar till exempel på tabellerna AAG30000, AAG30001, AAG30002 och AAG30003, så var noga med att kontrollera alla tabeller i serien för den tillämpliga tabellen.

Lösning

Du kan undvika det här problemet genom att använda någon av följande metoder nedan för att jämföra det högsta använda värdet i AA-tabellen (och undertabellerna) med nästa tillgängliga värde som lagras i tabellen AAG00102.

Obs!

Innan du följer anvisningarna i den här artikeln kontrollerar du att du har en fullständig säkerhetskopia av databasen som du kan återställa om ett problem uppstår.

Metod 1: Använd SQL-skript för att uppdatera värden i AAG00102 för de flesta AA-tabeller

Du kan ladda ned ett SQL-skript med hjälp av länken nedan och köra det i SQL Server Management Studio mot företagsdatabasen för att automatiskt uppdatera nästa tillgängliga nummer som lagras i tabellen AAG00102 jämfört med det senast använda värdet i AA-tabellen. Skriptet tittar på följande tabeller:

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

Så den tittar på de flesta AA-tabellerna, men inte alla, och inte undertabeller för en serie.

Metod 2: Manuell metod för att undersöka och uppdatera värdet i AAG00102 för en AA-tabell i taget

  1. Öppna SQL Server Management Studio. Det gör du genom att klicka på Start, peka på Program, peka på Microsoft SQL Server version och sedan klicka på SQL Server Management Studio.

  2. I fönstret Anslut till SQL Server loggar du in på SQL Server Management Studio med ditt SA-lösenord.

  3. Klicka på ikonen Ny fråga för att öppna ett frågefönster och kopiera eller skriv följande skript i frågefönstret. Kör mot företagsdatabasen.

    select MAX (aaGLHdrID) from AAG30000
    */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
    
  4. Observera frågeresultaten som visar det högsta värdet som senast användes i tabellen. (Om tabellen har undertabeller kontrollerar du även det högsta senast använda värdet i dessa.)

  5. Skriv följande skript i frågefönstret och kör mot Dynamics-databasen:

    select * from AAG00102 where CMPANYID = 'nnn'
    

    I den här frågan ersätter du platshållaren nnn med företags-ID:t. Om du vill hitta företags-ID:t skriver du följande fråga i frågefönstret.

    select * from SY01500
    

    Välj DYNAMICS-databasen i listan överst i fönstret och tryck sedan på F5.

  6. Kontrollera att värdet i fältet aaRowID för aaTableID-värdet30000 (eller lämplig tabell) är lika med eller större än det värde som du antecknade i steg 4.

  7. Använd följande skript för att uppdatera värdet. Det gör du genom att skriva skriptet nedan i frågefönstret och sedan trycka på F5.

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

    Obs!

    I det här skriptet ersätter du yyyy-platshållaren med det värde som du antecknade i steg 4. Ersätt zzz-platshållaren med företags-ID:t. Ersätt även aaTableID med lämplig tabell.