Added is_perpetual_inventory_enabled method
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index f026b6a..4479bf9 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -38,10 +38,7 @@
 
 def set_perpetual_inventory(enable=1, company=None):
 	if not company:
-		company = get_default_company()
-
-	if frappe.flags.in_test:
-		company = "_Test Company"
+		company = "_Test Company" if frappe.flags.in_test else get_default_company()
 
 	company = frappe.get_doc("Company", company)
 	company.enable_perpetual_inventory = enable
@@ -57,4 +54,23 @@
 
 	return " - ".join(parts)
 
+def is_perpetual_inventory_enabled(company):
+	if not company:
+		company = "_Test Company" if frappe.flags.in_test else get_default_company()
 
+	if not hasattr(frappe.local, 'enable_perpetual_inventory'):
+		perpetual_inventory = get_company_wise_perptual_inventory()
+		frappe.local.enable_perpetual_inventory = perpetual_inventory
+
+	if not frappe.local.enable_perpetual_inventory.get(company):
+		is_enabled = frappe.db.get_value("Company", company, "enable_perpetual_inventory") or 0
+		frappe.local.enable_perpetual_inventory.setdefault(company, is_enabled)
+
+	return frappe.local.enable_perpetual_inventory.get(company)
+
+def get_company_wise_perptual_inventory():
+	company_dict = {}
+	for data in frappe.get_all('Company', fields = ["name", "enable_perpetual_inventory"]):
+		company_dict[data.name] = data.enable_perpetual_inventory
+
+	return company_dict
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js
index 0927e81..03d84e9 100755
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.js
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js
@@ -39,7 +39,7 @@
 	
 	toggle_display_account_head: function(frm) {
 		frm.toggle_display('expense_account',
-			frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory);
+			erpnext.is_perpetual_inventory_enabled(frm.doc.company));
 	}
 })
 
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index b391127..00d5249 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -164,7 +164,7 @@
 				frappe.msgprint(_("Item Code required at Row No {0}").format(d.idx), raise_exception=True)
 
 	def set_expense_account(self, for_validate=False):
-		auto_accounting_for_stock = frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory')
+		auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
 
 		if auto_accounting_for_stock:
 			stock_not_billed_account = self.get_company_default("stock_received_but_not_billed")
@@ -335,7 +335,7 @@
 			delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name)
 
 	def get_gl_entries(self, warehouse_account=None):
-		self.auto_accounting_for_stock = frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory')
+		self.auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
 		self.stock_received_but_not_billed = self.get_company_default("stock_received_but_not_billed")
 		self.expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
 		self.negative_expense_to_be_booked = 0.0
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 8094e99..8bbd6c5 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -4,7 +4,7 @@
 
 from __future__ import unicode_literals
 import unittest
-import frappe
+import frappe, erpnext
 import frappe.model
 from frappe.utils import cint, flt, today, nowdate
 import frappe.defaults
@@ -28,7 +28,7 @@
 	def test_gl_entries_without_perpetual_inventory(self):
 		wrapper = frappe.copy_doc(test_records[0])
 		set_perpetual_inventory(0, wrapper.company)
-		self.assertTrue(not cint(frappe.db.get_value('Company', wrapper.company, 'enable_perpetual_inventory')))
+		self.assertTrue(not cint(erpnext.is_perpetual_inventory_enabled(wrapper.company)))
 		wrapper.insert()
 		wrapper.submit()
 		wrapper.load_from_db()
@@ -53,7 +53,7 @@
 	def test_gl_entries_with_perpetual_inventory(self):
 		pi = frappe.copy_doc(test_records[1])
 		set_perpetual_inventory(1, pi.company)
-		self.assertTrue(cint(frappe.db.get_value('Company', pi.company, 'enable_perpetual_inventory')), 1)
+		self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pi.company)), 1)
 		pi.insert()
 		pi.submit()
 
@@ -85,7 +85,7 @@
 	def test_gl_entries_with_perpetual_inventory_against_pr(self):
 		pr = frappe.copy_doc(pr_test_records[0])
 		set_perpetual_inventory(1, pr.company)
-		self.assertTrue(cint(frappe.db.get_value('Company', pr.company, 'enable_perpetual_inventory')), 1)
+		self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1)
 		pr.submit()
 
 		pi = frappe.copy_doc(test_records[1])
@@ -132,7 +132,7 @@
 	def test_gl_entries_with_aia_for_non_stock_items(self):
 		pi = frappe.copy_doc(test_records[1])
 		set_perpetual_inventory(1, pi.company)
