fix: balance quantity
diff --git a/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py b/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py
index 544c9f3..1fbba27 100644
--- a/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py
+++ b/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py
@@ -83,6 +83,8 @@
 					"warehouse_type": self.warehouse_type,
 					"include_uom": self.include_uom,
 					"ignore_closing_balance": 1,
+					"show_variant_attributes": 1,
+					"show_stock_ageing_data": 1,
 				}
 			)
 		)
diff --git a/erpnext/stock/report/stock_balance/stock_balance.js b/erpnext/stock/report/stock_balance/stock_balance.js
index a2b3b91..33ed955 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.js
+++ b/erpnext/stock/report/stock_balance/stock_balance.js
@@ -90,7 +90,8 @@
 		{
 			"fieldname": 'ignore_closing_balance',
 			"label": __('Ignore Closing Balance'),
-			"fieldtype": 'Check'
+			"fieldtype": 'Check',
+			"default": 1
 		},
 	],
 
diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py
index f24e232..a757add 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.py
+++ b/erpnext/stock/report/stock_balance/stock_balance.py
@@ -60,7 +60,7 @@
 	def run(self):
 		self.float_precision = cint(frappe.db.get_default("float_precision")) or 3
 
-		self.inventory_dimensions = get_inventory_dimension_fields()
+		self.inventory_dimensions = self.get_inventory_dimension_fields()
 		self.prepare_opening_data_from_closing_balance()
 		self.prepare_stock_ledger_entries()
 		self.prepare_new_data()
@@ -110,13 +110,18 @@
 				report_data.update(variant_data)
 
 			if self.filters.get("show_stock_ageing_data"):
-				fifo_queue = item_wise_fifo_queue[(report_data.item_code, report_data.warehouse)].get(
-					"fifo_queue"
-				)
+				opening_fifo_queue = self.get_opening_fifo_queue(report_data) or []
+
+				fifo_queue = []
+				if fifo_queue := item_wise_fifo_queue.get((report_data.item_code, report_data.warehouse)):
+					fifo_queue = fifo_queue.get("fifo_queue")
+
+				if fifo_queue:
+					opening_fifo_queue.extend(fifo_queue)
 
 				stock_ageing_data = {"average_age": 0, "earliest_age": 0, "latest_age": 0}
-				if fifo_queue:
-					fifo_queue = sorted(filter(_func, fifo_queue), key=_func)
+				if opening_fifo_queue:
+					fifo_queue = sorted(filter(_func, opening_fifo_queue), key=_func)
 					if not fifo_queue:
 						continue
 
@@ -124,6 +129,7 @@
 					stock_ageing_data["average_age"] = get_average_age(fifo_queue, to_date)
 					stock_ageing_data["earliest_age"] = date_diff(to_date, fifo_queue[0][1])
 					stock_ageing_data["latest_age"] = date_diff(to_date, fifo_queue[-1][1])
+					stock_ageing_data["fifo_queue"] = fifo_queue
 
 				report_data.update(stock_ageing_data)
 
@@ -146,11 +152,6 @@
 			if group_by_key not in item_warehouse_map:
 				self.initialize_data(item_warehouse_map, group_by_key, entry)
 
-			qty_dict = item_warehouse_map[group_by_key]
-			qty_dict.val_rate = entry.valuation_rate
-			qty_dict.bal_qty += flt(qty_dict.opening_qty)
-			qty_dict.bal_val += flt(qty_dict.opening_val)
-
 		item_warehouse_map = filter_items_with_no_transactions(
 			item_warehouse_map, self.float_precision, self.inventory_dimensions
 		)
@@ -186,10 +187,6 @@
 				qty_dict.out_qty += abs(qty_diff)
 				qty_dict.out_val += abs(value_diff)
 
-		# if self.opening_data and group_by_key in self.opening_data:
-		# 	qty_diff += flt(qty_dict.opening_qty)
-		# 	value_diff += flt(qty_dict.opening_val)
-
 		qty_dict.val_rate = entry.valuation_rate
 		qty_dict.bal_qty += qty_diff
 		qty_dict.bal_val += value_diff
@@ -208,12 +205,13 @@
 				"item_name": entry.item_name,
 				"opening_qty": opening_data.get("bal_qty") or 0.0,
 				"opening_val": opening_data.get("bal_val") or 0.0,
+				"opening_fifo_queue": opening_data.get("fifo_queue") or [],
 				"in_qty": 0.0,
 				"in_val": 0.0,
 				"out_qty": 0.0,
 				"out_val": 0.0,
-				"bal_qty": 0.0,
-				"bal_val": 0.0,
+				"bal_qty": opening_data.get("bal_qty") or 0.0,
+				"bal_val": opening_data.get("bal_val") or 0.0,
 				"val_rate": 0.0,
 			}
 		)
@@ -294,7 +292,7 @@
 		self.sle_entries = query.run(as_dict=True)
 
 	def apply_inventory_dimensions_filters(self, query, sle) -> str:
-		inventory_dimension_fields = get_inventory_dimension_fields()
+		inventory_dimension_fields = self.get_inventory_dimension_fields()
 		if inventory_dimension_fields:
 			for fieldname in inventory_dimension_fields:
 				query = query.select(fieldname)
@@ -438,20 +436,6 @@
 					"options": "currency",
 				},
 				{
-					"label": _("Reorder Level"),
-					"fieldname": "reorder_level",
-					"fieldtype": "Float",
-					"width": 80,
-					"convertible": "qty",
-				},
-				{
-					"label": _("Reorder Qty"),
-					"fieldname": "reorder_qty",
-					"fieldtype": "Float",
-					"width": 80,
-					"convertible": "qty",
-				},
-				{
 					"label": _("Company"),
 					"fieldname": "company",
 					"fieldtype": "Link",
@@ -556,9 +540,17 @@
 
 		return opening_vouchers
 
+	@staticmethod
+	def get_inventory_dimension_fields():
+		return [dimension.fieldname for dimension in get_inventory_dimensions()]
 
-def get_inventory_dimension_fields():
-	return [dimension.fieldname for dimension in get_inventory_dimensions()]
+	@staticmethod
+	def get_opening_fifo_queue(report_data):
+		opening_fifo_queue = report_data.get("opening_fifo_queue") or []
+		for row in opening_fifo_queue:
+			row[1] = getdate(row[1])
+
+		return opening_fifo_queue
 
 
 def filter_items_with_no_transactions(iwb_map, float_precision: float, inventory_dimensions: list):
@@ -571,7 +563,16 @@
 			if key in inventory_dimensions:
 				continue
 
-			if key in ["item_code", "warehouse", "item_name", "item_group", "projecy", "stock_uom"]:
+			if key in [
+				"item_code",
+				"warehouse",
+				"item_name",
+				"item_group",
+				"projecy",
+				"stock_uom",
+				"company",
+				"opening_fifo_queue",
+			]:
 				continue
 
 			val = flt(val, float_precision)