[fix] Trial Balance report, showing rows with zero values
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 0f10b94..3e70a0e 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -170,17 +170,19 @@
 		
 	return data
 	
-def filter_out_zero_value_rows(data, parent_children_map):
+def filter_out_zero_value_rows(data, parent_children_map, show_zero_values=False):
 	data_with_value = []
 	for d in data:
-		if d.get("has_value"):
+		if show_zero_values or d.get("has_value"):
 			data_with_value.append(d)
 		else:
-			children = [child.name for child in parent_children_map.get(d.account) or []]
-			for row in data:
-				if row.account in children and row.get("has_value"):
-					data_with_value.append(d)
-					break
+			# show group with zero balance, if there are balances against child
+			children = [child.name for child in parent_children_map.get(d.get("account")) or []]
+			if children:
+				for row in data:
+					if row.get("account") in children and row.get("has_value"):
+						data_with_value.append(d)
+						break
 
 	return data_with_value
 
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py
index 822702b..e53d47e 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.py
+++ b/erpnext/accounts/report/trial_balance/trial_balance.py
@@ -4,8 +4,9 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _
-from frappe.utils import cint, flt, getdate, formatdate, cstr
-from erpnext.accounts.report.financial_statements import filter_accounts, set_gl_entries_by_account
+from frappe.utils import flt, getdate, formatdate, cstr
+from erpnext.accounts.report.financial_statements \
+	import filter_accounts, set_gl_entries_by_account, filter_out_zero_value_rows
 
 value_fields = ("opening_debit", "opening_credit", "debit", "credit", "closing_debit", "closing_credit")
 
@@ -56,7 +57,7 @@
 	if not accounts:
 		return None
 
-	accounts, accounts_by_name = filter_accounts(accounts)
+	accounts, accounts_by_name, parent_children_map = filter_accounts(accounts)
 
 	min_lft, max_rgt = frappe.db.sql("""select min(lft), max(rgt) from `tabAccount`
 		where company=%s""", (filters.company,))[0]
@@ -71,8 +72,10 @@
 	total_row = calculate_values(accounts, gl_entries_by_account, opening_balances, filters)
 	accumulate_values_into_parents(accounts, accounts_by_name)
 
-	data = prepare_data(accounts, filters, total_row)
-
+	data = prepare_data(accounts, filters, total_row, parent_children_map)
+	data = filter_out_zero_value_rows(data, parent_children_map, 
+		show_zero_values=filters.get("show_zero_values"))
+		
 	return data
 
 def get_opening_balances(filters):
@@ -156,10 +159,8 @@
 			for key in value_fields:
 				accounts_by_name[d.parent_account][key] += d[key]
 
-def prepare_data(accounts, filters, total_row):
-	show_zero_values = cint(filters.show_zero_values)
+def prepare_data(accounts, filters, total_row, parent_children_map):
 	data = []
-	accounts_with_zero_value = []
 	for d in accounts:
 		has_value = False
 		row = {
@@ -174,18 +175,15 @@
 		prepare_opening_and_closing(d)
 
 		for key in value_fields:
-			row[key] = d.get(key, 0.0)
-			if row[key]:
+			row[key] = flt(d.get(key, 0.0), 3)
+			
+			if abs(row[key]) >= 0.005:
+				# ignore zero values
 				has_value = True
 
-		if show_zero_values:
-			data.append(row)
-		else:
-			if not has_value:
-				accounts_with_zero_value.append(d.name)
-			elif d.parent_account not in accounts_with_zero_value:
-				data.append(row)
-
+		row["has_value"] = has_value
+		data.append(row)
+		
 	data.extend([{},total_row])
 
 	return data