[fix] Disable atrribute table in variant item record
diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py
index 5890b5d..a8f69ca 100644
--- a/erpnext/controllers/item_variant.py
+++ b/erpnext/controllers/item_variant.py
@@ -12,7 +12,7 @@
 class ItemTemplateCannotHaveStock(frappe.ValidationError): pass
 
 @frappe.whitelist()
-def get_variant(item, args):
+def get_variant(variant, template, args):
 	"""Validates Attributes and their Values, then looks for an exactly matching Item Variant
 
 		:param item: Template Item
@@ -24,9 +24,9 @@
 	if not args:
 		frappe.throw(_("Please specify at least one attribute in the Attributes table"))
 
-	validate_item_variant_attributes(item, args)
+	validate_item_variant_attributes(template, args)
 
-	return find_variant(item, args)
+	return find_variant(variant, template, args)
 
 def validate_item_variant_attributes(item, args):
 	attribute_values = {}
@@ -65,7 +65,7 @@
 			frappe.throw(_("Value {0} for Attribute {1} does not exist in the list of valid Item Attribute Values").format(
 				value, attribute))
 
-def find_variant(item, args):
+def find_variant(variant_item_code, template, args):
 	conditions = ["""(iv_attribute.attribute="{0}" and iv_attribute.attribute_value="{1}")"""\
 		.format(frappe.db.escape(key), frappe.db.escape(cstr(value))) for key, value in args.items()]
 
@@ -79,8 +79,8 @@
 		where variant_of=%s and exists (
 			select name from `tabItem Variant Attribute` iv_attribute
 				where iv_attribute.parent=item.name
-				and ({conditions})
-		)""".format(conditions=conditions), item)
+				and ({conditions}) and parent != %s
+		)""".format(conditions=conditions), (template, variant_item_code))
 
 	for variant in possible_variants:
 		variant = frappe.get_doc("Item", variant)
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 55295f4..d6e4748 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -320,6 +320,10 @@
 		frm.toggle_display("attributes", frm.doc.has_variants || frm.doc.variant_of);
 		frm.fields_dict.attributes.grid.toggle_reqd("attribute_value", frm.doc.variant_of ? 1 : 0);
 		frm.fields_dict.attributes.grid.set_column_disp("attribute_value", frm.doc.variant_of ? 1 : 0);
+		
+		frm.toggle_enable("attributes", !frm.doc.variant_of);
+		frm.fields_dict.attributes.grid.toggle_enable("attribute", !frm.doc.variant_of);
+		frm.fields_dict.attributes.grid.toggle_enable("attribute_value", !frm.doc.variant_of);
 	}
 });
 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index dfe17e8..1004f91 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -563,11 +563,10 @@
 					frappe.throw(_("Please specify Attribute Value for attribute {0}").format(d.attribute))
 				args[d.attribute] = d.attribute_value
 
-			if self.variant_of:
-				# test this during insert because naming is based on item_code and we cannot use condition like self.name != variant
-				variant = get_variant(self.variant_of, args)
-				if variant and self.get("__islocal"):
-					frappe.throw(_("Item variant {0} exists with same attributes").format(variant), ItemVariantExistsError)
+			variant = get_variant(self.name, self.variant_of, args)
+			if variant:
+				frappe.throw(_("Item variant {0} exists with same attributes")
+					.format(variant), ItemVariantExistsError)
 
 def validate_end_of_life(item_code, end_of_life=None, disabled=None, verbose=1):
 	if (not end_of_life) or (disabled is None):
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index bd6fe28..f8b6393 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -107,6 +107,7 @@
 
 		# doing it again should raise error
 		variant = create_variant("_Test Variant Item", {"Test Size": "Large"})
+		variant.item_code = "_Test Variant Item-L-duplicate"
 		self.assertRaises(ItemVariantExistsError, variant.save)
 
 	def test_make_item_variant_with_numeric_values(self):