diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 86f1dd9..96b8a6e 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -242,7 +242,7 @@
 
 	def get_sl_entries(self, d, args):
 		sl_dict = {
-			"item_code": d.item_code,
+			"item_code": d.get("item_code", None),
 			"warehouse": d.get("warehouse", None),
 			"posting_date": self.posting_date,
 			"posting_time": self.posting_time,
@@ -250,12 +250,12 @@
 			"voucher_no": self.name,
 			"voucher_detail_no": d.name,
 			"actual_qty": (self.docstatus==1 and 1 or -1)*flt(d.get("stock_qty")),
-			"stock_uom": d.stock_uom,
+			"stock_uom": d.get("stock_uom"),
 			"incoming_rate": 0,
 			"company": self.company,
 			"fiscal_year": self.fiscal_year,
-			"batch_no": cstr(d.batch_no).strip(),
-			"serial_no": d.serial_no,
+			"batch_no": cstr(d.get("batch_no")).strip(),
+			"serial_no": d.get("serial_no"),
 			"project": d.get("project_name"),
 			"is_cancelled": self.docstatus==2 and "Yes" or "No"
 		}
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index e9ce9bd..c265830 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -16,19 +16,19 @@
 erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend({
 	refresh: function(doc, dt, dn) {
 		this._super();
-		
+
 		if(!doc.__billing_complete && doc.docstatus==1) {
 			// show Make Invoice button only if Delivery Note is not created from Sales Invoice
 			var from_sales_invoice = false;
-			from_sales_invoice = cur_frm.doc.delivery_note_details.some(function(item) { 
-					return item.against_sales_invoice ? true : false; 
+			from_sales_invoice = cur_frm.doc.delivery_note_details.some(function(item) {
+					return item.against_sales_invoice ? true : false;
 				});
-			
+
 			if(!from_sales_invoice)
 				cur_frm.add_custom_button(__('Make Invoice'), this.make_sales_invoice);
 		}
-	
-		if(flt(doc.per_installed, 2) < 100 && doc.docstatus==1) 
+
+		if(flt(doc.per_installed, 2) < 100 && doc.docstatus==1)
 			cur_frm.add_custom_button(__('Make Installation Note'), this.make_installation_note);
 
 		if (doc.docstatus==1) {
@@ -40,15 +40,15 @@
 		if(doc.docstatus==0 && !doc.__islocal) {
 			cur_frm.add_custom_button(__('Make Packing Slip'), cur_frm.cscript['Make Packing Slip']);
 		}
-	
+
 		set_print_hide(doc, dt, dn);
-	
+
 		// unhide expense_account and cost_center is auto_accounting_for_stock enabled
 		var aii_enabled = cint(sys_defaults.auto_accounting_for_stock)
 		cur_frm.fields_dict[cur_frm.cscript.fname].grid.set_column_disp(["expense_account", "cost_center"], aii_enabled);
 
 		if (this.frm.doc.docstatus===0) {
-			cur_frm.add_custom_button(__('From Sales Order'), 
+			cur_frm.add_custom_button(__('From Sales Order'),
 				function() {
 					frappe.model.map_current_doc({
 						method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note",
@@ -65,15 +65,15 @@
 				});
 		}
 
-	}, 
-	
+	},
+
 	make_sales_invoice: function() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
 			source_name: cur_frm.doc.name
 		})
-	}, 
-	
+	},
+
 	make_installation_note: function() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_installation_note",
@@ -88,7 +88,7 @@
 	delivery_note_details_on_form_rendered: function(doc, grid_row) {
 		erpnext.setup_serial_no(grid_row)
 	}
-	
+
 });
 
 // for backward compatibility: combine new and previous states
@@ -115,7 +115,7 @@
 cur_frm.fields_dict['transporter_name'].get_query = function(doc) {
 	return{
 		filters: { 'supplier_type': "transporter" }
-	}	
+	}
 }
 
 cur_frm.cscript['Make Packing Slip'] = function() {
@@ -155,7 +155,7 @@
 //****************** For print sales order no and date*************************
 cur_frm.pformat.sales_order_no= function(doc, cdt, cdn){
 	//function to make row of table
-	
+
 	var make_row = function(title,val1, val2, bold){
 		var bstart = '<b>'; var bend = '</b>';
 
@@ -165,12 +165,12 @@
 	}
 
 	out ='';
-	
+
 	var cl = doc.delivery_note_details || [];
 
-	// outer table	
+	// outer table
 	var out='<div><table class="noborder" style="width:100%"><tr><td style="width: 50%"></td><td>';
-	
+
 	// main table
 	out +='<table class="noborder" style="width:100%">';
 
@@ -234,14 +234,14 @@
 		}
 		refresh_field(cur_frm.cscript.fname);
 	}
-	
+
 	cur_frm.fields_dict.delivery_note_details.grid.get_field("cost_center").get_query = function(doc) {
 		return {
 
-			filters: { 
+			filters: {
 				'company': doc.company,
 				'group_or_ledger': "Ledger"
 			}
 		}
 	}
-}
\ No newline at end of file
+}
