diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index bf5fef536b..b308e097ea 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -531,19 +531,20 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite and item.name = bom_item.item_code and is_stock_item = 1 {where_conditions} - group by item_code, stock_uom""" + group by item_code, stock_uom + order by idx""" if fetch_exploded: query = query.format(table="BOM Explosion Item", where_conditions="""and item.is_sub_contracted_item = 0""", - select_columns = ", bom_item.source_warehouse") - items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) + select_columns = ", bom_item.source_warehouse, (Select idx from `tabBOM Item` where item_code = bom_item.item_code and parent = %(parent)s ) as idx") + items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) elif fetch_scrap_items: - query = query.format(table="BOM Scrap Item", where_conditions="", select_columns="") + query = query.format(table="BOM Scrap Item", where_conditions="", select_columns=", bom_item.idx") items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) else: query = query.format(table="BOM Item", where_conditions="", - select_columns = ", bom_item.source_warehouse") + select_columns = ", bom_item.source_warehouse, bom_item.idx") items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) for item in items: diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 5fedc72889..2c246f92c2 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -437,7 +437,7 @@ class ProductionOrder(Document): item_dict = get_bom_items_as_dict(self.bom_no, self.company, qty=self.qty, fetch_exploded = self.use_multi_level_bom) - for item in item_dict.values(): + for item in sorted(item_dict.values(), key=lambda d: d['idx']): self.append('required_items', { 'item_code': item.item_code, 'required_qty': item.qty,