fix: Make get party account method return a list instead of a single default account.
diff --git a/erpnext/accounts/doctype/party_account/party_account.json b/erpnext/accounts/doctype/party_account/party_account.json
index 6ac6e56..7e345d8 100644
--- a/erpnext/accounts/doctype/party_account/party_account.json
+++ b/erpnext/accounts/doctype/party_account/party_account.json
@@ -36,7 +36,7 @@
  "index_web_pages_for_search": 1,
  "istable": 1,
  "links": [],
- "modified": "2023-06-05 14:15:42.053150",
+ "modified": "2023-06-06 14:15:42.053150",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Party Account",
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 1f0e45f..4cebb7b 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -712,7 +712,6 @@
 				if(r.message) {
 					var total_positive_outstanding = 0;
 					var total_negative_outstanding = 0;
-					console.log(r.message);
 					$.each(r.message, function(i, d) {
 						var c = frm.add_child("references");
 						c.reference_doctype = d.voucher_type;
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 236a78a..5249f17 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -60,6 +60,7 @@
 	def validate(self):
 		self.setup_party_account_field()
 		self.set_missing_values()
+		self.set_liability_account()
 		self.set_missing_ref_details()
 		self.validate_payment_type()
 		self.validate_party_details()
@@ -86,35 +87,34 @@
 	def on_submit(self):
 		if self.difference_amount:
 			frappe.throw(_("Difference Amount must be zero"))
-		book_advance_payments_as_liability = frappe.get_value(
-			"Company", {"company_name": self.company}, "book_advance_payments_as_liability"
-		)
-		if book_advance_payments_as_liability:
-			self.get_liability_account()
 		self.make_gl_entries()
 		self.update_outstanding_amounts()
 		self.update_advance_paid()
 		self.update_payment_schedule()
 		self.set_status()
 
-	def get_liability_account(self):
-		liability_account = get_party_account(self.party_type, self.party, self.company, is_advance=True)
-		if self.party_type == "Customer":
-			msg = "Book Advance Payments as Liability option is chosen. Paid From account changed from {0} to {1}.".format(
-				frappe.bold(self.paid_from),
-				frappe.bold(liability_account),
-			)
-			frappe.db.set_value("Payment Entry", self.name, "paid_from", liability_account)
-			self.paid_from = liability_account
-		else:
-			msg = "Book Advance Payments as Liability option is chosen. Paid To account changed from {0} to {1}.".format(
-				frappe.bold(self.paid_to),
-				frappe.bold(liability_account),
-			)
-			frappe.db.set_value("Payment Entry", self.name, "paid_to", liability_account)
-			self.paid_to = liability_account
-		frappe.msgprint(_(msg), title="Warning", indicator="orange")
-		return liability_account
+	def set_liability_account(self):
+		book_advance_payments_as_liability = frappe.get_value(
+			"Company", {"company_name": self.company}, "book_advance_payments_as_liability"
+		)
+		if not book_advance_payments_as_liability:
+			return
+		root_type = frappe.get_value(
+			"Account", {"name": self.party_account, "company": self.company}, "root_type"
+		)
+		if (root_type == "Liability" and self.party_type == "Customer") or (
+			root_type == "Asset" and self.party_type == "Supplier"
+		):
+			return
+		liability_account = get_party_account(
+			self.party_type, self.party, self.company, include_advance=True
+		)[1]
+		self.set(self.party_account_field, liability_account)
+		msg = "Book Advance Payments as Liability option is chosen. Paid From account changed from {0} to {1}.".format(
+			frappe.bold(self.party_account),
+			frappe.bold(liability_account),
+		)
+		frappe.msgprint(_(msg), alert=True)
 
 	def on_cancel(self):
 		self.ignore_linked_doctypes = (
@@ -354,13 +354,6 @@
 						elif self.party_type == "Employee":
 							ref_party_account = ref_doc.payable_account
 
-						if ref_party_account != self.party_account:
-							frappe.throw(
-								_("{0} {1} is associated with {2}, but Party Account is {3}").format(
-									d.reference_doctype, d.reference_name, ref_party_account, self.party_account
-								)
-							)
-
 						if ref_doc.doctype == "Purchase Invoice" and ref_doc.get("on_hold"):
 							frappe.throw(
 								_("{0} {1} is on hold").format(d.reference_doctype, d.reference_name),
@@ -893,11 +886,9 @@
 		if self.party_account:
 			if self.payment_type == "Receive":
 				against_account = self.paid_to
-				self.party_account = self.paid_from
 				dr_or_cr = "credit"
 			else:
 				against_account = self.paid_from
-				self.party_account = self.paid_to
 				dr_or_cr = "debit"
 
 			party_dict = self.get_gl_dict(
@@ -927,8 +918,8 @@
 					{
 						dr_or_cr: allocated_amount_in_company_currency,
 						dr_or_cr + "_in_account_currency": d.allocated_amount,
-						"against_voucher_type": d.reference_doctype,
-						"against_voucher": d.reference_name,
+						"against_voucher_type": "Payment Entry",
+						"against_voucher": self.name,
 					}
 				)
 
@@ -973,7 +964,7 @@
 		args_dict[dr_or_cr] = 0
 		args_dict[dr_or_cr + "_in_account_currency"] = 0
 		dr_or_cr = "debit" if dr_or_cr == "credit" else "credit"
-		args_dict["account"] = self.get_liability_account()
+		args_dict["account"] = self.party_account
 		args_dict[dr_or_cr] = invoice.allocated_amount
 		args_dict[dr_or_cr + "_in_account_currency"] = invoice.allocated_amount
 		gle = self.get_gl_dict(
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
index d8743bb..a40e6f2 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
@@ -139,27 +139,13 @@
 				args: {
 					company: this.frm.doc.company,
 					party_type: this.frm.doc.party_type,
-					party: this.frm.doc.party
-				},
-				callback: (r) => {
-					if (!r.exc && r.message) {
-						this.frm.set_value("receivable_payable_account", r.message);
-					}
-					this.frm.refresh();
-				}
-			});
-
-			frappe.call({
-				method: "erpnext.accounts.party.get_party_account",
-				args: {
-					company: this.frm.doc.company,
-					party_type: this.frm.doc.party_type,
 					party: this.frm.doc.party,
-					is_advance: 1
+					include_advance: 1
 				},
 				callback: (r) => {
 					if (!r.exc && r.message) {
-						this.frm.set_value("default_advance_account", r.message);
+						this.frm.set_value("receivable_payable_account", r.message[0]);
+						this.frm.set_value("default_advance_account", r.message[1]);
 					}
 					this.frm.refresh();
 				}
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
index 0e166ff..5f6c703 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
@@ -7,8 +7,8 @@
  "field_order": [
   "company",
   "party_type",
-  "party",
   "column_break_4",
+  "party",
   "receivable_payable_account",
   "default_advance_account",
   "col_break1",
@@ -188,20 +188,19 @@
    "options": "Cost Center"
   },
   {
-   "depends_on": "eval:doc.party_type",
+   "depends_on": "eval:doc.party",
    "fieldname": "default_advance_account",
    "fieldtype": "Link",
    "label": "Default Advance Account",
    "mandatory_depends_on": "doc.party_type",
-   "options": "Account",
-   "reqd": 1
+   "options": "Account"
   }
  ],
  "hide_toolbar": 1,
  "icon": "icon-resize-horizontal",
  "issingle": 1,
  "links": [],
- "modified": "2023-06-05 20:09:58.925427",
+ "modified": "2023-06-09 13:02:48.718362",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Payment Reconciliation",
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index ebb4970..9ade46e 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -1677,7 +1677,7 @@
 			party_type="Supplier",
 			party="_Test Supplier",
 			paid_from="Cash - _TC",
-			paid_to=get_party_account("Supplier", "_Test Supplier", "_Test Company", is_advance=True),
+			paid_to="Creditors - _TC",
 			paid_amount=1000,
 		)
 		pe.submit()
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index d10fa05..364bf68 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -3327,7 +3327,7 @@
 			payment_type="Receive",
 			party_type="Customer",
 			party="_Test Customer",
-			paid_from=get_party_account("Customer", "_Test Customer", "_Test Company", is_advance=True),
+			paid_from="Debtors - _TC",
 			paid_to="Cash - _TC",
 			paid_amount=1000,
 		)
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 782c41e..ccd54b3 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -365,7 +365,7 @@
 
 
 @frappe.whitelist()
-def get_party_account(party_type, party=None, company=None, is_advance=False):
+def get_party_account(party_type, party=None, company=None, include_advance=False):
 	"""Returns the account for the given `party`.
 	Will first search in party (Customer / Supplier) record, if not found,
 	will search in group (Customer Group / Supplier Group),
@@ -380,9 +380,6 @@
 
 		return frappe.get_cached_value("Company", company, default_account_name)
 
-	if is_advance and party_type in ["Customer", "Supplier"]:
-		return get_party_advance_account(party_type, party, company)
-
 	account = frappe.db.get_value(
 		"Party Account", {"parenttype": party_type, "parent": party, "company": company}, "account"
 	)
@@ -409,6 +406,9 @@
 		if (account and account_currency != existing_gle_currency) or not account:
 			account = get_party_gle_account(party_type, party, company)
 
+	if include_advance and party_type in ["Customer", "Supplier"]:
+		advance_account = get_party_advance_account(party_type, party, company)
+		return [account, advance_account]
 	return account
 
 
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index 6da47c5..50f9bb6 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -8,7 +8,7 @@
 			frm.set_value("represents_company", "");
 		}
 		frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
-			var d = locals[cdt][cdn];
+			let d = locals[cdt][cdn];
 			return {
 				filters: {
 					'account_type': 'Payable',
@@ -19,7 +19,7 @@
 		});
 
 		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
-			var d = locals[cdt][cdn];
+			let d = locals[cdt][cdn];
 			return {
 				filters: {
 					"root_type": 'Asset',
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 0589f4a..d8c4135 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -885,18 +885,15 @@
 			amount_field = "credit_in_account_currency"
 			order_field = "sales_order"
 			order_doctype = "Sales Order"
-			party_account = [
-				get_party_account(party_type, party=party, company=self.company, is_advance=True)
-			]
 		else:
 			party_type = "Supplier"
 			party = self.supplier
 			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, is_advance=True)
-			]
+		party_account = [
+			get_party_account(party_type, party=party, company=self.company, include_advance=True)[1]
+		]
 
 		order_list = list(set(d.get(order_field) for d in self.get("items") if d.get(order_field)))
 
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index 35cf8c5..8f82880 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -20,8 +20,8 @@
 		frm.set_query('customer_group', {'is_group': 0});
 		frm.set_query('default_price_list', { 'selling': 1});
 		frm.set_query('account', 'accounts', function(doc, cdt, cdn) {
-			var d  = locals[cdt][cdn];
-			var filters = {
+			let d  = locals[cdt][cdn];
+			let filters = {
 				'account_type': 'Receivable',
 				'company': d.company,
 				"is_group": 0
@@ -36,7 +36,7 @@
 		});
 
 		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
-			var d = locals[cdt][cdn];
+			let d = locals[cdt][cdn];
 			return {
 				filters: {
 					"root_type": 'Liability',
diff --git a/erpnext/setup/doctype/customer_group/customer_group.js b/erpnext/setup/doctype/customer_group/customer_group.js
index 3a71b43..ed98933 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.js
+++ b/erpnext/setup/doctype/customer_group/customer_group.js
@@ -16,34 +16,35 @@
 	}
 }
 
-//get query select Customer Group
-cur_frm.fields_dict['parent_customer_group'].get_query = function(doc,cdt,cdn) {
-	return {
-		filters: {
-			'is_group': 1,
-			'name': ['!=', cur_frm.doc.customer_group_name]
-		}
-	}
-}
+frappe.ui.form.on("Customer Group", {
+	setup: function(frm){
+		frm.set_query('parent_customer_group', function (doc) {
+			return {
+				filters: {
+					'is_group': 1,
+					'name': ['!=', cur_frm.doc.customer_group_name]
+				}
+			}
+		});
 
-cur_frm.fields_dict['accounts'].grid.get_field('account').get_query = function(doc, cdt, cdn) {
-	var d  = locals[cdt][cdn];
-	return {
-		filters: {
-			"account_type": 'Receivable',
-			"company": d.company,
-			"is_group": 0
-		}
-	}
-}
+		frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
+			return {
+				filters: {
+					"account_type": 'Receivable',
+					"company": locals[cdt][cdn].company,
+					"is_group": 0
+				}
+			}
+		});
 
-cur_frm.fields_dict['accounts'].grid.get_field('advance_account').get_query = function(doc, cdt, cdn) {
-	var d  = locals[cdt][cdn];
-	return {
-		filters: {
-			"root_type": 'Liability',
-			"company": d.company,
-			"is_group": 0
-		}
+		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
+			return {
+				filters: {
+					"root_type": 'Liability',
+					"company": locals[cdt][cdn].company,
+					"is_group": 0
+				}
+			}
+		});
 	}
-}
\ No newline at end of file
+});
diff --git a/erpnext/setup/doctype/supplier_group/supplier_group.js b/erpnext/setup/doctype/supplier_group/supplier_group.js
index 58ab7fa..ac5904f 100644
--- a/erpnext/setup/doctype/supplier_group/supplier_group.js
+++ b/erpnext/setup/doctype/supplier_group/supplier_group.js
@@ -16,34 +16,35 @@
 	}
 };
 
-// get query select Customer Group
-cur_frm.fields_dict['parent_supplier_group'].get_query = function() {
-	return {
-		filters: {
-			'is_group': 1,
-			'name': ['!=', cur_frm.doc.supplier_group_name]
-		}
-	};
-};
+frappe.ui.form.on("Supplier Group", {
+	setup: function(frm){
+		frm.set_query('parent_supplier_group', function (doc) {
+			return {
+				filters: {
+					'is_group': 1,
+					'name': ['!=', cur_frm.doc.supplier_group_name]
+				}
+			}
+		});
 
-cur_frm.fields_dict['accounts'].grid.get_field('account').get_query = function(doc, cdt, cdn) {
-	var d  = locals[cdt][cdn];
-	return {
-		filters: {
-			'account_type': 'Payable',
-			'company': d.company,
-			"is_group": 0
-		}
-	};
-};
+		frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
+			return {
+				filters: {
+					'account_type': 'Payable',
+					'company': locals[cdt][cdn].company,
+					"is_group": 0
+				}
+			}
+		});
 
-cur_frm.fields_dict['accounts'].grid.get_field('advance_account').get_query = function(doc, cdt, cdn) {
-	var d  = locals[cdt][cdn];
-	return {
-		filters: {
-			"root_type": 'Asset',
-			"company": d.company,
-			"is_group": 0
-		}
+		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
+			return {
+				filters: {
+					"root_type": 'Asset',
+					"company": locals[cdt][cdn].company,
+					"is_group": 0
+				}
+			}
+		});
 	}
-};
\ No newline at end of file
+});