-		self.assertTrue(cint(frappe.db.get_value('Company', pi.company, 'enable_perpetual_inventory')), 1)
+		self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pi.company)), 1)
 		pi.get("items")[0].item_code = "_Test Non Stock Item"
 		pi.get("items")[0].expense_account = "_Test Account Cost for Goods Sold - _TC"
 		pi.get("taxes").pop(0)
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 595b7bf..10bd3a0 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -492,7 +492,7 @@
 
 		// expense account
 		frm.fields_dict['items'].grid.get_field('expense_account').get_query = function(doc) {
-			if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) {
+			if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
 				return {
 					filters: {
 						'report_type': 'Profit and Loss',
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index b7aca8f..85c5079 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import frappe
+import frappe, erpnext
 import frappe.defaults
 from frappe.utils import cint, flt
 from frappe import _, msgprint, throw
@@ -559,7 +559,7 @@
 				throw(_("Delivery Note {0} is not submitted").format(d.delivery_note))
 
 	def make_gl_entries(self, gl_entries=None, repost_future_gle=True, from_repost=False):
-		auto_accounting_for_stock = frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory')
+		auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
 
 		if not self.grand_total:
 			return
@@ -675,7 +675,7 @@
 
 		# expense account gl entries
 		if cint(self.update_stock) and \
-			frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory'):
+			erpnext.is_perpetual_inventory_enabled(self.company):
 			gl_entries += super(SalesInvoice, self).get_gl_entries()
 
 	def make_pos_gl_entries(self, gl_entries):
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index a5f7ad2..ceae61c 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import frappe
+import frappe, erpnext
 from frappe.utils import flt, cstr, cint
 from frappe import _
 from frappe.model.meta import get_field_precision
@@ -101,7 +101,7 @@
 	gle.submit()
 
 def validate_account_for_perpetual_inventory(gl_map):
-	if cint(frappe.db.get_value("Company", gl_map[0].company, 'enable_perpetual_inventory')) \
+	if cint(erpnext.is_perpetual_inventory_enabled(gl_map[0].company)) \
 		and gl_map[0].voucher_type=="Journal Entry":
 			aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount
 				where account_type = 'Stock' and is_group=0""")]
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index b3c2f8c..605881c 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import frappe
+import frappe, erpnext
 from frappe.utils import cint, flt, cstr
 from frappe import msgprint, _
 import frappe.defaults
@@ -21,7 +21,7 @@
 		if self.docstatus == 2:
 			delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name)
 
-		if cint(frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory')):
+		if cint(erpnext.is_perpetual_inventory_enabled(self.company)):
 			warehouse_account = get_warehouse_account_map()
 
 			if self.docstatus==1:
diff --git a/erpnext/patches/v7_0/create_warehouse_nestedset.py b/erpnext/patches/v7_0/create_warehouse_nestedset.py
index 964df1f..06766b9 100644
--- a/erpnext/patches/v7_0/create_warehouse_nestedset.py
+++ b/erpnext/patches/v7_0/create_warehouse_nestedset.py
@@ -1,6 +1,6 @@
 
 from __future__ import unicode_literals
-import frappe
+import frappe, erpnext
 from frappe import _
 from frappe.utils import cint
 from frappe.utils.nestedset import rebuild_tree
@@ -51,7 +51,7 @@
 def make_warehouse_nestedset(company=None):
 	validate_parent_account_for_warehouse(company)
 	stock_account_group = get_stock_account_group(company.name)
-	enable_perpetual_inventory = cint(frappe.db.get_value("Company", company, 'enable_perpetual_inventory')) or 0
+	enable_perpetual_inventory = cint(erpnext.is_perpetual_inventory_enabled(company)) or 0
 	if not stock_account_group and enable_perpetual_inventory:
 		return
 
@@ -73,7 +73,7 @@
 	if not company:
 		return
 
-	if cint(frappe.db.get_value("Company", company, 'enable_perpetual_inventory')):
+	if cint(erpnext.is_perpetual_inventory_enabled(company)):
 		parent_account = frappe.db.sql("""select name from tabAccount
 			where account_type='Stock' and company=%s and is_group=1
 			and (warehouse is null or warehouse = '')""", company.name)
diff --git a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py b/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py
index 5a98ab1..d0e816a 100644
--- a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py
+++ b/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import frappe
+import frappe, erpnext
 
 def execute():
 	frappe.reload_doctype("Account")
@@ -10,7 +10,7 @@
 	warehouses = frappe.db.sql_list("""select name, company from tabAccount
 		where account_type = 'Stock' and is_group = 0
 		and (warehouse is null or warehouse = '')""", as_dict)
-	warehouses = [d.name for d in warehouses if frappe.db.get_value('Company', d.company, 'enable_perpetual_inventory')]
+	warehouses = [d.name for d in warehouses if erpnext.is_perpetual_inventory_enabled(d.company)]
 	if len(warehouses) > 0:
 		warehouses = set_warehouse_for_stock_account(warehouses)
 		if not warehouses:
diff --git a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py b/erpnext/patches/v8_0/move_perpetual_inventory_setting.py
index 3010b4d..594a15c 100644
--- a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py
+++ b/erpnext/patches/v8_0/move_perpetual_inventory_setting.py
@@ -7,4 +7,7 @@
 def execute():
 	frappe.reload_doctype('Company')
 	enabled = frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock") or 0
-	frappe.db.sql("""update tabCompany set enable_perpetual_inventory = {0}""".format(enabled))
\ No newline at end of file
+	for data in frappe.get_all('Company', fields = ["name"]):
+		doc = frappe.get_doc('Company', data.name)
+		doc.enable_perpetual_inventory = enabled
+		doc.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 9650862..eaf064b 100644
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -31,6 +31,12 @@
 		}
 	},
 
+	is_perpetual_inventory_enabled: function(company) {
+		if(company) {
+			return frappe.get_doc(":Company", company).enable_perpetual_inventory
+		}
+	},
+
 	setup_serial_no: function() {
 		var grid_row = cur_frm.open_grid_row();
 		if(!grid_row || !grid_row.grid_form.fields_dict.serial_no ||
diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py
index a179959..b333e87 100644
--- a/erpnext/setup/doctype/company/company.py
+++ b/erpnext/setup/doctype/company/company.py
@@ -33,6 +33,7 @@
 		self.validate_default_accounts()
 		self.validate_currency()
 		self.validate_coa_input()
+		self.validate_perpetual_inventory()
 
 	def validate_abbr(self):
 		if not self.abbr:
@@ -139,6 +140,17 @@
 			if not self.chart_of_accounts:
 				self.chart_of_accounts = "Standard"
 
+	def validate_perpetual_inventory(self):
+		if not self.get("__islocal"):
+			if cint(self.enable_perpetual_inventory) == 1 and not self.default_inventory_account:
+				frappe.msgprint(_("Warning: Set default inventory account for perpetual inventory"), alert=True)
+
+			enable_perpetual_inventory = frappe.db.get_value('Company', self.name, 'enable_perpetual_inventory')
+			if enable_perpetual_inventory != self.enable_perpetual_inventory:
+				if hasattr(frappe.local, 'enable_perpetual_inventory') and \
+					self.name in frappe.local.enable_perpetual_inventory:
+					del frappe.local.enable_perpetual_inventory[self.name]
+
 	def set_default_accounts(self):
 		self._set_default_account("default_cash_account", "Cash")
 		self._set_default_account("default_bank_account", "Bank")
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 35658c6..de47fde 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -40,7 +40,7 @@
 
 		
 		frm.set_query('expense_account', 'items', function(doc, cdt, cdn) {
-			if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) {
+			if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
 				return {
 					filters: {
 						"report_type": "Profit and Loss",
@@ -52,7 +52,7 @@
 		});
 
 		frm.set_query('cost_center', 'items', function(doc, cdt, cdn) {
-			if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) {
+			if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
 				return {
 					filters: {
 						'company': doc.company,
@@ -141,7 +141,7 @@
 
 		if (doc.docstatus==1) {
 			this.show_stock_ledger();
-			if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) {
+			if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
 				this.show_general_ledger();
 			}
 			if (this.frm.has_perm("submit") && doc.status !== "Closed") {
@@ -238,7 +238,7 @@
 	
 	unhide_account_head: function(frm) {
 		// unhide expense_account and cost_center if perpetual inventory is enabled in the company
-		var aii_enabled = frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory
+		var aii_enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company)
 		frm.fields_dict["items"].grid.set_column_disp(["expense_account", "cost_center"], aii_enabled);
 	}
 })
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index fc92486..a38b222 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -46,7 +46,7 @@
 	},
 
 	toggle_display_account_head: function(frm) {
-		var enabled = frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory
+		var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company)
 		frm.fields_dict["items"].grid.set_column_disp(["cost_center"], enabled);
 	}
 });
@@ -62,7 +62,7 @@
 		this._super();
 		if(this.frm.doc.docstatus===1) {
 			this.show_stock_ledger();
-			if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) {
+			if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
 				this.show_general_ledger();
 			}
 		}
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index fe157e0..d8cd271 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -4,7 +4,7 @@
 
 from __future__ import unicode_literals
 import unittest
-import frappe
+import frappe, erpnext
 import frappe.defaults
 from frappe.utils import cint, flt, cstr, today
 from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
@@ -53,7 +53,7 @@
 	def test_purchase_receipt_gl_entry(self):
 		pr = frappe.copy_doc(test_records[0])
 		set_perpetual_inventory(1, pr.company)
-		self.assertEqual(cint(frappe.db.get_value("Company", pr.company, 'enable_perpetual_inventory')), 1)
+		self.assertEqual(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1)
 		pr.insert()
 		pr.submit()
 
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index f1dbeea..74ac589 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -104,7 +104,7 @@
 		});
 	},
 	toggle_display_account_head: function(frm) {
-		var enabled = frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory;
+		var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company);
 		frm.fields_dict["items"].grid.set_column_disp(["cost_center", "expense_account"], enabled);
 	}
 })
@@ -222,12 +222,12 @@
 			};
 		});
 
-		if(me.frm.doc.company && frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) {
+		if(me.frm.doc.company && erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 			this.frm.add_fetch("company", "stock_adjustment_account", "expense_account");
 		}
 
 		this.frm.fields_dict.items.grid.get_field('expense_account').get_query = function() {
-			if (frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) {
+			if (erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 				return {
 					filters: {
 						"company": me.frm.doc.company,
@@ -265,7 +265,7 @@
 		this.toggle_related_fields(this.frm.doc);
 		this.toggle_enable_bom();
 		this.show_stock_ledger();
-		if (this.frm.doc.docstatus===1 && frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory) {
+		if (this.frm.doc.docstatus===1 && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
 			this.show_general_ledger();
 		}
 		erpnext.hide_company();
@@ -283,7 +283,7 @@
 	set_default_account: function(callback) {
 		var me = this;
 
-		if(this.frm.doc.company && frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory) {
+		if(this.frm.doc.company && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
 			return this.frm.call({
 				method: "erpnext.accounts.utils.get_company_default",
 				args: {
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
index 2a6ef7b..a86dea7 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
@@ -113,7 +113,7 @@
 	},
 	toggle_display_account_head: function(frm) {
 		frm.toggle_display(['expense_account', 'cost_center'],
-			frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory);
+			erpnext.is_perpetual_inventory_enabled(frm.doc.company));
 	}
 });
 
@@ -144,7 +144,7 @@
 	set_default_expense_account: function() {
 		var me = this;
 		if(this.frm.doc.company) {
-			if (frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory && !this.frm.doc.expense_account) {
+			if (erpnext.is_perpetual_inventory_enabled(this.frm.doc.company) && !this.frm.doc.expense_account) {
 				return this.frm.call({
 					method: "erpnext.accounts.utils.get_company_default",
 					args: {
@@ -166,12 +166,12 @@
 
 		this.setup_posting_date_time_check();
 
-		if (me.frm.doc.company && frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) {
+		if (me.frm.doc.company && erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 			this.frm.add_fetch("company", "stock_adjustment_account", "expense_account");
 			this.frm.add_fetch("company", "cost_center", "cost_center");
 		}
 		this.frm.fields_dict["expense_account"].get_query = function() {
-			if(frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) {
+			if(erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 				return {
 					"filters": {
 						'company': me.frm.doc.company,
@@ -181,7 +181,7 @@
 			}
 		}
 		this.frm.fields_dict["cost_center"].get_query = function() {
-			if(frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) {
+			if(erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 				return {
 					"filters": {
 						'company': me.frm.doc.company,
@@ -195,7 +195,7 @@
 	refresh: function() {
 		if(this.frm.doc.docstatus==1) {
 			this.show_stock_ledger();
-			if (frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory) {
+			if (erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
 				this.show_general_ledger();
 			}
 		}
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index 093bd3b..9c42529 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import frappe
+import frappe, erpnext
 import frappe.defaults
 from frappe import msgprint, _
 from frappe.utils import cstr, flt, cint
@@ -231,7 +231,7 @@
 			self.expense_account, self.cost_center)
 
 	def validate_expense_account(self):
-		if not cint(frappe.db.get_value("Company", self.company, 'enable_perpetual_inventory')):
+		if not cint(erpnext.is_perpetual_inventory_enabled(self.company)):
 			return
 
 		if not self.expense_account:
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 07be658..711f064 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -454,7 +454,7 @@
 			dict(item_code=item_code, buying=1, currency=currency), 'price_list_rate')
 
 	if not allow_zero_rate and not valuation_rate \
-			and cint(frappe.db.get_value("Company", company, "enable_perpetual_inventory")):
+			and cint(erpnext.is_perpetual_inventory_enabled(company)):
 		frappe.local.message_log = []
 		frappe.throw(_("Valuation rate not found for the Item {0}, which is required to do accounting entries for {1} {2}. If the item is transacting as a sample item in the {1}, please mention that in the {1} Item table. Otherwise, please create an incoming stock transaction for the item or mention valuation rate in the Item record, and then try submiting/cancelling this entry").format(item_code, voucher_type, voucher_no))