Trial balance opening issue fixed if there is no prev year
diff --git a/erpnext/accounts/search_criteria/trial_balance/trial_balance.py b/erpnext/accounts/search_criteria/trial_balance/trial_balance.py
index fb168e5..994a5b8 100644
--- a/erpnext/accounts/search_criteria/trial_balance/trial_balance.py
+++ b/erpnext/accounts/search_criteria/trial_balance/trial_balance.py
@@ -1,13 +1,13 @@
 # Columns
 #----------
-cl = [['Account','Data', '200px'],['Debit/Credit', 'Data', '100px'], ['Group/Ledger', 'Data', '100px'], ['Is PL Account', 'Data', '100px'], ['Opening','Data', '100px'],['Debit', 'Data', '100px'],['Credit', 'Data', '100px'],['Closing', 'Data', '100px']]
+cl = [['Account','Data', '200px'],['Debit/Credit', 'Data', '100px'], ['Group/Ledger', 'Data', '100px'], ['Is PL Account', 'Data', '100px'], ['Opening (Dr)','Data', '100px'], ['Opening (Cr)','Data', '100px'],['Debit', 'Data', '100px'],['Credit', 'Data', '100px'],['Closing (Dr)', 'Data', '100px'],['Closing (Cr)', 'Data', '100px']]
 for c in cl:
 	colnames.append(c[0])
 	coltypes.append(c[1])
 	colwidths.append(c[2])
 	coloptions.append('')
 	col_idx[c[0]] = len(colnames)-1
-	
+
 # transaction date
 # ------------------
 if not filter_values.get('transaction_date') or not filter_values.get('transaction_date1'):
@@ -23,7 +23,7 @@
 	msgprint("From Date and To Date must be within same year")
 	raise Exception
 
-# get year of the from date and to date 
+# get year of the from date and to date
 # --------------------------------------
 from_date_year = sql("select name from `tabFiscal Year` where %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)",add_days(from_date, -1))
 from_date_year = from_date_year and from_date_year[0][0] or ''
@@ -33,11 +33,17 @@
 
 # if output is more than 500 lines then it will ask to export
 # ------------------------------------------------------------
-if len(res) > 500	and from_export == 0:
+if len(res) > 1000	and from_export == 0:
 	msgprint("This is a very large report and cannot be shown in the browser as it is likely to make your browser very slow.Please click on 'Export' to open in a spreadsheet")
 	raise Exception
+	
 
-total_debit, total_credit = 0,0
+acc_dict = {}
+for t in sql("select name, debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where docstatus != 2 and company = %s", filter_values['company']):
+	acc_dict[t[0]] = [t[1], t[2], t[3], t[4], t[5]]
+
+
+total_debit, total_credit,	total_opening_dr, total_opening_cr, total_closing_dr, total_closing_cr = 0, 0, 0, 0, 0, 0
 glc = get_obj('GL Control')
 
 # Main logic
@@ -45,47 +51,55 @@
 for r in res:
 	# Fetch account details
 	acc = r[col_idx['Account']].strip()
-	acc_det = sql("select debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where name = '%s'" % acc)
-	r.append(acc_det[0][0])
-	r.append(acc_det[0][4])
-	r.append(acc_det[0][1])
+	r.append(acc_dict[acc][0])
+	r.append(acc_dict[acc][4])
+	r.append(acc_dict[acc][1])
 	
 	#if shows group and ledger both but without group balance
-	if filter_values.get('show_group_ledger') == 'Both But Without Group Balance' and acc_det[0][4] == 'Group':
+	if filter_values.get('show_group_ledger') == 'Both But Without Group Balance' and acc_dict[acc][4] == 'Group':
 		for i in range(4):
 			r.append('')
 		continue
 
-	# opening balance
-	if from_date_year:
-		debit_on_fromdate, credit_on_fromdate, opening = glc.get_as_on_balance(acc, from_date_year, add_days(from_date, -1), acc_det[0][0], acc_det[0][2], acc_det[0][3])
-	else: # if there is no previous year in system
-		debit_on_fromdate, credit_on_fromdate, opening = 0, 0, 0
+	# Opening Balance
+	#-----------------------------
+	if from_date_year == to_date_year:
+		debit_on_fromdate, credit_on_fromdate, opening = glc.get_as_on_balance(acc, from_date_year, add_days(from_date, -1), acc_dict[acc][0], acc_dict[acc][2], acc_dict[acc][3]) # opening = closing of prev_date
+	elif acc_dict[acc][1] == 'No': # if there is no previous year in system and not pl account
+		opening = sql("select opening from `tabAccount Balance` where account = %s and period = %s", (acc, to_date_year))
+		debit_on_fromdate, credit_on_fromdate, opening = 0, 0, flt(opening[0][0])
+	else: # if pl account and there is no previous year in system
+		debit_on_fromdate, credit_on_fromdate, opening = 0,0,0
 
 	# closing balance
