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
 
 
