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 f770059..f55e640 100644
--- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
+++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
@@ -179,18 +179,13 @@
 
 
 def get_sre_reserved_qty_details_for_item_and_warehouse(
-	item_code: str | list, warehouse: str | list
+	item_code_list: list, warehouse_list: list
 ) -> dict:
 	"""Returns a dict like {("item_code", "warehouse"): "reserved_qty", ... }."""
 
 	sre_details = {}
 
-	if item_code and warehouse:
-		if isinstance(item_code, str):
-			item_code = [item_code]
-		if isinstance(warehouse, str):
-			warehouse = [warehouse]
-
+	if item_code_list and warehouse_list:
 		sre = frappe.qb.DocType("Stock Reservation Entry")
 		sre_data = (
 			frappe.qb.from_(sre)
@@ -201,8 +196,8 @@
 			)
 			.where(
 				(sre.docstatus == 1)
-				& (sre.item_code.isin(item_code))
-				& (sre.warehouse.isin(warehouse))
+				& (sre.item_code.isin(item_code_list))
+				& (sre.warehouse.isin(warehouse_list))
 				& (sre.status.notin(["Delivered", "Cancelled"]))
 			)
 			.groupby(sre.item_code, sre.warehouse)
@@ -214,6 +209,27 @@
 	return sre_details
 
 
+def get_sre_reserved_qty_for_item_and_warehouse(item_code: str, warehouse: str) -> float:
+	"""Returns `Reserved Qty` for Item and Warehouse combination."""
+
+	reserved_qty = 0.0
+
+	if item_code and warehouse:
+		sre = frappe.qb.DocType("Stock Reservation Entry")
+		return (
+			frappe.qb.from_(sre)
+			.select(Sum(sre.reserved_qty - sre.delivered_qty))
+			.where(
+				(sre.docstatus == 1)
+				& (sre.item_code == item_code)
+				& (sre.warehouse == warehouse)
+				& (sre.status.notin(["Delivered", "Cancelled"]))
+			)
+		).run(as_list=True)[0][0] or 0.0
+
+	return reserved_qty
+
+
 def get_sre_reserved_qty_details_for_voucher(
 	voucher_type: str, voucher_no: str, voucher_detail_no: str = None
 ) -> dict:
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index c954bef..33e7a03 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -13,6 +13,9 @@
 
 import erpnext
 from erpnext.stock.doctype.bin.bin import update_qty as update_bin_qty
+from erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry import (
+	get_sre_reserved_qty_for_item_and_warehouse as get_reserved_stock,
+)
 from erpnext.stock.utils import (
 	get_incoming_outgoing_rate_for_cancel,
 	get_or_make_bin,
@@ -380,6 +383,7 @@
 		self.new_items_found = False
 		self.distinct_item_warehouses = args.get("distinct_item_warehouses", frappe._dict())
 		self.affected_transactions: Set[Tuple[str, str]] = set()
+		self.reserved_stock = get_reserved_stock(self.args.item_code, self.args.warehouse)
 
 		self.data = frappe._dict()
 		self.initialize_previous_data(self.args)
@@ -610,7 +614,7 @@
 		validate negative stock for entries current datetime onwards
 		will not consider cancelled entries
 		"""
-		diff = self.wh_data.qty_after_transaction + flt(sle.actual_qty)
+		diff = self.wh_data.qty_after_transaction + flt(sle.actual_qty) - flt(self.reserved_stock)
 		diff = flt(diff, self.flt_precision)  # respect system precision
 
 		if diff < 0 and abs(diff) > 0.0001:
@@ -1006,6 +1010,7 @@
 		msg_list = []
 		for warehouse, exceptions in self.exceptions.items():
 			deficiency = min(e["diff"] for e in exceptions)
+			msg_prefix = _("As {} units are reserved, ").format(frappe.bold(self.reserved_stock))
 
 			if (
 				exceptions[0]["voucher_type"],
@@ -1013,7 +1018,7 @@
 			) in frappe.local.flags.currently_saving:
 
 				msg = _("{0} units of {1} needed in {2} to complete this transaction.").format(
-					abs(deficiency),
+					frappe.bold(abs(deficiency)),
 					frappe.get_desk_link("Item", exceptions[0]["item_code"]),
 					frappe.get_desk_link("Warehouse", warehouse),
 				)
@@ -1021,7 +1026,7 @@
 				msg = _(
 					"{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction."
 				).format(
-					abs(deficiency),
+					frappe.bold(abs(deficiency)),
 					frappe.get_desk_link("Item", exceptions[0]["item_code"]),
 					frappe.get_desk_link("Warehouse", warehouse),
 					exceptions[0]["posting_date"],
@@ -1030,6 +1035,9 @@
 				)
 
 			if msg:
+				if self.reserved_stock:
+					msg = msg_prefix + msg
+
 				msg_list.append(msg)
 
 		if msg_list:
