From 1dde2b5f1e0e6b4d2a4303c601d8f686367cafb8 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 29 Jun 2026 22:38:00 +0530 Subject: [PATCH] fix(stock): savepoint repost loop in Stock Ledger Invariant Check (Postgres) Same shape: the rows loop submits a Repost Item Valuation; a caught DuplicateEntryError poisons the Postgres txn so the next iteration's submit raises InFailedSqlTransaction. Savepoint + rollback(save_point=) before continue. No-op on MariaDB. --- .../stock_ledger_invariant_check.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py index edfcde2de2c..137feb5a34c 100644 --- a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py +++ b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py @@ -304,6 +304,7 @@ def create_reposting_entries(rows: str | list, item_code: str | None = None, war for row in rows: row = frappe._dict(row) + frappe.db.savepoint("repost_invariant_check") try: doc = frappe.get_doc( { @@ -320,6 +321,7 @@ def create_reposting_entries(rows: str | list, item_code: str | None = None, war entries.append(get_link_to_form("Repost Item Valuation", doc.name)) except frappe.DuplicateEntryError: + frappe.db.rollback(save_point="repost_invariant_check") continue if entries: