diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py
index cf5acbd..2f5bac9 100644
--- a/erpnext/stock/stock_balance.py
+++ b/erpnext/stock/stock_balance.py
@@ -3,7 +3,11 @@
 
 
 import frappe
+from frappe.query_builder import DocType
+from frappe.query_builder.functions import Sum
+from frappe.query_builder.utils import Table
 from frappe.utils import cstr, flt, now, nowdate, nowtime
+from pypika.queries import QueryBuilder
 
 from erpnext.controllers.stock_controller import create_repost_item_valuation_entry
 
@@ -94,57 +98,84 @@
 
 
 def get_reserved_qty(item_code, warehouse):
-	reserved_qty = frappe.db.sql(
-		"""
-		select
-			sum(dnpi_qty * ((so_item_qty - so_item_delivered_qty - so_item_returned_qty) / so_item_qty))
-		from
-			(
-				(select
-					qty as dnpi_qty,
+	SalesOrder = DocType("Sales Order")
+	SalesOrderItem = DocType("Sales Order Item")
+	PackedItem = DocType("Packed Item")
+
+	def append_open_so_query(q: QueryBuilder, child_table: Table) -> QueryBuilder:
+		return (
+			q.inner_join(SalesOrder)
+			.on(SalesOrder.name == child_table.parent)
+			.where(SalesOrder.docstatus == 1)
+			.where(SalesOrder.status != "Closed")
+		)
+
+	tab = (
+		frappe.qb.from_(SalesOrderItem)
+		.select(
+			SalesOrderItem.stock_qty.as_("dnpi_qty"),
+			SalesOrderItem.qty.as_("so_item_qty"),
+			SalesOrderItem.delivered_qty.as_("so_item_delivered_qty"),
+			SalesOrderItem.returned_qty.as_("so_item_returned_qty"),
+			SalesOrderItem.parent,
+			SalesOrderItem.name,
+		)
+		.where(SalesOrderItem.item_code == item_code)
+		.where(SalesOrderItem.warehouse == warehouse)
+	)
+	tab = append_open_so_query(tab, SalesOrderItem)
+
+	dnpi = (
+		frappe.qb.from_(PackedItem)
+		.select(PackedItem.qty, PackedItem.parent_detail_docname, PackedItem.parent, PackedItem.name)
+		.where(PackedItem.item_code == item_code)
+		.where(PackedItem.warehouse == warehouse)
+	)
+	dnpi = append_open_so_query(dnpi, PackedItem)
+
+	qty_queries = {}
+	for key, so_item_field in [
+		("so_item_qty", "qty"),
+		("so_item_delivered_qty", "delivered_qty"),
+		("so_item_returned_qty", "returned_qty"),
+	]:
+		qty_queries.update(
+			{
+				key: (
+					frappe.qb.from_(SalesOrderItem)
+					.select(SalesOrderItem[so_item_field])
+					.where(SalesOrderItem.name == dnpi.parent_detail_docname)
+					.where(SalesOrderItem.delivered_by_supplier == 0)
+				)
+			}
+		)
+
+	dnpi_parent = frappe.qb.from_(dnpi).select(dnpi.qty.as_("dnpi_qty"))
+	for key, query in qty_queries.items():
+		dnpi_parent = dnpi_parent.select(query.as_(key))
+	dnpi_parent = dnpi_parent.select(dnpi.parent, dnpi.name)
+
+	dnpi_parent = dnpi_parent + tab
+
+	q = (
+		frappe.qb.from_(dnpi_parent)
+		.select(
+			Sum(
+				dnpi_parent.dnpi_qty
+				* (
 					(
-						select qty from `tabSales Order Item`
-						where name = dnpi.parent_detail_docname
-						and (delivered_by_supplier is null or delivered_by_supplier = 0)
-					) as so_item_qty,
-					(
-						select delivered_qty from `tabSales Order Item`
-						where name = dnpi.parent_detail_docname
-						and delivered_by_supplier = 0
-					) as so_item_delivered_qty,
-					(
-						select returned_qty from `tabSales Order Item`
-						where name = dnpi.parent_detail_docname
-						and delivered_by_supplier = 0
-					) as so_item_returned_qty,
-					parent, name
-				from
-				(
-					select qty, parent_detail_docname, parent, name
-					from `tabPacked Item` dnpi_in
-					where item_code = %s and warehouse = %s
-					and parenttype="Sales Order"
-					and item_code != parent_item
-					and exists (select * from `tabSales Order` so
-					where name = dnpi_in.parent and docstatus = 1 and status != 'Closed')
-				) dnpi)
-			union
-				(select stock_qty as dnpi_qty, qty as so_item_qty,
-					delivered_qty as so_item_delivered_qty,
-					returned_qty as so_item_returned_qty, parent, name
-				from `tabSales Order Item` so_item
-				where item_code = %s and warehouse = %s
-				and (so_item.delivered_by_supplier is null or so_item.delivered_by_supplier = 0)
-				and exists(select * from `tabSales Order` so
-					where so.name = so_item.parent and so.docstatus = 1
-					and so.status != 'Closed'))
-			) tab
-		where
-			so_item_qty >= so_item_delivered_qty
-	""",
-		(item_code, warehouse, item_code, warehouse),
+						dnpi_parent.so_item_qty
+						- dnpi_parent.so_item_delivered_qty
+						- dnpi_parent.so_item_returned_qty
+					)
+					/ dnpi_parent.so_item_qty
+				)
+			)
+		)
+		.where(dnpi_parent.so_item_qty >= dnpi_parent.so_item_delivered_qty)
 	)
 
+	reserved_qty = q.run()
 	return flt(reserved_qty[0][0]) if reserved_qty else 0
 
 
