Microsoft Dynamics GP で分析会計トランザクションを転記したり、マスター レコードを保存しようとするとエラーが発生する: オブジェクト 'AAGXXXXX' に重複キーを挿入できません

この記事では、分析会計トランザクションを転記するか、Microsoft Dynamics GP でマスター レコードを保存するときに発生するエラーの解決策を示します。

適用対象: Microsoft Dynamics GP
元の KB 番号: 897280

現象

Microsoft Dynamics GP で分析会計トランザクションを投稿しようとすると、次のエラー メッセージが表示されることがあります。

[Microsoft][ODBC SQL Server Driver][SQL Server]PRIMARY KEY contraint 'PKAAG30000' の違反により、オブジェクト 'AAG30003' に重複キーを挿入できません

注:

このエラー メッセージでは、 AAG30000 はテーブルのプレースホルダーです。 "contraint" という単語は、"constraint" のスペルミスです。

実際に表示されるエラー メッセージには、次の表のいずれかが含まれている場合があります。

  • 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

原因

この問題は、AAG00102 テーブルのこのテーブル (aaTableID) に示されている次に使用可能な値 (aaRowID) が、該当するテーブル (または一連のサブテーブル) で既に使用されているために発生します。

たとえば、AAG00102 テーブルの '30000' テーブルでは、AAG30000、AAG30001、AAG30002、および AAG30003 テーブルが表示されるため、該当するテーブルのシリーズのすべてのテーブルをチェックするように注意してください。

解決方法

この問題を回避するには、次のいずれかの方法を使用して、AA テーブル (およびサブテーブル) で使用されている最大値を、AAG00102 テーブルに格納されている次の使用可能な値と比較します。

注:

この記事の手順に従う前に、問題が発生した場合に復元できるデータベースの完全なバックアップ コピーがあることを確認してください。

方法 1: SQL スクリプトを使用して、ほとんどの AA テーブルのAAG00102の値を更新する

次のリンクを使用して SQL スクリプトをダウンロードし、会社のデータベースに対してSQL Server Management Studioで実行して、AA テーブルで最後に使用した値と比較して、AAG00102 テーブルに格納されている次の使用可能な番号を自動的に更新できます。 スクリプトでは、次の表を確認します。

AAG10000、AAG20000、AAG30000、AAG00201、AAG00400、AAG00401、AAG00500、AAG00600、AAG00900、AAG00903

そのため、AA テーブルの大部分は見られますが、一連のサブテーブルではなく、すべてではありません。

方法 2: 一度に 1 つの AA テーブルのAAG00102の値を調査および更新する手動メソッド

  1. SQL Server Management Studio を開きます。 これを行うには、[スタート] をクリックし、[プログラム] をポイントし、[Microsoft SQL Server バージョン] をポイントして、[SQL Server Management Studio] をクリックします。

  2. [SQL Serverに接続] ウィンドウで、sa パスワードを使用してSQL Server Management Studioにログインします。

  3. [新しいクエリ] アイコンをクリックしてクエリ ウィンドウを開き、クエリ ウィンドウで次のスクリプトをコピーまたは入力します。 会社のデータベースに対して実行します。

    select MAX (aaGLHdrID) from AAG30000
    */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
    
  4. テーブルで最後に使用された最大値が表示されるクエリ結果に注意してください。 (テーブルにサブテーブルがある場合は、それらの中で最後に使用した最大値を必ずチェックしてください)。

  5. クエリ ウィンドウに次のスクリプトを入力し、Dynamics データベースに対して実行します。

    select * from AAG00102 where CMPANYID = 'nnn'
    

    このクエリでは、 nnn プレースホルダーを会社 ID に置き換えます。 会社 ID を見つけるには、クエリ ウィンドウに次のクエリを入力します。

    select * from SY01500
    

    ウィンドウの上部にある一覧で DYNAMICS データベースを選択し、F5 キーを押します。

  6. aaTableID30000 (または適切なテーブル) の aaRowID フィールドの値が、手順 4 で説明した値以上であることを確認します。

  7. 値を更新するには、次のスクリプトを使用します。 これを行うには、クエリ ウィンドウに以下のスクリプトを入力し、F5 キーを押します。

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

    注:

    このスクリプトでは、 yyyy プレースホルダーを手順 4 で説明した値に置き換えます。 zzz プレースホルダーを会社 ID に置き換えます。 また、aaTableID を適切なテーブルに置き換えます。