-	debit_on_todate, credit_on_todate, closing = glc.get_as_on_balance(acc, to_date_year, to_date, acc_det[0][0], acc_det[0][2], acc_det[0][3])
+	#--------------------------------
+	debit_on_todate, credit_on_todate, closing = glc.get_as_on_balance(acc, to_date_year, to_date, acc_dict[acc][0], acc_dict[acc][2], acc_dict[acc][3])
 
 	# transaction betn the period
-	if from_date_year == to_date_year:
-		debit = flt(debit_on_todate) - flt(debit_on_fromdate)
-		credit = flt(credit_on_todate) - flt(credit_on_fromdate)
-	else: # if from date is start date of the year
-		debit = flt(debit_on_todate)
-		credit = flt(credit_on_todate)
-		
+	#----------------------------------------
+
+	debit = flt(debit_on_todate) - flt(debit_on_fromdate)
+	credit = flt(credit_on_todate) - flt(credit_on_fromdate)
+	
+	# Debit / Credit
+	if acc_dict[acc][0] == 'Credit':
+		opening, closing = -1*opening, -1*closing
+
+	# Totals
+	total_opening_dr += opening>0 and flt(opening) or 0
+	total_opening_cr += opening<0 and -1*flt(opening) or 0
 	total_debit += debit
 	total_credit += credit
-
-	if acc_det[0][1] == 'Yes' and from_date_year != to_date_year:
-		opening = 0
-
-	if acc_det[0][0] == 'Credit':
-		opening, closing = -1*opening, -1*closing
+	total_closing_dr += closing>0 and flt(closing) or 0
+	total_closing_cr += closing<0 and -1*flt(closing) or 0
 	
-	r.append(flt(opening))
+	# Append in rows
+	r.append(flt(opening>0 and opening or 0))
+	r.append(flt(opening<0 and -opening or 0))
 	r.append(flt(debit))
 	r.append(flt(credit))
-	r.append(flt(closing))
+	r.append(flt(closing>0 and closing or 0))
+	r.append(flt(closing<0 and -closing or 0))
 
 
 out =[]
@@ -94,14 +108,18 @@
 	# ------------------------------------------------------------------
 	if filter_values.get('show_zero_balance') != 'No':
 		out.append(r)
-	elif r[col_idx['Opening']] or r[col_idx['Debit']] or r[col_idx['Credit']] or r[col_idx['Closing']] or (r[col_idx['Group/Ledger']] == 'Group' and filter_values.get('show_group_ledger') == 'Both But Without Group Balance'):
+	elif r[col_idx['Opening (Dr)']] or r[col_idx['Opening (Cr)']] or r[col_idx['Debit']] or r[col_idx['Credit']] or r[col_idx['Closing (Dr)']] or r[col_idx['Closing (Cr)']] or (r[col_idx['Group/Ledger']] == 'Group' and filter_values.get('show_group_ledger') == 'Both But Without Group Balance'):
 		out.append(r)
-		
+
 # Total Debit / Credit
 # --------------------------
 if filter_values.get('show_group_ledger') in ['Only Ledgers', 'Both But Without Group Balance']:
 	t_row = ['' for i in range(len(colnames))]
 	t_row[col_idx['Account']] = 'Total'
-	t_row[col_idx['Debit']] = total_debit
-	t_row[col_idx['Credit']] = total_credit
+	t_row[col_idx['Opening (Dr)']] = '%.2f' % total_opening_dr
+	t_row[col_idx['Opening (Cr)']] = '%.2f' % total_opening_cr
+	t_row[col_idx['Debit']] = '%.2f' % total_debit
+	t_row[col_idx['Credit']] = '%.2f' % total_credit
+	t_row[col_idx['Closing (Dr)']] = '%.2f' % total_closing_dr
+	t_row[col_idx['Closing (Cr)']] = '%.2f' % total_closing_cr
 	out.append(t_row)