SO and DN mandatory only for stock item if made mandatory in global defaults
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 2d0a9f2..8c40f3d 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -404,14 +404,13 @@
 
 	#check in manage account if sales order / delivery note required or not.
 	def so_dn_required(self):
-		dict = {'Sales Order':'so_required','Delivery Note':'dn_required'}
-		for i in dict:	
-			res = webnotes.conn.sql("select value from `tabSingles` where doctype = 'Global Defaults' and field = '%s'"%dict[i])
-			if res and res[0][0] == 'Yes':
+		dic = {'Sales Order':'so_required','Delivery Note':'dn_required'}
+		for i in dic:	
+			if webnotes.conn.get_value('Global Defaults', 'Global Defaults', dic[i]) == 'Yes':
 				for d in getlist(self.doclist,'entries'):
-					if not d.fields[i.lower().replace(' ','_')]:
-						msgprint("%s No. required against item %s"%(i,d.item_code))
-						raise Exception
+					if webnotes.conn.get_value('Item', d.item_code, 'is_stock_item') == 'Yes' \
+						and not d.fields[i.lower().replace(' ','_')]:
+						msgprint("%s is mandatory for stock item which is not mentioed against item: %s"%(i,d.item_code), raise_exception=1)
 
 	#check for does customer belong to same project as entered..
 	#-------------------------------------------------------------------------------------------------