diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 0fbd914..e5405b2 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -371,39 +371,29 @@
 		self.make_sl_entries(sl_entries)
 
 	def set_po_nos(self):
-		self.po_no = ''
 		if self.doctype == 'Sales Invoice' and hasattr(self, "items"):
 			self.set_pos_for_sales_invoice()
 		if self.doctype == 'Delivery Note' and hasattr(self, "items"):
 			self.set_pos_for_delivery_note()
 
 	def set_pos_for_sales_invoice(self):
-		ref_fieldname1 = "sales_order"
-		ref_fieldname2 = "delivery_note"
-		sales_orders = list(set([d.get(ref_fieldname1) for d in self.items if d.get(ref_fieldname1)]))
-		if sales_orders:
-			so_po_nos = frappe.get_all('Sales Order', 'po_no', filters = {'name': ('in', sales_orders)})
-			if so_po_nos and so_po_nos[0].get('po_no'):
-				self.po_no += ', '.join(list(set([d.po_no for d in so_po_nos if d.po_no])))
-		delivery_notes = list(set([d.get(ref_fieldname2) for d in self.items if d.get(ref_fieldname2)]))
-		if delivery_notes:
-			dn_po_nos = frappe.get_all('Delivery Note', 'po_no', filters = {'name': ('in', delivery_notes)})
-			if dn_po_nos and dn_po_nos[0].get('po_no'):
-				self.po_no += ', '.join(list(set([d.po_no for d in dn_po_nos if d.po_no])))
+		po_nos = []
+		self.get_po_nos('Sales Order', 'sales_order', po_nos)
+		self.get_po_nos('Delivery Note', 'delivery_note', po_nos)
+		self.po_no = ', '.join(list(set(po_nos)))
 
 	def set_pos_for_delivery_note(self):
-		ref_fieldname1 = "against_sales_order"
-		ref_fieldname2 = "against_sales_invoice"
-		sales_orders = list(set([d.get(ref_fieldname1) for d in self.items if d.get(ref_fieldname1)]))
-		sales_invoices = list(set([d.get(ref_fieldname2) for d in self.items if d.get(ref_fieldname2)]))
-		if sales_orders:
-			so_po_nos = frappe.get_all('Sales Order', 'po_no', filters = {'name': ('in', sales_orders)})
-			if so_po_nos and so_po_nos[0].get('po_no'):
-				self.po_no += ', '.join(list(set([d.po_no for d in so_po_nos if d.po_no])))
-		if sales_invoices:
-			si_po_nos = frappe.get_all('Sales Invoice', 'po_no', filters = {'name': ('in', sales_invoices)})
-			if si_po_nos and si_po_nos[0].get('po_no'):
-				self.po_no += ', '.join(list(set([d.po_no for d in si_po_nos if d.po_no])))
+		po_nos = []
+		self.get_po_nos('Sales Order', 'against_sales_order', po_nos)
+		self.get_po_nos('Sales Invoice', 'against_sales_invoice', po_nos)
+		self.po_no = ', '.join(list(set(po_nos)))
+
+	def get_po_nos(self, ref_doctype, ref_fieldname, po_nos):
+		doc_list = list(set([d.get(ref_fieldname) for d in self.items if d.get(ref_fieldname)]))
+		if doc_list:
+			po_no_list = frappe.get_all(ref_doctype, 'po_no', filters = {'name': ('in', doc_list)})
+			if po_no_list and po_no_list[0].get('po_no'):
+				po_nos += [d.po_no for d in po_no_list if d.po_no]
 
 	def set_gross_profit(self):
 		if self.doctype in ["Sales Order", "Quotation"]:
