はじめに
「レコードが存在しない、または削除された」というエラーメッセージは、Odoo を使う現場で最も戸惑いを招く表示のひとつです。フォームを開いたときやレコードの承認中、自動処理が走ったタイミングなど、予告なく現れることが多いです。
紛らわしい表現ですが、多くの場合これはデータが壊れているというより、参照が切れていることを示すサインです。
ここでは、エラーの本当の意味を分解し、安全に解決する手順を紹介します。
このエラーは何を示すのか
Odoo が特定のレコードIDにアクセスしようとした際に起きます。具体的には次のような状況です:
- そのIDのレコードが既に存在しない
- 該当レコードが削除されている
- アクセス権限によって見えなくなっている
- 別の会社(マルチカンパニー)に属していて現在のコンテキストで参照できない
例:
record = self.env['res.partner'].browse(45)
もしID 45 のレコードが存在しなければ、Odoo はこのエラーを投げます。
よくある原因
1. 削除済みレコードが参照されている
Many2one などの関連フィールドが、既に削除されたエントリを指していることがあります。
この状態はよく次の操作後に発生します:
- 手動での削除
- テストデータのクリーニング
- インポート失敗による中途半端な状態
2. 外部IDの不整合
API 経由の連携で外部システムが無効なIDを送り込むことがあります。
例えば Odoo が受け取ったデータに
{ "partner_id": 99999 }
のような存在しないIDが含まれていると、このエラーにつながります。
3. マルチカンパニーの可視性制限
レコード自体は存在していても、現在の会社コンテキストから見えない場合があります。
スーパーユーザーで確認すると見つかることがよくあります。
4. マイグレーションやアップグレード時の不整合
モジュール更新後にレコード構造が変わり、既存の参照が古い形式を指したままになることがあります。
対処方法
ステップ1 — レコードの存在確認
record = self.env['model.name'].browse(record_id) if record.exists(): # 安全に処理を続行可能
ステップ2 — アクセス権の確認
まず管理者アカウントで表示を試してください。
管理者は見えるが一般ユーザーは見えない場合 → アクセスルールの問題です。
ステップ3 — 関連フィールドのクリーニング
孤立した(オーファン化した)Many2one 等の参照を探し、正しい値に修正するか NULL にします。
ステップ4 — 外部連携の検証
次を点検してください:
- API の送信ペイロード
- ID マッピングのロジック
- 同期レイヤーの処理
統合されたシステムでは ID の不整合が頻繁な原因になります。
再発防止策
- ID をハードコーディングしない
- 外部IDを適切に使う
- API入力を検証する
- マイグレーションはステージングで事前検証する
- 他で参照されているレコードを安易に削除しない
Dasolo が「Record Does Not Exist」問題をどう防ぐか
「Record Does Not Exist」エラーは、モデル間の参照が壊れたときに現れることが多いです。UI に表示されても、根本原因は削除されたレコード、不整合な関連リンク、または安全でない直接DB操作であることが一般的です。
Dasolo では、この種のエラーを単なる例外として扱わず、システム構造の不整合を示すシグナルとして捉えます。通常、次のような問題が隠れています:
- 孤立した参照(オーファン)
- 不適切な削除ワークフロー
- 連携先との不整合
- レコードアクセス前の検証不足
- マルチカンパニーのコンテキスト管理の不統一
当社ではデータのライフサイクル管理を厳格に設計し、重要なレコードは削除せずにアーカイブする運用を推奨します。ORM を正しく使った参照整合性の担保により、本番での「レコードが見つからない」例外を最小化します。
まとめ
Odoo の「Record Does Not Exist」エラーは、システムが削除済みまたは正しく作成されていないレコードへアクセスしようとしたときに発生します。一見単純な欠損に見えても、背後には参照ロジックの破綻や安全でないデータ操作が潜んでいることが多いです。
レコードの存在チェックを行い、参照構造を一貫させ、直接DBを触らない設計にすることで、このエラーの発生頻度は大幅に下がります。整備された Odoo 環境では、制御されたワークフローと予測可能なデータ運用によって参照整合性が保たれます。
この問題を適切に扱うことは、目先のエラー解消にとどまらず、データベース全体の安定性とシステムの長期的な信頼性を高めます。
よくある質問
必ずしもそうとは限りません。単に現在のコンテキストから見えないだけのことがあります。
はい。特に自動同期ジョブには影響が出やすいです。
参照依存がないと確実に確認できる場合のみ削除してください。