From f9d25bc3d334ca0dbffee9b0be174eb8ba897e0b Mon Sep 17 00:00:00 2001 From: R-Jayaraman Date: Tue, 28 Jul 2026 18:57:06 +0530 Subject: [PATCH] fix: guard against None row in get_stock_balance_for row defaults to None but was dereferenced unconditionally when computing the incoming rate for batch-tracked items, causing an AttributeError for any caller (e.g. direct API calls) that omits row while still passing batch_no. The other two row accesses in this function already guard against None; this brings the incoming-rate check in line with them. --- .../stock/doctype/stock_reconciliation/stock_reconciliation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 6bc49503012..b51e52c98bb 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -1547,7 +1547,7 @@ def get_stock_balance_for( ) serial_nos = "\n".join(d.serial_no for d in serial_no_details if d.batch_no == batch_no) - if row.use_serial_batch_fields and row.batch_no and (qty or row.current_qty): + if row and row.use_serial_batch_fields and row.batch_no and (qty or row.current_qty): rate = get_incoming_rate( frappe._dict( {