diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
index 73cda72..06e14da 100644
--- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
+++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
@@ -181,3 +181,28 @@
 			sre_details = {d.name: d for d in sre_data}
 
 	return sre_details
+
+
+def get_sre_reserved_qty_details(item_code_list: list, warehouse_list: list) -> dict:
+	sre_details = {}
+
+	if item_code_list and warehouse_list:
+		sre = frappe.qb.DocType("Stock Reservation Entry")
+		sre_data = (
+			frappe.qb.from_(sre)
+			.select(
+				sre.item_code, sre.warehouse, Sum(sre.reserved_qty - sre.delivered_qty).as_("reserved_qty")
+			)
+			.where(
+				(sre.docstatus == 1)
+				& (sre.item_code.isin(item_code_list))
+				& (sre.warehouse.isin(warehouse_list))
+				& (sre.status.notin(["Delivered", "Cancelled"]))
+			)
+			.groupby(sre.item_code, sre.warehouse)
+		).run(as_dict=True)
+
+		if sre_data:
+			sre_details = {(d["item_code"], d["warehouse"]): d["reserved_qty"] for d in sre_data}
+
+	return sre_details
diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py
index 0fc642e..b8d6b6c 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.py
+++ b/erpnext/stock/report/stock_balance/stock_balance.py
@@ -58,6 +58,7 @@
 		return columns, []
 
 	iwb_map = get_item_warehouse_map(filters, sle)
+	sre_details = get_sre_reserved_qty_details(iwb_map)
 	item_map = get_item_details(items, sle, filters)
 	item_reorder_detail_map = get_item_reorder_details(item_map.keys())
 
@@ -88,6 +89,7 @@
 				"company": company,
 				"reorder_level": item_reorder_level,
 				"reorder_qty": item_reorder_qty,
+				"stock_reservation_qty": sre_details.get((item, warehouse), 0.0),
 			}
 			report_data.update(item_map[item])
 			report_data.update(qty_dict)
@@ -230,6 +232,13 @@
 				"convertible": "qty",
 			},
 			{
+				"label": _("Stock Reservation Qty"),
+				"fieldname": "stock_reservation_qty",
+				"fieldtype": "Float",
+				"width": 80,
+				"convertible": "qty",
+			},
+			{
 				"label": _("Company"),
 				"fieldname": "company",
 				"fieldtype": "Link",
@@ -388,6 +397,19 @@
 	return iwb_map
 
 
+def get_sre_reserved_qty_details(iwb_map: list) -> dict:
+	from erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry import (
+		get_sre_reserved_qty_details as get_reserved_qty_details,
+	)
+
+	item_code_list, warehouse_list = [], []
+	for d in iwb_map:
+		item_code_list.append(d[1])
+		warehouse_list.append(d[2])
+
+	return get_reserved_qty_details(item_code_list, warehouse_list)
+
+
 def get_group_by_key(row, filters, inventory_dimension_fields) -> tuple:
 	group_by_key = [row.company, row.item_code, row.warehouse]
 
diff --git a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
index 8640710..d3046d2 100644
--- a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
+++ b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
@@ -4,7 +4,6 @@
 
 import frappe
 from frappe import _
-from frappe.query_builder.functions import Sum
 from frappe.utils import flt, today
 from pypika.terms import ExistsCriterion
 
@@ -275,33 +274,16 @@
 
 
 def get_sre_reserved_qty_details(bin_list: list) -> dict:
-	sre_details = {}
+	from erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry import (
+		get_sre_reserved_qty_details as get_reserved_qty_details,
+	)
 
-	if bin_list:
-		item_code_list, warehouse_list = [], []
-		for bin in bin_list:
-			item_code_list.append(bin["item_code"])
-			warehouse_list.append(bin["warehouse"])
+	item_code_list, warehouse_list = [], []
+	for bin in bin_list:
+		item_code_list.append(bin["item_code"])
+		warehouse_list.append(bin["warehouse"])
 
-		sre = frappe.qb.DocType("Stock Reservation Entry")
-		sre_data = (
-			frappe.qb.from_(sre)
-			.select(
-				sre.item_code, sre.warehouse, Sum(sre.reserved_qty - sre.delivered_qty).as_("reserved_qty")
-			)
-			.where(
-				(sre.docstatus == 1)
-				& (sre.item_code.isin(item_code_list))
-				& (sre.warehouse.isin(warehouse_list))
-				& (sre.status.notin(["Delivered", "Cancelled"]))
-			)
-			.groupby(sre.item_code, sre.warehouse)
-		).run(as_dict=True)
-
-		if sre_data:
-			sre_details = {(d["item_code"], d["warehouse"]): d["reserved_qty"] for d in sre_data}
-
-	return sre_details
+	return get_reserved_qty_details(item_code_list, warehouse_list)
 
 
 def get_item_map(item_code, include_uom):
