From 18c1f0f04d07934e031d8d8b8925feeea3cab7d7 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Wed, 17 Jun 2026 17:35:58 +0530 Subject: [PATCH] refactor(postgres): port Trial Balance report query to the query builder Co-Authored-By: Claude Opus 4.8 (1M context) --- .../report/trial_balance/trial_balance.py | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py index 186a9eb71f0..4aff8b3305c 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.py +++ b/erpnext/accounts/report/trial_balance/trial_balance.py @@ -4,7 +4,7 @@ import frappe from frappe import _ -from frappe.query_builder.functions import Sum +from frappe.query_builder.functions import Max, Sum from frappe.utils import add_days, cstr, flt, formatdate, getdate import erpnext @@ -82,12 +82,21 @@ def validate_filters(filters): def get_data(filters): - accounts = frappe.db.sql( - """select name, account_number, parent_account, account_name, root_type, report_type, is_group, lft, rgt - - from `tabAccount` where company=%s order by lft""", - filters.company, - as_dict=True, + accounts = frappe.get_all( + "Account", + filters={"company": filters.company}, + fields=[ + "name", + "account_number", + "parent_account", + "account_name", + "root_type", + "report_type", + "is_group", + "lft", + "rgt", + ], + order_by="lft", ) company_currency = filters.presentation_currency or erpnext.get_company_currency(filters.company) @@ -240,7 +249,8 @@ def get_opening_balance( frappe.qb.from_(closing_balance) .select( closing_balance.account, - closing_balance.account_currency, + # account_currency is constant per grouped account -> Max() keeps the GROUP BY postgres-valid + Max(closing_balance.account_currency).as_("account_currency"), Sum(closing_balance.debit).as_("debit"), Sum(closing_balance.credit).as_("credit"), Sum(closing_balance.debit_in_account_currency).as_("debit_in_account_currency"),