Erreur lorsque vous essayez de publier des transactions de comptabilité analytique ou d’enregistrer un enregistrement maître dans Microsoft Dynamics GP : Impossible d’insérer une clé en double dans l’objet « AAGXXXXX »

Cet article fournit une solution à une erreur qui se produit lorsque vous publiez des transactions de comptabilité analytique ou enregistrez un enregistrement maître dans Microsoft Dynamics GP.

S’applique à : Microsoft Dynamics GP
Numéro de la base de connaissances d’origine : 897280

Symptômes

Lorsque vous essayez de publier des transactions de comptabilité analytique dans Microsoft Dynamics GP, vous pouvez recevoir le message d’erreur suivant :

[Microsoft] [Odbc SQL Server Driver][SQL Server]Violation de primary KEY contrainte 'PKAAG30000', impossible d’insérer une clé en double dans l’objet 'AAG30003'

Remarque

Dans ce message d’erreur, AAG30000 est un espace réservé pour la table. Le mot « contrainte » est une faute d’orthographe de « contrainte ».

Le message d’erreur réel que vous recevez peut contenir l’une des tables suivantes :

  • 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

Cause

Ce problème se produit parce que la valeur disponible suivante (aaRowID) indiquée pour cette table (aaTableID) dans la table AAG00102 a déjà été utilisée dans la table applicable (ou la série de sous-tables).

Par exemple, la table « 30000 » de la table AAG00102 examine les tables AAG30000, AAG30001, AAG30002 et AAG30003. Veillez donc à case activée toutes les tables de la série pour la table applicable.

Résolution

Pour contourner ce problème, utilisez l’une des méthodes suivantes ci-dessous pour comparer la valeur la plus élevée utilisée dans la table AA (et les sous-tables) à la valeur disponible suivante stockée dans la table AAG00102.

Remarque

Avant de suivre les instructions de cet article, vérifiez que vous disposez d’une copie de sauvegarde complète de la base de données que vous pouvez restaurer en cas de problème.

Méthode 1 : Utiliser le script SQL pour mettre à jour des valeurs dans AAG00102 pour la plupart des tables AA

Vous pouvez télécharger un script SQL à l’aide du lien ci-dessous et l’exécuter dans SQL Server Management Studio sur la base de données de l’entreprise pour mettre automatiquement à jour le numéro disponible suivant stocké dans la table AAG00102 par rapport à la dernière valeur utilisée dans la table AA. Le script examine les tableaux suivants :

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

Par conséquent, il examine la plupart des tables AA, mais pas toutes, et pas les sous-tables pour une série.

Méthode 2 : Méthode manuelle pour rechercher et mettre à jour la valeur dans AAG00102 pour une table AA à la fois

  1. Ouvrez SQL Server Management Studio. Pour ce faire, cliquez sur Démarrer, pointez sur Programmes, pointez sur Microsoft SQL Server version, puis cliquez sur SQL Server Management Studio.

  2. Dans la fenêtre Se connecter à SQL Server, connectez-vous à SQL Server Management Studio à l’aide de votre mot de passe sa.

  3. Cliquez sur l’icône Nouvelle requête pour ouvrir une fenêtre de requête, puis copiez ou tapez le script suivant dans la fenêtre de requête. Exécutez sur la base de données de l’entreprise.

    select MAX (aaGLHdrID) from AAG30000
    */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
    
  4. Notez les résultats de la requête qui affichent la valeur la plus élevée utilisée pour la dernière fois dans la table. (Si la table comporte des sous-tables, veillez également à case activée la dernière valeur utilisée la plus élevée dans celles-ci.)

  5. Tapez le script suivant dans la fenêtre de requête et exécutez sur la base de données Dynamics :

    select * from AAG00102 where CMPANYID = 'nnn'
    

    Dans cette requête, remplacez l’espace réservé nnn par l’ID d’entreprise. Pour rechercher l’ID d’entreprise, tapez la requête suivante dans la fenêtre de requête.

    select * from SY01500
    

    Sélectionnez la base de données DYNAMICS dans la liste en haut de la fenêtre, puis appuyez sur F5.

  6. Vérifiez que la valeur dans le champ aaRowID pour la valeur aaTableID de 30000 (ou la table appropriée) est supérieure ou égale à la valeur que vous avez notée à l’étape 4.

  7. Utilisez le script suivant pour mettre à jour la valeur. Pour ce faire, tapez le script ci-dessous dans la fenêtre de requête, puis appuyez sur F5.

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

    Remarque

    Dans ce script, remplacez l’espace réservé aaaa par la valeur que vous avez notée à l’étape 4. Remplacez l’espace réservé zzz par l’ID d’entreprise. Remplacez également aaTableID par la table appropriée.