chore: Advance fetching order
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index d6aa7d8..03cf82a 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -410,7 +410,11 @@
 
 	if include_advance and party_type in ["Customer", "Supplier"]:
 		advance_account = get_party_advance_account(party_type, party, company)
-		return [account, advance_account]
+		if advance_account:
+			return [account, advance_account]
+		else:
+			return [account]
+
 	return account
 
 
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 80f8430..eec58e8 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -892,9 +892,10 @@
 			amount_field = "debit_in_account_currency"
 			order_field = "purchase_order"
 			order_doctype = "Purchase Order"
-		party_account = [
-			get_party_account(party_type, party=party, company=self.company, include_advance=True)[1]
-		]
+
+		party_account = get_party_account(
+			party_type, party=party, company=self.company, include_advance=True
+		)
 
 		order_list = list(set(d.get(order_field) for d in self.get("items") if d.get(order_field)))
 
@@ -2203,37 +2204,59 @@
 	condition=None,
 ):
 
-	q = build_query(
-		party_type,
-		party,
-		party_account,
-		order_doctype,
-		order_list,
-		include_unallocated,
-		against_all_orders,
-		limit,
-		condition,
-	)
+	payment_entries = []
+	payment_entry = frappe.qb.DocType("Payment Entry")
 
-	payment_entries = q.run(as_dict=True)
+	if order_list or against_all_orders:
+		q = get_common_query(
+			party_type,
+			party,
+			party_account,
+			limit,
+			condition,
+		)
+		payment_ref = frappe.qb.DocType("Payment Entry Reference")
 
-	return list(payment_entries)
+		q = q.inner_join(payment_ref).on(payment_entry.name == payment_ref.parent)
+		q = q.select(
+			(payment_ref.allocated_amount).as_("amount"),
+			(payment_ref.name).as_("reference_row"),
+			(payment_ref.reference_name).as_("against_order"),
+			payment_ref.reference_doctype == order_doctype,
+		)
+
+		if order_list:
+			q = q.where(payment_ref.reference_name.isin(order_list))
+
+		allocated = list(q.run(as_dict=True))
+		payment_entries += allocated
+
+	if include_unallocated:
+		q = get_common_query(
+			party_type,
+			party,
+			party_account,
+			limit,
+			condition,
+		)
+		q = q.select((payment_entry.unallocated_amount).as_("amount"))
+		q = q.where(payment_entry.unallocated_amount > 0)
+
+		unallocated = list(q.run(as_dict=True))
+		payment_entries += unallocated
+
+	return payment_entries
 
 
-def build_query(
+def get_common_query(
 	party_type,
 	party,
 	party_account,
-	order_doctype,
-	order_list,
-	include_unallocated,
-	against_all_orders,
 	limit,
 	condition,
 ):
 	payment_type = "Receive" if party_type == "Customer" else "Pay"
 	payment_entry = frappe.qb.DocType("Payment Entry")
-	payment_ref = frappe.qb.DocType("Payment Entry Reference")
 
 	q = (
 		frappe.qb.from_(payment_entry)
@@ -2259,68 +2282,53 @@
 		q = q.where(payment_entry.paid_to.isin(party_account))
 
 	if payment_type == "Receive":
-		q = q.select(payment_entry.source_exchange_rate)
+		q = q.select((payment_entry.source_exchange_rate).as_("exchange_rate"))
 	else:
-		q.select(payment_entry.target_exchange_rate)
+		q = q.select((payment_entry.target_exchange_rate).as_("exchange_rate"))
 
-	if include_unallocated:
-		q = q.select((payment_entry.unallocated_amount).as_("amount"))
-		q = q.where(payment_entry.unallocated_amount > 0)
-
-		if condition:
-			q = q.where(payment_entry.company == condition["company"])
-			q = (
-				q.where(payment_entry.posting_date >= condition["from_payment_date"])
-				if condition.get("from_payment_date")
-				else q
-			)
-			q = (
-				q.where(payment_entry.posting_date <= condition["to_payment_date"])
-				if condition.get("to_payment_date")
-				else q
-			)
-			if condition.get("get_payments") == True:
-				q = (
-					q.where(payment_entry.cost_center == condition["cost_center"])
-					if condition.get("cost_center")
-					else q
-				)
-				q = (
-					q.where(payment_entry.unallocated_amount >= condition["minimum_payment_amount"])
-					if condition.get("minimum_payment_amount")
-					else q
-				)
-				q = (
-					q.where(payment_entry.unallocated_amount <= condition["maximum_payment_amount"])
-					if condition.get("maximum_payment_amount")
-					else q
-				)
-			else:
-				q = (
-					q.where(payment_entry.total_debit >= condition["minimum_payment_amount"])
-					if condition.get("minimum_payment_amount")
-					else q
-				)
-				q = (
-					q.where(payment_entry.total_debit <= condition["maximum_payment_amount"])
-					if condition.get("maximum_payment_amount")
-					else q
-				)
-
-	elif order_list or against_all_orders:
-		q = q.inner_join(payment_ref).on(payment_entry.name == payment_ref.parent)
-		q = q.select(
-			(payment_ref.allocated_amount).as_("amount"),
-			(payment_ref.name).as_("reference_row"),
-			(payment_ref.reference_name).as_("against_order"),
-			payment_ref.reference_doctype == order_doctype,
+	if condition:
+		q = q.where(payment_entry.company == condition["company"])
+		q = (
+			q.where(payment_entry.posting_date >= condition["from_payment_date"])
+			if condition.get("from_payment_date")
+			else q
 		)
-
-		if order_list:
-			q = q.where(payment_ref.reference_name.isin(order_list))
+		q = (
+			q.where(payment_entry.posting_date <= condition["to_payment_date"])
+			if condition.get("to_payment_date")
+			else q
+		)
+		if condition.get("get_payments") == True:
+			q = (
+				q.where(payment_entry.cost_center == condition["cost_center"])
+				if condition.get("cost_center")
+				else q
+			)
+			q = (
+				q.where(payment_entry.unallocated_amount >= condition["minimum_payment_amount"])
+				if condition.get("minimum_payment_amount")
+				else q
+			)
+			q = (
+				q.where(payment_entry.unallocated_amount <= condition["maximum_payment_amount"])
+				if condition.get("maximum_payment_amount")
+				else q
+			)
+		else:
+			q = (
+				q.where(payment_entry.total_debit >= condition["minimum_payment_amount"])
+				if condition.get("minimum_payment_amount")
+				else q
+			)
+			q = (
+				q.where(payment_entry.total_debit <= condition["maximum_payment_amount"])
+				if condition.get("maximum_payment_amount")
+				else q
+			)
 
 	q = q.orderby(payment_entry.posting_date)
 	q = q.limit(limit) if limit else q
+
 	return q