fix: sales order item shwoing incorrect produced qty (#19584)

diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index 6ea3dc8..089cb80 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -216,7 +216,9 @@
 			self.db_set(fieldname, qty)
 
 			from erpnext.selling.doctype.sales_order.sales_order import update_produced_qty_in_so_item
-			update_produced_qty_in_so_item(self.sales_order_item)
+
+			if self.sales_order and self.sales_order_item:
+				update_produced_qty_in_so_item(self.sales_order, self.sales_order_item)
 
 		if self.production_plan:
 			self.update_production_plan_status()
diff --git a/erpnext/patches/v12_0/set_produced_qty_field_in_sales_order_for_work_order.py b/erpnext/patches/v12_0/set_produced_qty_field_in_sales_order_for_work_order.py
index 44d8fa7..0702673 100644
--- a/erpnext/patches/v12_0/set_produced_qty_field_in_sales_order_for_work_order.py
+++ b/erpnext/patches/v12_0/set_produced_qty_field_in_sales_order_for_work_order.py
@@ -3,8 +3,12 @@
 from erpnext.selling.doctype.sales_order.sales_order import update_produced_qty_in_so_item
 
 def execute():
-    frappe.reload_doctype('Sales Order Item')
-    frappe.reload_doctype('Sales Order')
-    sales_order_items = frappe.db.get_all('Sales Order Item', ['name'])
-    for so_item in sales_order_items:
-        update_produced_qty_in_so_item(so_item.get('name'))
\ No newline at end of file
+	frappe.reload_doctype('Sales Order Item')
+	frappe.reload_doctype('Sales Order')
+
+	for d in frappe.get_all('Work Order',
+		fields = ['sales_order', 'sales_order_item'],
+		filters={'sales_order': ('!=', ''), 'sales_order_item': ('!=', '')}):
+
+		# update produced qty in sales order
+		update_produced_qty_in_so_item(d.sales_order, d.sales_order_item)
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index c4c3c0f..e12b359 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -1038,14 +1038,18 @@
 
 	return doc
 
-def update_produced_qty_in_so_item(sales_order_item):
+def update_produced_qty_in_so_item(sales_order, sales_order_item):
 	#for multiple work orders against same sales order item
 	linked_wo_with_so_item = frappe.db.get_all('Work Order', ['produced_qty'], {
 		'sales_order_item': sales_order_item,
+		'sales_order': sales_order,
 		'docstatus': 1
 	})
-	if len(linked_wo_with_so_item) > 0:
-		total_produced_qty = 0
-		for wo in linked_wo_with_so_item:
-			total_produced_qty += flt(wo.get('produced_qty'))
-		frappe.db.set_value('Sales Order Item', sales_order_item, 'produced_qty', total_produced_qty)
\ No newline at end of file
+
+	total_produced_qty = 0
+	for wo in linked_wo_with_so_item:
+		total_produced_qty += flt(wo.get('produced_qty'))
+
+	if not total_produced_qty and frappe.flags.in_patch: return
+
+	frappe.db.set_value('Sales Order Item', sales_order_item, 'produced_qty', total_produced_qty)
\ No newline at end of file