From 1f21c0b0af659051e45ae6f30f068965e63b1867 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:09:44 +0000 Subject: [PATCH] fix(stock): fetch item stock UOM in stock reconciliation (backport #58284) (#58291) Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com> Co-authored-by: Mihir Kandoi --- .../stock_reconciliation/stock_reconciliation.py | 15 +++++++++++---- .../test_stock_reconciliation.py | 5 +++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index d6df4790517..12cda4cb691 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -1179,12 +1179,15 @@ def get_item_and_warehouses(item_code, warehouse): from frappe.utils.nestedset import get_descendants_of items = [] + stock_uom = frappe.get_cached_value("Item", item_code, "stock_uom") if frappe.get_cached_value("Warehouse", warehouse, "is_group"): childrens = get_descendants_of("Warehouse", warehouse, ignore_permissions=True, order_by="lft") for ch_warehouse in childrens: - items.append(frappe._dict({"item_code": item_code, "warehouse": ch_warehouse})) + items.append( + frappe._dict({"item_code": item_code, "warehouse": ch_warehouse, "stock_uom": stock_uom}) + ) else: - items = [frappe._dict({"item_code": item_code, "warehouse": warehouse})] + items = [frappe._dict({"item_code": item_code, "warehouse": warehouse, "stock_uom": stock_uom})] return items @@ -1194,7 +1197,8 @@ def get_items_for_stock_reco(warehouse, company): items = frappe.db.sql( f""" select - i.name as item_code, i.item_name, bin.warehouse as warehouse, i.has_serial_no, i.has_batch_no + i.name as item_code, i.item_name, bin.warehouse as warehouse, i.has_serial_no, i.has_batch_no, + i.stock_uom from `tabBin` bin, `tabItem` i where @@ -1212,7 +1216,8 @@ def get_items_for_stock_reco(warehouse, company): items += frappe.db.sql( """ select - i.name as item_code, i.item_name, id.default_warehouse as warehouse, i.has_serial_no, i.has_batch_no + i.name as item_code, i.item_name, id.default_warehouse as warehouse, i.has_serial_no, + i.has_batch_no, i.stock_uom from `tabItem` i, `tabItem Default` id where @@ -1258,6 +1263,7 @@ def get_item_data(row, qty, valuation_rate, serial_no=None): "current_serial_no": serial_no, "serial_no": serial_no, "batch_no": row.get("batch_no"), + "stock_uom": row.get("stock_uom"), } @@ -1285,6 +1291,7 @@ def get_itemwise_batch(warehouse, posting_date, company, item_code=None): "valuation_rate": row[9], "item_name": row[1], "batch_no": row[4], + "stock_uom": row[11], } ) ) diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 0d54ea89eba..37e2eb840c6 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -141,6 +141,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin): "_Test Stock Reco Item", is_stock_item=1, valuation_rate=100, + stock_uom="_Test UOM", warehouse="_Test Warehouse Ledger 1 - _TC", opening_stock=100, ) @@ -148,8 +149,8 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin): items = get_items("_Test Warehouse Group 1 - _TC", nowdate(), nowtime(), "_Test Company") self.assertEqual( - ["_Test Stock Reco Item", "_Test Warehouse Ledger 1 - _TC", 100], - [items[0]["item_code"], items[0]["warehouse"], items[0]["qty"]], + ["_Test Stock Reco Item", "_Test Warehouse Ledger 1 - _TC", 100, "_Test UOM"], + [items[0]["item_code"], items[0]["warehouse"], items[0]["qty"], items[0]["stock_uom"]], ) def test_stock_reco_for_serialized_item(self):