Виды номенклатуры / Форма элемента / Модуль формы

файл
#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
	
	Если ОтказОткрытияФормы Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;

	ЦветТекстаФормы = ЦветаСтиля.ЦветТекстаФормы;
	
	УстановитьУсловноеОформление();
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		
		ПриЧтенииСозданииНаСервере();
		
		ТолькоОбщие = Ложь;
		
		Если Параметры.Свойство("ЗначениеКопирования") Тогда
		
			ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
				ТаблицаДопРеквизитовНоменклатуры,
				Параметры.ЗначениеКопирования.НаборСвойств,
				НаборОбщихСвойств,
				"Реквизиты",
				ТолькоОбщие);
			
			ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
				ТаблицаДопРеквизитовХарактеристик,
				НаборОбщихСвойствХарактеристик,
				"Реквизиты",
				ТолькоОбщие);
			
			ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
				ТаблицаДопРеквизитовСерий,
				Параметры.ЗначениеКопирования.НаборСвойствСерий,
				НаборОбщихСвойствСерий,
				"Реквизиты",
				ТолькоОбщие);
			
			ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
				ТаблицаДопСведенийНоменклатуры,
				Параметры.ЗначениеКопирования.НаборСвойств,
				НаборОбщихСвойств,
				"Сведения",
				ТолькоОбщие);
			
			ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
				ТаблицаДопСведенийХарактеристик,
				Параметры.ЗначениеКопирования.НаборСвойствХарактеристик,
				НаборОбщихСвойствХарактеристик,
				"Сведения",
				ТолькоОбщие);
			
			ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
				ТаблицаДопСведенийСерий,
				Параметры.ЗначениеКопирования.НаборСвойствСерий,
				НаборОбщихСвойствСерий,
				"Сведения",
				ТолькоОбщие);
			
			// Заполнить дополнительные реквизиты для контроля.
			КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, "Номенклатура");
			НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы = Справочники.Номенклатура.НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы();
			
			ДополнительныеРеквизиты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.ЗначениеКопирования.НаборСвойств, "ДополнительныеРеквизиты"); // РезультатЗапроса
			Если ДополнительныеРеквизиты <> Неопределено Тогда
				ВыборкаДополнительныеРеквизиты = ДополнительныеРеквизиты.Выбрать(); // ВыборкаИзРезультатаЗапроса
				Пока ВыборкаДополнительныеРеквизиты.Следующий() Цикл
					
					ДобавляемоеСвойство = ВыборкаДополнительныеРеквизиты.Свойство;
					РеквизитыДобавляемоеСвойство = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемоеСвойство, 
						"ТипЗначения, ЗаполнятьОбязательно");
					ТипЗначения = РеквизитыДобавляемоеСвойство.ТипЗначения;
					НоваяСтрока = КоллекцияРеквизитовДляКонтроля.Добавить();
					
					НоваяСтрока.ИмяРеквизита = ДобавляемоеСвойство;
					НоваяСтрока.ПредставлениеРеквизита = Строка(ДобавляемоеСвойство);
					НоваяСтрока.Свойство = ДобавляемоеСвойство;
					НоваяСтрока.ЭтоДопРеквизит = Истина;
					НоваяСтрока.ЗаполнятьОбязательно = РеквизитыДобавляемоеСвойство.ЗаполнятьОбязательно;
					НоваяСтрока.ОтображатьПриСоздании = РеквизитыДобавляемоеСвойство.ЗаполнятьОбязательно;
					
					УсловияДоступности = УсловияДоступности();
					УсловияДоступности.ЭтоНеиспользуемыйДляКонтроляТип = (НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы.Найти(ТипЗначения) <> Неопределено);
					УсловияДоступности.ТипРеквизитаБулево = (ТипЗначения =  Новый ОписаниеТипов("Булево"));
					УсловияДоступности.ЗаполнятьОбязательно = РеквизитыДобавляемоеСвойство.ЗаполнятьОбязательно;
					
					УстановитьДоступностьНастройкиПолейРеквизитаДляКонтроля(НоваяСтрока, УсловияДоступности);
					
				КонецЦикла;
			КонецЕсли;
			
		КонецЕсли;
	Иначе
		
		НастройкаВидимостиФормы = "СвернутьВсе";
		СвернутьРазвернутьВсеГруппы(ЭтотОбъект);
		
	КонецЕсли;
	
	СвязиПараметровВыбораПолитикиВШапке = Новый Массив;
	СвязиПараметровВыбораПолитикиВТЧ = Новый Массив;
	
	Для Каждого ПараметрОтбораПолитик Из НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий() Цикл
		
		Если ПараметрОтбораПолитик.Ключ = "ВидНоменклатуры" Тогда
			СвязиПараметровВыбораПолитикиВШапке.Добавить(Новый СвязьПараметраВыбора("ВидНоменклатуры",
				"Объект.Ссылка", РежимИзмененияСвязанногоЗначения.НеИзменять));
		ИначеЕсли ПараметрОтбораПолитик.Ключ = "Склад" Тогда
			СвязиПараметровВыбораПолитикиВТЧ.Добавить(Новый СвязьПараметраВыбора("Склад",
				"Элементы.ПолитикиУчетаСерий.ТекущиеДанные.Склад", РежимИзмененияСвязанногоЗначения.Очищать));
		Иначе
			СвязиПараметровВыбораПолитикиВШапке.Добавить(Новый СвязьПараметраВыбора(ПараметрОтбораПолитик.Ключ,
				"Объект." + ПараметрОтбораПолитик.Ключ, РежимИзмененияСвязанногоЗначения.НеИзменять));
			СвязиПараметровВыбораПолитикиВТЧ.Добавить(Новый СвязьПараметраВыбора(ПараметрОтбораПолитик.Ключ,
				"Объект." + ПараметрОтбораПолитик.Ключ, РежимИзмененияСвязанногоЗначения.НеИзменять));
		КонецЕсли;
		
	КонецЦикла;
	
	ПараметрВыбораСклад           = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Новый ПараметрВыбора("Склад", Неопределено));
	ПараметрВыбораВидНоменклатуры = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Новый ПараметрВыбора("ВидНоменклатуры", Неопределено));
	
	Элементы.ПолитикаУчетаСерий.СвязиПараметровВыбора  = Новый ФиксированныйМассив(СвязиПараметровВыбораПолитикиВШапке);
	Элементы.ПолитикаУчетаСерий.ПараметрыВыбора        = Новый ФиксированныйМассив(ПараметрВыбораСклад);
	
	Элементы.ПолитикаУчетаСерий2.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметровВыбораПолитикиВШапке);
	Элементы.ПолитикаУчетаСерий2.ПараметрыВыбора       = Новый ФиксированныйМассив(ПараметрВыбораСклад);
	
	Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметровВыбораПолитикиВТЧ);
	Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.ПараметрыВыбора       = Новый ФиксированныйМассив(ПараметрВыбораВидНоменклатуры);
	
	// подсистема запрета редактирования ключевых реквизитов объектов	
	ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
	
	УправлениеДоступом.ПриСозданииФормыЗначенияДоступа(ЭтотОбъект);
	
	СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
		
	ПриСозданииНаСервереЛокализация();
	
	// СтандартныеПодсистемы.РаботаСФайлами
	ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
	ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	Если ОбщегоНазначенияУТКлиентСервер.АвторизованВнешнийПользователь() Тогда
		ОтказОткрытияФормы = Истина;
		Возврат;
	КонецЕсли;
	
	ПриЧтенииСозданииНаСервере();
	
	МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	
	Если ИспользоватьИндивидуальноеНаименование = "ИспользоватьИндивидуальноеНаименование" Тогда
		Объект.ИспользоватьИндивидуальноеНаименованиеПриПечати = Истина;
	Иначе
		Объект.ИспользоватьИндивидуальноеНаименованиеПриПечати = Ложь;
	КонецЕсли;

	Если ИспользуетсяЦенообразование25 
		И Не ЗначениеЗаполнено(Объект.НастройкиКлючаЦенПоХарактеристике)
		И Не Элементы.НастройкиКлючаЦенПоХарактеристике.Доступность Тогда
		Объект.НастройкиКлючаЦенПоХарактеристике = ПредопределенноеЗначение("Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать");
	КонецЕсли;
	
	ОчиститьСообщения();
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	Оповестить("Запись_ВидыНоменклатуры",,ЭтотОбъект);
	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопРеквизит", "Номенклатура");
	ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопРеквизит", "ХарактеристикиНоменклатуры");
	ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопРеквизит", "СерииНоменклатуры");
	
	ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопСведение", "Номенклатура");
	ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопСведение", "ХарактеристикиНоменклатуры");
	ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопСведение", "СерииНоменклатуры");
	
	Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ЗаписатьСвойстваДопРеквизитов("Номенклатура", Отказ);
		ЗаписатьСвойстваДопРеквизитов("ХарактеристикиНоменклатуры", Отказ);
		ЗаписатьСвойстваДопРеквизитов("СерииНоменклатуры", Отказ);
	КонецЕсли;
	
	ПриЗаписиНаСервереЛокализация(Отказ, ТекущийОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ЗаписатьСвойстваДопРеквизитов(НазначениеДопРеквзитов, Отказ)
	
	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, НазначениеДопРеквзитов, МенеджерВременныхТаблиц);
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	РеквизитыДляКонтроля.Свойство				КАК Свойство,
	|	РеквизитыДляКонтроля.ЗаполнятьОбязательно	КАК ЗаполнятьОбязательно,
	|	РеквизитыДляКонтроля.ЭтоОбщийРеквизит		КАК ЭтоОбщийРеквизит
	|ПОМЕСТИТЬ РеквизитыДляКонтроля
	|ИЗ
	|	&РеквизитыДляКонтроля КАК РеквизитыДляКонтроля
	|;
	|
	|//////////////////////////////////////////////////////////////////////////////// 1
	|ВЫБРАТЬ
	|	ВложенныйЗапрос.Свойство				КАК Свойство,
	|	ВложенныйЗапрос.ЗаполнятьОбязательно	КАК ЗаполнятьОбязательно,
	|	ВложенныйЗапрос.ЭтоОбщийРеквизит КАК	ЭтоОбщийРеквизит
	|ПОМЕСТИТЬ ИзменяемыеСвойства
	|ИЗ
	|	(ВЫБРАТЬ
	|		РеквизитыДляКонтроля.Свойство				КАК Свойство,
	|		РеквизитыДляКонтроля.ЗаполнятьОбязательно	КАК ЗаполнятьОбязательно,
	|		РеквизитыДляКонтроля.ЭтоОбщийРеквизит		КАК ЭтоОбщийРеквизит,
	|		1											КАК Контроль
	|	ИЗ
	|		РеквизитыДляКонтроля КАК РеквизитыДляКонтроля
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ВТРеквизитыДляКонтроля.Свойство				КАК Свойство,
	|		ВТРеквизитыДляКонтроля.ЗаполнятьОбязательно	КАК ЗаполнятьОбязательно,
	|		ВТРеквизитыДляКонтроля.ЭтоОбщийРеквизит		КАК ЭтоОбщийРеквизит,
	|		-1											КАК Контроль
	|	ИЗ
	|		ВТВсеДополнительныеРеквизиты КАК ВТРеквизитыДляКонтроля) КАК ВложенныйЗапрос
	|
	|СГРУППИРОВАТЬ ПО
	|	ВложенныйЗапрос.Свойство,
	|	ВложенныйЗапрос.ЗаполнятьОбязательно,
	|	ВложенныйЗапрос.ЭтоОбщийРеквизит
	|
	|ИМЕЮЩИЕ
	|	СУММА(ВложенныйЗапрос.Контроль) > 0
	|;
	|
	|//////////////////////////////////////////////////////////////////////////////// 2
	|ВЫБРАТЬ
	|	НаборыДопРеквизитов.Ссылка	КАК НаборСвойств,
	|	ИзменяемыеСвойства.Свойство	КАК Свойство,
	|	ВидыНоменклатуры.Ссылка		КАК ВидНоменклатуры
	|ИЗ
	|	Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК НаборыДопРеквизитов
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИзменяемыеСвойства КАК ИзменяемыеСвойства
	|		ПО НаборыДопРеквизитов.Свойство = ИзменяемыеСвойства.Свойство
	|		
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
	|		ПО (НаборыДопРеквизитов.Ссылка = ВидыНоменклатуры.НаборСвойств
	|			ИЛИ НаборыДопРеквизитов.Ссылка = ВидыНоменклатуры.НаборСвойствХарактеристик
	|			ИЛИ НаборыДопРеквизитов.Ссылка = ВидыНоменклатуры.НаборСвойствСерий)
	|ГДЕ
	|	НаборыДопРеквизитов.Ссылка <> &ТекущийНабор
	|;
	|
	|//////////////////////////////////////////////////////////////////////////////// 2
	|ВЫБРАТЬ
	|	РеквизитыДляКонтроля.Свойство				КАК Свойство,
	|	РеквизитыДляКонтроля.ЗаполнятьОбязательно	КАК ЗаполнятьОбязательно,
	|	РеквизитыДляКонтроля.ЭтоОбщийРеквизит		КАК ЭтоОбщийРеквизит
	|ИЗ
	|	РеквизитыДляКонтроля КАК РеквизитыДляКонтроля
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов КАК ЗависимостиДополнительныхРеквизитов
	|		ПО РеквизитыДляКонтроля.Свойство = ЗависимостиДополнительныхРеквизитов.Ссылка
	|			И ЗависимостиДополнительныхРеквизитов.Условие = ""НеРавно""
	|			И ЗависимостиДополнительныхРеквизитов.НаборСвойств = &ТекущийНабор
	|			И ЗависимостиДополнительныхРеквизитов.Значение = &ВидНоменклатуры
	|			И ЗависимостиДополнительныхРеквизитов.Реквизит = ""ВидНоменклатуры""
	|			И ЗависимостиДополнительныхРеквизитов.ЗависимоеСвойство ПОДОБНО ""ЗаполнятьОбязательно""
	|		
	|		ЛЕВОЕ СОЕДИНЕНИЕ ИзменяемыеСвойства КАК ИзменяемыеСвойства
	|		ПО РеквизитыДляКонтроля.Свойство = ИзменяемыеСвойства.Свойство
	|
	|ГДЕ
	|	НЕ РеквизитыДляКонтроля.ЭтоОбщийРеквизит
	|	И НЕ РеквизитыДляКонтроля.ЗаполнятьОбязательно
	|	И ИзменяемыеСвойства.Свойство ЕСТЬ NULL
	|	И ЗависимостиДополнительныхРеквизитов.Ссылка ЕСТЬ NULL";
	
	Если НазначениеДопРеквзитов = "Номенклатура" Тогда
		РеквизитыДляКонтроля	= Объект.РеквизитыДляКонтроляНоменклатуры;
		НаборСвойств			= Объект.НаборСвойств;
		ОбщийНабор				= УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
	ИначеЕсли НазначениеДопРеквзитов = "ХарактеристикиНоменклатуры" Тогда
		РеквизитыДляКонтроля	= Объект.РеквизитыДляКонтроляХарактеристик;
		НаборСвойств			= Объект.НаборСвойствХарактеристик;
		ОбщийНабор				= УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
	ИначеЕсли НазначениеДопРеквзитов = "СерииНоменклатуры" Тогда
		РеквизитыДляКонтроля	= Объект.РеквизитыДляКонтроляСерий;
		НаборСвойств			= Объект.НаборСвойствСерий;
		ОбщийНабор				= УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
	КонецЕсли;
	
	ОтборСтрок = Новый Структура("ЭтоДопРеквизит", Истина);
	
	Запрос.УстановитьПараметр("РеквизитыДляКонтроля",	РеквизитыДляКонтроля.Выгрузить(ОтборСтрок));
	Запрос.УстановитьПараметр("ТекущийНабор",			НаборСвойств);
	Запрос.УстановитьПараметр("ВидНоменклатуры",		Объект.Ссылка);
	
	Результаты = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
	
	ВыборкаПоСвойствам = Результаты[1].Выбрать();
	
	НаборыСвойств = Результаты[2].Выгрузить(); // ТаблицаЗначений
	НаборыСвойств.Индексы.Добавить("Свойство");
	
	Пока ВыборкаПоСвойствам.Следующий() Цикл
		
		СвойствоОбъект = ВыборкаПоСвойствам.Свойство.ПолучитьОбъект(); // ПланВидовХарактеристикОбъект.ДополнительныеРеквизитыИСведения
		
		Если ВыборкаПоСвойствам.ЭтоОбщийРеквизит Тогда
			
			ОтборСтрок = Новый Структура;
			ОтборСтрок.Вставить("ЗависимоеСвойство",	"ЗаполнятьОбязательно");
			ОтборСтрок.Вставить("НаборСвойств",			ОбщийНабор);
			ОтборСтрок.Вставить("Реквизит",				"ВидНоменклатуры");
			ОтборСтрок.Вставить("Значение",				Объект.Ссылка);
			
			НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
			
			Если ВыборкаПоСвойствам.ЗаполнятьОбязательно Тогда
				
				СвойствоОбъект.ЗаполнятьОбязательно = Истина;
				
				Если НайденныеСтроки.Количество() = 0 Тогда
					СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
					СтрокаТЧ.ЗависимоеСвойство	= "ЗаполнятьОбязательно";
					СтрокаТЧ.НаборСвойств		= ОбщийНабор;
					СтрокаТЧ.Реквизит			= "ВидНоменклатуры";
					СтрокаТЧ.Значение			= Объект.Ссылка;
				Иначе
					СтрокаТЧ = НайденныеСтроки[0];
				КонецЕсли;
				
				СтрокаТЧ.Условие = "ВСписке";
				
			Иначе
				
				Для Каждого СтрМас Из НайденныеСтроки Цикл
					СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
				КонецЦикла;
				
				ОтборСтрок = Новый Структура;
				ОтборСтрок.Вставить("ЗависимоеСвойство",	"ЗаполнятьОбязательно");
				ОтборСтрок.Вставить("НаборСвойств",			ОбщийНабор);
				ОтборСтрок.Вставить("Реквизит",				"ВидНоменклатуры");
				
				НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
				
				Если НайденныеСтроки.Количество() = 0 Тогда
					СвойствоОбъект.ЗаполнятьОбязательно = Ложь;
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			Если ВыборкаПоСвойствам.ЗаполнятьОбязательно Тогда
				
				Если Не СвойствоОбъект.ЗаполнятьОбязательно Тогда
					
					ОтборСтрок = Новый Структура;
					ОтборСтрок.Вставить("ЗависимоеСвойство",	"ЗаполнятьОбязательно");
					ОтборСтрок.Вставить("Реквизит",				"ВидНоменклатуры");
					
					НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
					
					Для Каждого СтрМас Из НайденныеСтроки Цикл
						СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
					КонецЦикла;
					
					ОтборСтрок = Новый Структура("Свойство", ВыборкаПоСвойствам.Свойство);
					НайденныеСтроки = НаборыСвойств.НайтиСтроки(ОтборСтрок);
					
					Для Каждого СтрТабл Из НайденныеСтроки Цикл
						Если СтрТабл.ВидНоменклатуры = Объект.Ссылка Тогда
							Продолжить;
						КонецЕсли;
						
						СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
						СтрокаТЧ.ЗависимоеСвойство	= "ЗаполнятьОбязательно";
						СтрокаТЧ.НаборСвойств		= СтрТабл.НаборСвойств;
						СтрокаТЧ.Реквизит			= "ВидНоменклатуры";
						СтрокаТЧ.Значение			= СтрТабл.ВидНоменклатуры;
						СтрокаТЧ.Условие			= "НеРавно";
					КонецЦикла;
					
					СвойствоОбъект.ЗаполнятьОбязательно = Истина;
					
				КонецЕсли;
				
				ОтборСтрок = Новый Структура;
				ОтборСтрок.Вставить("ЗависимоеСвойство",	"ЗаполнятьОбязательно");
				ОтборСтрок.Вставить("НаборСвойств",			НаборСвойств);
				ОтборСтрок.Вставить("Реквизит",				"ВидНоменклатуры");
				
				НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
				
				Если НайденныеСтроки.Количество() > 0 Тогда
					СтрокаТЧ = НайденныеСтроки[0];
				Иначе
					СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
				КонецЕсли;
				
				СтрокаТЧ.ЗависимоеСвойство	= "ЗаполнятьОбязательно";
				СтрокаТЧ.НаборСвойств		= НаборСвойств;
				СтрокаТЧ.Реквизит			= "ВидНоменклатуры";
				СтрокаТЧ.Значение			= Объект.Ссылка;
				СтрокаТЧ.Условие			= "Равно";
				
			Иначе
				
				ЕстьРеквизитГдеНаборИспользуется	= Ложь;
				СтрокаПоТекущемуНаборуУжеЕсть		= Ложь;
				
				Для Каждого СтрТабл Из СвойствоОбъект.ЗависимостиДополнительныхРеквизитов Цикл
					
					Если СтрТабл.ЗависимоеСвойство = "ЗаполнятьОбязательно"
						И СтрТабл.НаборСвойств <> НаборСвойств
						И СтрТабл.Реквизит = "ВидНоменклатуры"
						И СтрТабл.Условие = "Равно" Тогда
						
						ЕстьРеквизитГдеНаборИспользуется = Истина;
						
					ИначеЕсли СтрТабл.ЗависимоеСвойство = "ЗаполнятьОбязательно"
						И СтрТабл.НаборСвойств = НаборСвойств
						И СтрТабл.Реквизит = "ВидНоменклатуры" Тогда
						
						СтрокаПоТекущемуНаборуУжеЕсть = Истина;
						
						СтрТабл.Условие		= "НеРавно";
						СтрТабл.Значение	= Объект.Ссылка;
						
					КонецЕсли;
					
				КонецЦикла;
				
				Если Не ЕстьРеквизитГдеНаборИспользуется Тогда
					
					СвойствоОбъект.ЗаполнятьОбязательно = Ложь;
					
					ОтборСтрок = Новый Структура;
					ОтборСтрок.Вставить("ЗависимоеСвойство",	"ЗаполнятьОбязательно");
					ОтборСтрок.Вставить("Реквизит",				"ВидНоменклатуры");
					
					НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
					
					Для Каждого СтрМас Из НайденныеСтроки Цикл
						СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
					КонецЦикла;
					
				ИначеЕсли Не СтрокаПоТекущемуНаборуУжеЕсть Тогда
					
					СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
					СтрокаТЧ.ЗависимоеСвойство	= "ЗаполнятьОбязательно";
					СтрокаТЧ.НаборСвойств		= НаборСвойств;
					СтрокаТЧ.Реквизит			= "ВидНоменклатуры";
					СтрокаТЧ.Значение			= Объект.Ссылка;
					СтрокаТЧ.Условие			= "НеРавно";
					
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЕсли;
		
		СвойствоОбъект.Записать();
		
	КонецЦикла;
	
	ВыборкаПоСвойствам = Результаты[3].Выбрать();
	
	Пока ВыборкаПоСвойствам.Следующий() Цикл
		
		СвойствоОбъект = ВыборкаПоСвойствам.Свойство.ПолучитьОбъект(); // ПланВидовХарактеристикОбъект.ДополнительныеРеквизитыИСведения
		
		ЕстьРеквизитГдеНаборИспользуется = Ложь;
		
		Для Каждого СтрТабл Из СвойствоОбъект.ЗависимостиДополнительныхРеквизитов Цикл
			
			Если СтрТабл.ЗависимоеСвойство = "ЗаполнятьОбязательно"
				И СтрТабл.НаборСвойств <> НаборСвойств
				И СтрТабл.Реквизит = "ВидНоменклатуры"
				И СтрТабл.Условие = "Равно" Тогда
				
				ЕстьРеквизитГдеНаборИспользуется = Истина;
				
			КонецЕсли;
			
		КонецЦикла;
		
		Если Не ЕстьРеквизитГдеНаборИспользуется Тогда
			
			СвойствоОбъект.ЗаполнятьОбязательно = Ложь;
			
			ОтборСтрок = Новый Структура;
			ОтборСтрок.Вставить("ЗависимоеСвойство",	"ЗаполнятьОбязательно");
			ОтборСтрок.Вставить("Реквизит",				"ВидНоменклатуры");
			
			НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
			
			Для Каждого СтрМас Из НайденныеСтроки Цикл
				СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
			КонецЦикла;
			
		Иначе
			
			СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
			СтрокаТЧ.ЗависимоеСвойство	= "ЗаполнятьОбязательно";
			СтрокаТЧ.НаборСвойств		= НаборСвойств;
			СтрокаТЧ.Реквизит			= "ВидНоменклатуры";
			СтрокаТЧ.Значение			= Объект.Ссылка;
			СтрокаТЧ.Условие			= "НеРавно";
			
		КонецЕсли;
		
		СвойствоОбъект.Записать();
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "ПодборРеквизитовВТаблицуОтбора" Тогда
		
		// При подборе элемента в таблицу реквизитов отбора номенклатуры или характеристик.
		Отбор = Новый Структура("ИмяРеквизита, ЭтоДопРеквизит, Свойство");
		
		Если ТекущийТипВладельцаНабораЭлементов = "Номенклатура" Тогда
			
			ТЧРеквизитовОтбора = Объект.РеквизитыБыстрогоОтбораНоменклатуры;
			
		ИначеЕсли ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			
			ТЧРеквизитовОтбора = Объект.РеквизитыБыстрогоОтбораХарактеристик;
			
		КонецЕсли;
		
		Для каждого ПараметрыСтроки Из Параметр.МассивДобавляемых Цикл
			
			ЗаполнитьЗначенияСвойств(Отбор, ПараметрыСтроки);
			
			РеквизитНеНайден = (ТЧРеквизитовОтбора.НайтиСтроки(Отбор).Количество() = 0);
			
			Если РеквизитНеНайден Тогда
				
				НоваяСтрока = ТЧРеквизитовОтбора.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрыСтроки);
				
			КонецЕсли;
			
		КонецЦикла;
		
		Модифицированность = Истина;
		
	ИначеЕсли ИмяСобытия = "ПодборРеквизитовВТаблицуКлючаЦен" Тогда
		
		// При подборе элемента в таблицу реквизитов отбора номенклатуры или характеристик.
		Отбор = Новый Структура("ИмяРеквизита, ЭтоДопРеквизит, Свойство");
		
		Если ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			
			ТЧРеквизитовКлючаЦен = Объект.РеквизитыХарактеристикДляКлючаЦен;
			
		ИначеЕсли ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			
			ТЧРеквизитовКлючаЦен = Объект.РеквизитыСерийДляКлючаЦен;
			
		КонецЕсли;
		
		Для каждого ПараметрыСтроки Из Параметр.МассивДобавляемых Цикл
			
			ЗаполнитьЗначенияСвойств(Отбор, ПараметрыСтроки);
			
			НайденныеСтроки = ТЧРеквизитовКлючаЦен.НайтиСтроки(Отбор);
			
			Если НайденныеСтроки.Количество() = 0 И ПараметрыСтроки.Используется Тогда
				
				НоваяСтрока = ТЧРеквизитовКлючаЦен.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрыСтроки);
			
			ИначеЕсли НЕ ПараметрыСтроки.Используется Тогда 
				
				Для Каждого Строка Из НайденныеСтроки Цикл
					
					ТЧРеквизитовКлючаЦен.Удалить(Строка);
					
				КонецЦикла;
				
			КонецЕсли;
			
		КонецЦикла;
		
		ТЧРеквизитовКлючаЦен.Сортировать("ЭтоДопРеквизит, ПредставлениеРеквизита");
		
		Если ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			
			СформироватьНадписьРазрезаЦенообразования("Характеристики");
			
		ИначеЕсли ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			
			СформироватьНадписьРазрезаЦенообразования("Серии");
			
		КонецЕсли;
		
		ОбновитьРазрезыЦенообразования();
		
		Модифицированность = Истина;
		
	ИначеЕсли ИмяСобытия = "Запись_НаборыДополнительныхРеквизитовИСведений"
		Или ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда
		
		// При записи набора доп.реквизитов (сведений), например: 
		// открыли форму редактирования общих доп.реквизитов (сведений) и записали его.
		ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере();
		
	ИначеЕсли ИмяСобытия = "Свойства_УстановленаЗависимостьРеквизита" Тогда
		
		Если ЗначениеЗаполнено(РедактируемоеСвойствоВидНастройки) Тогда
			ЗаписатьНастройкиСвойства(Параметр);
		КонецЕсли;
		
	ИначеЕсли ИмяСобытия = "Запись_ВидыНоменклатуры" Тогда
		
		Если НЕ Источник.УникальныйИдентификатор = УникальныйИдентификатор Тогда
			Прочитать();
		КонецЕсли;
		
	// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	ИначеЕсли ИмяСобытия = РаботаСНоменклатуройКлиент.ОписаниеОповещенийПодсистемы().ЗагрузкаКатегорий Тогда
		Если Не Модифицированность Тогда
			ПерезаполнитьИдентификаторыКатегорий();
		КонецЕсли;
	// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой	
		
	КонецЕсли;
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом

	ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
	
	// подсистема запрета редактирования ключевых реквизитов объектов	
	ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
	
	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);

КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	ТекстСообщенияНеЗаполненаПолитика = НСтр("ru = 'Не заполнена колонка ""Политика учета серий"" для склада ""%1"" списка ""Политики учета серий"".'");
	ТекстСообщенияНеЗаполненСклад = НСтр("ru = 'Не заполнена колонка ""Склад"" в списке ""Политики учета серий"".'");
	ТекстСообщенияШаблонНаименования = НСтр("ru = 'В шаблоне для %1 нельзя использовать поле ""%2"", необходимо исправить шаблон.'");
	
	ОшибкиЗаполнения = Неопределено;
	Для ИндексСтроки = 0 По Объект.ПолитикиУчетаСерий.Количество() - 1 Цикл
		
		Строка = Объект.ПолитикиУчетаСерий[ИндексСтроки];
		
		Если Не Строка.СоответствуетПолитикеПоУмолчанию
			И Не ЗначениеЗаполнено(Строка.Склад) Тогда
			ТекстСообщения = ТекстСообщенияНеЗаполненСклад;
			ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
				"Объект.ПолитикиУчетаСерий[%1].Склад",
				ТекстСообщения,
				,
				,
				,
				ИндексСтроки);
		ИначеЕсли Не Строка.СоответствуетПолитикеПоУмолчанию
			И Не ЗначениеЗаполнено(Строка.ПолитикаУчетаСерий) Тогда
			ТекстСообщения = СтрШаблон(ТекстСообщенияНеЗаполненаПолитика, Строка.Склад);
			ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
				"Объект.ПолитикиУчетаСерий[%1].ПолитикаУчетаСерий",
				ТекстСообщения,
				,
				,
				,
				ИндексСтроки);
		КонецЕсли;
		
	КонецЦикла;

	НаименованиеДляПроверки = "Наименование";
	Если СтрНайти(Объект.ШаблонРабочегоНаименованияНоменклатуры, "["+НаименованиеДляПроверки+"]") > 0
		И Объект.ЗапретРедактированияРабочегоНаименованияНоменклатуры Тогда
		ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования, 
			"рабочего наименования номенклатуры", НаименованиеДляПроверки);
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
			"Объект.ШаблонРабочегоНаименованияНоменклатуры",
			ТекстСообщения);
	КонецЕсли;
	
	НаименованиеДляПроверки = "НаименованиеПолное";
	Если СтрНайти(Объект.ШаблонНаименованияДляПечатиНоменклатуры, "["+НаименованиеДляПроверки+"]") > 0
		И Объект.ЗапретРедактированияНаименованияДляПечатиНоменклатуры Тогда
		ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования, 
			"наименования для печати номенклатуры", НаименованиеДляПроверки);
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
			"Объект.ШаблонНаименованияДляПечатиНоменклатуры",
			ТекстСообщения);
	КонецЕсли;
	
	НаименованиеДляПроверки = "Наименование";
	Если СтрНайти(Объект.ШаблонРабочегоНаименованияХарактеристики, "["+НаименованиеДляПроверки+"]") > 0
		И Объект.ЗапретРедактированияРабочегоНаименованияХарактеристики Тогда
		ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования, 
			"рабочего наименования характеристики", НаименованиеДляПроверки);
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
			"Объект.ШаблонРабочегоНаименованияХарактеристики",
			ТекстСообщения);
	КонецЕсли;
	
	НаименованиеДляПроверки = "НаименованиеПолное";
	Если СтрНайти(Объект.ШаблонНаименованияДляПечатиХарактеристики, "["+НаименованиеДляПроверки+"]") > 0
		И Объект.ЗапретРедактированияНаименованияДляПечатиХарактеристики Тогда
		ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования, 
			"наименования для печати характеристики", НаименованиеДляПроверки);
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
			"Объект.ШаблонНаименованияДляПечатиХарактеристики",
			ТекстСообщения);
	КонецЕсли;
	
	Если ИспользуетсяЦенообразование25 
		И Не ЗначениеЗаполнено(Объект.НастройкиКлючаЦенПоХарактеристике) Тогда
		ТекстСообщения = НСтр("ru = 'Не выбран вариант настройки разрезов ведения цен по характеристикам.'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
			"Объект.НастройкиКлючаЦенПоХарактеристике",
			ТекстСообщения);
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(ОшибкиЗаполнения, Отказ);
	
	ОбработкаПроверкиЗаполненияНаСервереЛокализация(Отказ, ПроверяемыеРеквизиты);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура НастроитьФормуКлиент(Элемент)
	НастроитьФорму();	
КонецПроцедуры

&НаКлиенте
Процедура ТипНоменклатурыПриИзменении(Элемент) Экспорт
	
	ТипНоменклатурыПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ОсобенностьУчетаПриИзменении(Элемент)
	
	ТипНоменклатурыПриИзмененииСервер();

КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьХарактеристикиПриИзменении(Элемент)
	
	ИспользоватьХарактеристикиПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ИспользованиеХарактеристикПриИзменении(Элемент)
	
	Если Объект.ИспользованиеХарактеристик = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры") Тогда
		ВыбратьВидВладелец("Характеристик");
	Иначе
		Объект.ВладелецХарактеристик = Неопределено;
		УстановитьРеквизитыЦенообразования();
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура НастройкаТоварныхКатегорийПриИзменении(Элемент)
	Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры = 
		НастройкаТоварныхКатегорий = "ОбщиеСДругимВидомНоменклатуры";
	
	Если Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
		ВыбратьВидВладелец("ТоварныхКатегорий");
	Иначе
		Объект.ВладелецТоварныхКатегорий = Неопределено;
		НастроитьФорму();
	КонецЕсли;	
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьСерииПриИзменении(Элемент)
	
	ИспользоватьСерииПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ЕдиницаИзмеренияПриИзменении(Элемент)
	ЕдиницаИзмеренияПриИзмененииСервер();
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьУпаковкиПриИзменении(Элемент)
	
	Если Не Объект.ИспользоватьУпаковки Тогда
		Объект.НаборУпаковок = Неопределено;
		ИспользованиеУпаковок = "";
	Иначе
		Объект.ПоставляетсяВМногооборотнойТаре  = Ложь;
		Объект.НоменклатураМногооборотнаяТара   = Неопределено;
		Объект.ХарактеристикаМногооборотнаяТара = Неопределено;
		ИспользованиеУпаковок = "ОбщийНабор";
	КонецЕсли;
	
	ИспользоватьУпаковкиПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура НаборУпаковокПриИзменении(Элемент)
	
	НаборУпаковокПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПоставляетсяВМногооборотнойТареПриИзменении(Элемент)
	
	Если Не Объект.ПоставляетсяВМногооборотнойТаре Тогда
		Объект.НоменклатураМногооборотнаяТара   = Неопределено;
		Объект.ХарактеристикаМногооборотнаяТара = Неопределено;
	КонецЕсли;
	
	НастроитьФорму();
КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере()
	
	Если НЕ Модифицированность Тогда
		Прочитать();
	Иначе
		Если ТекущийТипВладельцаНабораЭлементов = "Номенклатура"
			Или ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры"
			Или ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			
			// Если редактируется состав набора общих дополнительных сведений,
			// то изменять состав реквизитов для контроля и отбора не нужно.
			Если ТекущийТипЭлемента <> "ДопСведение" Тогда
				Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(Объект, ТекущийТипВладельцаНабораЭлементов);
			КонецЕсли;
			
		КонецЕсли;
		
		ЗаполнитьСпискиДопРеквизитовСведений();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВариантЗаданияНастроекСерийПриИзменении(Элемент)
	Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры 
		= ВариантЗаданияНастроекСерий = "ИспользуютсяТакжеКакВДругомВидеНоменклатуры";
	Если Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
		ВыбратьВидВладелец("Серий");
		Объект.ПолитикиУчетаСерий.Очистить();
	Иначе
		Объект.ВладелецСерий = Неопределено;
		УстановитьРеквизитыЦенообразования();
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецХарактеристикОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, "Характеристик", СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ВладелецСерийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, "Серий", СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ВладелецТоварныхКатегорийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, "ТоварныхКатегорий", СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ИспользованиеУпаковокПриИзменении(Элемент)
	Если ИспользованиеУпаковок = "ИндивидуальныйНабор" Тогда
		Объект.НаборУпаковок = ПредопределенноеЗначение("Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры");
	Иначе
		Объект.НаборУпаковок = ПредопределенноеЗначение("Справочник.НаборыУпаковок.ПустаяСсылка");
	КонецЕсли;
	
	НастроитьФорму();
КонецПроцедуры

&НаКлиенте
Процедура ПолитикаУчетаСерийПриИзменении(Элемент)
	
	Если Не ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий Тогда
		УстановитьПолитикуУчетаСерийПоУмолчанию();
	КонецЕсли;
	
	ДействиеПриИзмененииПолитикУчетаСерий();
	
КонецПроцедуры

&НаКлиенте
Процедура ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзменении(Элемент)
	
	Если ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий
		И Не ЗначениеЗаполнено(Объект.ПолитикаУчетаСерий) Тогда
		Объект.ПолитикаУчетаСерий = ПредопределенноеЗначение("Справочник.ПолитикиУчетаСерий.СерииНеИспользуются");
	КонецЕсли;
	
	Если Объект.ПолитикиУчетаСерий.Количество() > 0
		И Не ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий Тогда
		
		ВТЧУказываютсяСкладыИПодразделения = ИспользоватьНесколькоСкладов И ИспользоватьПроизводство;
	
		Если ВТЧУказываютсяСкладыИПодразделения Тогда 
			ТекстВопроса = Нстр("ru = 'Для всех складов и производственных подразделений будет установлена общая политика учета серий.'");
		ИначеЕсли ИспользоватьНесколькоСкладов Тогда
			ТекстВопроса = Нстр("ru = 'Для всех складов будет установлена общая политика учета серий.'");
		Иначе
			ТекстВопроса = Нстр("ru = 'Для всех производственных подразделений будет установлена общая политика учета серий.'");
		КонецЕсли;
		
		ПоказатьВопрос(
			Новый ОписаниеОповещения("ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииЗавершение", ЭтотОбъект),
			ТекстВопроса,
			РежимДиалогаВопрос.ДаНет);
		Возврат;
	КонецЕсли;
	
	НастроитьФорму();
	ОбновитьПредупреждениеПоСкладуКлиент();
	
КонецПроцедуры

&НаКлиенте
Процедура НастройкаИспользованияСерийПриИзменении(Элемент)
	
	Если Объект.ПолитикиУчетаСерий.Количество() > 0 Тогда
		
		ПараметрыВлияющиеНаОтборПолитикУказанияСерийСтали = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
		ЗаполнитьЗначенияСвойств(ПараметрыВлияющиеНаОтборПолитикУказанияСерийСтали, Объект);
		
		Если Не ОбщегоНазначенияУТКлиентСервер.СтруктурыРавны(ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзменения,
				ПараметрыВлияющиеНаОтборПолитикУказанияСерийСтали) Тогда
			ТекстВопроса = НСтр("ru = 'Изменились параметры, влияющие на возможность выбора политик указания серий.
										|Политики, которые не удовлетворяют новым параметрам будут удалены. Продолжить?'");
			ПоказатьВопрос(Новый ОписаниеОповещения("НастройкаИспользованияСерийПриИзмененииЗавершение", ЭтотОбъект),
							ТекстВопроса,
							РежимДиалогаВопрос.ДаНет,
							,
							КодВозвратаДиалога.Да);
        	Возврат;
		КонецЕсли;
		
	КонецЕсли;
	
	НастройкаИспользованияСерийПриИзмененииФрагмент(Истина);
КонецПроцедуры

&НаКлиенте
Процедура НастройкаИспользованияСерийПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    Ответ = РезультатВопроса;
    
	НастройкаИспользованияСерийПриИзмененииФрагмент(Ответ = КодВозвратаДиалога.Да);

КонецПроцедуры

&НаСервере
Процедура НастройкаИспользованияСерийПриИзмененииФрагмент(ПрименитьИзменения)
	
	Если Не ПрименитьИзменения Тогда
		ЗаполнитьЗначенияСвойств(Объект, ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзменения);
	КонецЕсли;
	
	Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(Объект);
	ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
	НастроитьФорму();

КонецПроцедуры

&НаКлиенте
Процедура КодТНВЭДПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Объект.КодТНВЭД) Тогда
		КодТНВЭДПриИзмененииСервер();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НастройкаВидимостиФормыПриИзменении(Элемент)
	
	СвернутьРазвернутьВсеГруппы(ЭтотОбъект);
		
КонецПроцедуры

&НаКлиенте
Процедура КодОКВЭД2НачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
	
	//++ Локализация
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаЗакрытия = Новый ОписаниеОповещения(
		"ПодборИзОКВЭДЗавершение",
		ЭтотОбъект);
	
	ПараметрыФормы = КлассификаторОКВЭДКлиент.НовыйПараметрыВыбора();
	ПараметрыФормы.ОписаниеОповещенияОЗакрытии = ОбработкаЗакрытия;
	ПараметрыФормы.Разрешенные = Истина;
	ПараметрыФормы.ТекущийКод = Объект.КодОКВЭД2;
	
	КлассификаторОКВЭДКлиент.Выбрать(ПараметрыФормы);
	
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура КодОКВЭД2АвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	//++ Локализация
	
	Если ЗначениеЗаполнено(Текст) Тогда
		
		СтандартнаяОбработка = Ложь;
		ДанныеПодбора = ПодборОКВЭДСервер(Текст);
		
		ДанныеВыбора = Новый СписокЗначений;
		
		Для Каждого ОКВЭД Из ДанныеПодбора Цикл
			ДанныеВыбора.Добавить(ОКВЭД.Код, ОКВЭД.Представление);
		КонецЦикла;
	
	КонецЕсли;
	
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура КодОКВЭД2ПриИзменении(Элемент)
	
	//++ Локализация
	
	НаименованиеОКВЭД2 = НаименованиеОКВЭД2(Объект.КодОКВЭД2);
	
	//-- Локализация
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыПолитикиУчетаСерий

&НаКлиенте
Процедура ПолитикиУчетаСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Поле.Имя = "ПолитикиУчетаСерийСклад" 
		И (Элементы.ПолитикиУчетаСерий.ТолькоПросмотр
			Или ТолькоПросмотр) Тогда
			
		СтандартнаяОбработка = Ложь;
		ПоказатьЗначение(, ТекущиеДанные.Склад);
		
	ИначеЕсли Поле.Имя = "ПолитикиУчетаСерийПолитикаУчетаСерий" 
		И (Элементы.ПолитикиУчетаСерий.ТолькоПросмотр
			Или ТолькоПросмотр) Тогда
			
		СтандартнаяОбработка = Ложь;
		ПоказатьЗначение(, ТекущиеДанные.ПолитикаУчетаСерий);
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ПолитикиУчетаСерийПриАктивизацииСтроки(Элемент)
	Если Элементы.ПолитикиУчетаСерий.ТекущиеДанные <> Неопределено
		И ЗначениеЗаполнено(Элементы.ПолитикиУчетаСерий.ТекущиеДанные.Склад) Тогда 
		ПодключитьОбработчикОжидания("ОбновитьПредупреждениеПоСкладуКлиент", 0.1, Истина);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПолитикиУчетаСерийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Если Копирование Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПолитикиУчетаСерийСкладПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
	
	Если ЗначениеЗаполнено(ТекущиеДанные.Склад) Тогда
		ТекущиеДанные.ЭтоПолитикаДляСклада = Не ЗначениеЗаполнено(ТекущиеДанные.Склад)
											 Или ТипЗнч(ТекущиеДанные.Склад) = Тип("СправочникСсылка.Склады");
		
		ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(ТекущиеДанные.Склад, ТекущиеДанные.ПолитикаУчетаСерий);
	КонецЕсли;
	ОбновитьПредупреждениеПоСкладуКлиент();
	
КонецПроцедуры

&НаКлиенте
Процедура ПолитикиУчетаСерийПередУдалением(Элемент, Отказ)
	
	Отказ = Истина;
	
	ПолитикиУчетаСерийПередУдалениемНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ПолитикиУчетаСерийПередУдалениемНаСервере()
	
	ИдентификаторыВыделенныхСтрок = Элементы.ПолитикиУчетаСерий.ВыделенныеСтроки;
	
	Если ИдентификаторыВыделенныхСтрок.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого ИдСтроки Из ИдентификаторыВыделенныхСтрок Цикл
		Строка = Объект.ПолитикиУчетаСерий.НайтиПоИдентификатору(ИдСтроки);
		Если ЗначениеЗаполнено(Строка.Склад) Тогда
			СтруктураОтбора = Новый Структура();
			СтруктураОтбора.Вставить("Склад", Строка.Склад);
			
			НайденныеСтроки = Объект.ПолитикиУчетаСерий.НайтиСтроки(СтруктураОтбора);
			
			Если НайденныеСтроки.Количество() > 1 Тогда
				// Удалить строку если есть несколько строк по текущему складу
				Объект.ПолитикиУчетаСерий.Удалить(Строка);
			Иначе
				// Скрыть строку если это единственная строка по складу
				Строка.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий;
			КонецЕсли;
		Иначе
			Объект.ПолитикиУчетаСерий.Удалить(Строка);
		КонецЕсли;
	КонецЦикла;
	
	ДействиеПриИзмененииПолитикУчетаСерий();
	
КонецПроцедуры

&НаКлиенте
Процедура ПолитикиУчетаСерийПолитикаУчетаСерийПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
	
	Если ЗначениеЗаполнено(ТекущиеДанные.Склад) Тогда
		ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(ТекущиеДанные.Склад, ТекущиеДанные.ПолитикаУчетаСерий)
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПолитикиУчетаСерийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	УдалитьПустыеСтрокиПолитикУчетаСерий();
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопРеквизитовНоменклатуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовНоменклатурыПриИзменении(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовНоменклатурыПриАктивизацииСтроки(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовНоменклатурыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопРеквизит", "Номенклатура", Элемент.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовНоменклатурыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопРеквизит", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовНоменклатурыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопРеквизит", "Номенклатура");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопРеквизитовХарактеристик

&НаКлиенте
Процедура ТаблицаДопРеквизитовХарактеристикПриИзменении(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовХарактеристикПриАктивизацииСтроки(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовХарактеристикПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовХарактеристикВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопРеквизит", "ХарактеристикиНоменклатуры", Элемент.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовХарактеристикОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопРеквизит", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовХарактеристикНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопРеквизит", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопРеквизитовСерий

&НаКлиенте
Процедура ТаблицаДопРеквизитовСерийПриИзменении(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовСерийПриАктивизацииСтроки(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовСерийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопРеквизит", "СерииНоменклатуры", Элемент.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовСерийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопРеквизит", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопРеквизитовСерийНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопРеквизит", "СерииНоменклатуры");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопСведенийНоменклатуры

&НаКлиенте
Процедура ТаблицаДопСведенийНоменклатурыПриИзменении(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийНоменклатурыПриАктивизацииСтроки(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийНоменклатурыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопСведение", "Номенклатура", Элемент.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийНоменклатурыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопСведение", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийНоменклатурыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопСведение", "Номенклатура");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопСведенийХарактеристик

&НаКлиенте
Процедура ТаблицаДопСведенийХарактеристикПриИзменении(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийХарактеристикПриАктивизацииСтроки(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийХарактеристикПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийХарактеристикВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопСведение", "ХарактеристикиНоменклатуры", Элемент.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийХарактеристикОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопСведение", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийХарактеристикНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопСведение", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопСведенийСерий

&НаКлиенте
Процедура ТаблицаДопСведенийСерийПриИзменении(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийСерийПриАктивизацииСтроки(Элемент)
	
	УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийСерийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопСведение", "СерииНоменклатуры", Элемент.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийСерийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопСведение", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДопСведенийСерийНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопСведение", "СерииНоменклатуры");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыДляКонтроляНоменклатуры

&НаКлиенте
Процедура РеквизитыДляКонтроляНоменклатурыУникаленПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.РеквизитыДляКонтроляНоменклатуры.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ТекущиеДанные.ЭтоДопРеквизит И Модифицированность Тогда
		Записать();
	КонецЕсли;
	
	ИдентификаторСтрокиТаблицы = ТекущиеДанные.ПолучитьИдентификатор();
	
	ПриИзмененииФлагаУникален("Номенклатура", ИдентификаторСтрокиТаблицы);
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииФлагаУникален(ВладелецРеквизитов, ИдентификаторСтрокиТаблицы); 
	Справочники.ВидыНоменклатуры.ПриИзмененииФлагаУникален(Объект, "Номенклатура", ИдентификаторСтрокиТаблицы);
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыДляКонтроляНоменклатурыЗаполнятьОбязательноПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.РеквизитыДляКонтроляНоменклатуры.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТекущиеДанные.ДоступностьОтображатьПриСоздании = Не ТекущиеДанные.ЗаполнятьОбязательно;
	
	Если ТекущиеДанные.ЗаполнятьОбязательно Тогда
		ТекущиеДанные.ОтображатьПриСоздании = Истина;
	КонецЕсли;
	
	ИдентификаторСтрокиТаблицы = ТекущиеДанные.ПолучитьИдентификатор();
	
	ПриИзмененииФлагаЗаполнятьОбязательно("Номенклатура", ИдентификаторСтрокиТаблицы);
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыДляКонтроляНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	РеквизитыДляКонтроляВыбор("Номенклатуры", Поле, СтандартнаяОбработка);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыДляКонтроляХарактеристик

&НаКлиенте
Процедура РеквизитыДляКонтроляХарактеристикУникаленПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.РеквизитыДляКонтроляХарактеристик.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ИдентификаторСтрокиТаблицы = ТекущиеДанные.ПолучитьИдентификатор();
	
	ПриИзмененииФлагаУникален("ХарактеристикиНоменклатуры", ИдентификаторСтрокиТаблицы);
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыДляКонтроляХарактеристикЗаполнятьОбязательноПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.РеквизитыДляКонтроляХарактеристик.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТекущиеДанные.ДоступностьОтображатьПриСоздании = Не ТекущиеДанные.ЗаполнятьОбязательно;
	
	Если ТекущиеДанные.ЗаполнятьОбязательно Тогда
		ТекущиеДанные.ОтображатьПриСоздании = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыДляКонтроляХарактеристикВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	РеквизитыДляКонтроляВыбор("Характеристик", Поле, СтандартнаяОбработка);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыДляКонтроляСерий

&НаКлиенте
Процедура РеквизитыДляКонтроляСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	РеквизитыДляКонтроляВыбор("Серий", Поле, СтандартнаяОбработка);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыБыстрогоОтбораНоменклатуры

&НаКлиенте
Процедура РеквизитыБыстрогоОтбораНоменклатурыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	Если Модифицированность Тогда
		ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатуры()
	Иначе
		ИзменитьПанельБыстрогоОтбораНоменклатуры();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыБыстрогоОтбораХарактеристик

&НаКлиенте
Процедура РеквизитыБыстрогоОтбораХарактеристикПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	Если Модифицированность
		Или Не ЗначениеЗаполнено(Объект.НаборСвойствХарактеристик) Тогда
		ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристики()
	Иначе
		ИзменитьПанельБыстрогоОтбораХарактеристики();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
	 РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры 

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры 

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Процедура ВключитьПроверкуЗаполненияДляРеквизитов(Команда)
	
	ОчиститьСообщения();
	ВключитьПроверкуЗаполненияДляРеквизитовНаСервере();	
	
КонецПроцедуры

&НаКлиенте
Процедура РедактироватьШаблонРабочегоНаименованияНоменклатуры(Команда)
	ИзменениеВРедактореШаблона("ШаблонРабочегоНаименованияНоменклатуры");
КонецПроцедуры

&НаКлиенте
Процедура РедактироватьШаблонРабочегоНаименованияСерии(Команда)
	
	ИзменениеВРедактореШаблона("ШаблонРабочегоНаименованияСерии");
	
КонецПроцедуры

&НаКлиенте
Процедура РедактироватьШаблонНаименованияДляПечатиНоменклатуры(Команда)
	
	ИзменениеВРедактореШаблона("ШаблонНаименованияДляПечатиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура РедактироватьШаблонРабочегоНаименованияХарактеристики(Команда)
	
	ИзменениеВРедактореШаблона("ШаблонРабочегоНаименованияХарактеристики");
	
КонецПроцедуры

&НаКлиенте
Процедура РедактироватьШаблонНаименованияДляПечатиХарактеристики(Команда)
	
	ИзменениеВРедактореШаблона("ШаблонНаименованияДляПечатиХарактеристики");
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьСкладВПолитикиУчетаСерий(Команда)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьСкладВПолитикиУчетаСерийЗавершение", ЭтотОбъект);
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("РежимВыбора", Истина);
	ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
	ОткрытьФорму("Справочник.Склады.ФормаВыбора", ПараметрыФормы, Элементы.ПолитикиУчетаСерийСклад,,,,ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьПодразделениеВПолитикиУчетаСерий(Команда)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьПодразделениеВПолитикиУчетаСерийЗавершение", ЭтотОбъект);
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("РежимВыбора", Истина);
	
	ПараметрыОтбора = Новый Структура("ПроизводственноеПодразделение", Истина);
	ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
	
	ОткрытьФорму("Справочник.СтруктураПредприятия.ФормаВыбора", ПараметрыФормы, Элементы.ПолитикиУчетаСерийСклад,,,,ОписаниеОповещения);
	
КонецПроцедуры

#Область КомандыДопРеквизитовИСведений

&НаКлиенте
Процедура СоздатьНовыйРеквизитНоменклатуры(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбщийРеквизитНоменклатуры(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура", "Общее");
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПоОбразцуРеквизитНоменклатуры(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура", "ПоОбразцу");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьНовыйРеквизитХарактеристики(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбщийРеквизитХарактеристики(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры", "Общее");
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПоОбразцуРеквизитХарактеристики(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры", "ПоОбразцу");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьНовыйРеквизитСерии(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбщийРеквизитСерии(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры", "Общее");
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПоОбразцуРеквизитСерии(Команда)
	
	ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры", "ПоОбразцу");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьНовоеСведениеНоменклатуры(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбщееСведениеНоменклатуры(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура", "Общее");
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПоОбразцуСведениеНоменклатуры(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура", "ПоОбразцу");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьНовоеСведениеХарактеристики(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбщееСведениеХарактеристики(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры", "Общее");
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПоОбразцуСведениеХарактеристики(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры", "ПоОбразцу");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьНовоеСведениеСерии(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбщееСведениеСерии(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры", "Общее");
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПоОбразцуСведениеСерии(Команда)
	
	ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры", "ПоОбразцу");
	
КонецПроцедуры

#КонецОбласти

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
	
КонецПроцедуры

#Область ПроцедурыИФункцииДляРедактированияТаблицДопРеквизитовСведений

&НаКлиенте
Функция КомандыРедактированияДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	СтруктураКоманд = Новый Структура;
	СтруктураКоманд.Вставить("Удалить");
	СтруктураКоманд.Вставить("ПереместитьВверх");
	СтруктураКоманд.Вставить("ПереместитьВниз");
	
	СтруктураКоманд.Вставить("КонтекстноеМенюУдалить");
	СтруктураКоманд.Вставить("КонтекстноеМенюПереместитьВверх");
	СтруктураКоманд.Вставить("КонтекстноеМенюПереместитьВниз");
	
	ИмяТаблицыДопРеквизитовСведений = ИмяТаблицыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
	
	СтруктураКоманд.Удалить                         = ИмяТаблицыДопРеквизитовСведений + "Удалить";
	СтруктураКоманд.ПереместитьВверх                = ИмяТаблицыДопРеквизитовСведений + "ПереместитьВверх";
	СтруктураКоманд.ПереместитьВниз                 = ИмяТаблицыДопРеквизитовСведений + "ПереместитьВниз";
	
	СтруктураКоманд.КонтекстноеМенюУдалить          = ИмяТаблицыДопРеквизитовСведений + "КонтекстноеМенюУдалить";
	СтруктураКоманд.КонтекстноеМенюПереместитьВверх = ИмяТаблицыДопРеквизитовСведений + "КонтекстноеМенюПереместитьВверх";
	СтруктураКоманд.КонтекстноеМенюПереместитьВниз  = ИмяТаблицыДопРеквизитовСведений + "КонтекстноеМенюПереместитьВниз";
	
	Возврат СтруктураКоманд;
	
КонецФункции

&НаКлиенте
Функция ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	Если ТипЭлемента = "ДопРеквизит" Тогда
		Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
			Возврат Элементы.ТаблицаДопРеквизитовНоменклатуры;
		ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			Возврат Элементы.ТаблицаДопРеквизитовХарактеристик;
		ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			Возврат Элементы.ТаблицаДопРеквизитовСерий;
		КонецЕсли;
	ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
		Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
			Возврат Элементы.ТаблицаДопСведенийНоменклатуры;
		ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			Возврат Элементы.ТаблицаДопСведенийХарактеристик;
		ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			Возврат Элементы.ТаблицаДопСведенийСерий;
		КонецЕсли;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ТаблицаДопРеквизитов(Форма, ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	Если ТипЭлемента = "ДопРеквизит" Тогда
		
		Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
			Возврат Форма.ТаблицаДопРеквизитовНоменклатуры;
		ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			Возврат Форма.ТаблицаДопРеквизитовХарактеристик;
		ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			Возврат Форма.ТаблицаДопРеквизитовСерий;
		КонецЕсли;
		
	ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
		
		Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
			Возврат Форма.ТаблицаДопСведенийНоменклатуры;
		ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			Возврат Форма.ТаблицаДопСведенийХарактеристик;
		ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			Возврат Форма.ТаблицаДопСведенийСерий;
		КонецЕсли;
		
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяТаблицыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	Если ТипЭлемента = "ДопРеквизит" Тогда
		
		Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
			Возврат "ТаблицаДопРеквизитовНоменклатуры";
		ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			Возврат "ТаблицаДопРеквизитовХарактеристик";
		ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			Возврат "ТаблицаДопРеквизитовСерий";
		КонецЕсли;
		
	ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
		
		Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
			Возврат "ТаблицаДопСведенийНоменклатуры";
		ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
			Возврат "ТаблицаДопСведенийХарактеристик";
		ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
			Возврат "ТаблицаДопСведенийСерий";
		КонецЕсли;
		
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция НаборДопРеквизитовСведенийОбъекта(Объект, ТипВладельцаНабораЭлементов)
	
	Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
		Возврат Объект.НаборСвойств;
	ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
		Возврат Объект.НаборСвойствХарактеристик;
	ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
		Возврат Объект.НаборСвойствСерий;
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаСервереБезКонтекста
Функция НаборДопРеквизитовСведенийОбщий(ТипВладельцаНабораЭлементов)
	
	Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
		НаборДопРеквизитовСведений = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
	ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
		НаборДопРеквизитовСведений = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
	ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
		НаборДопРеквизитовСведений = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
	Иначе
		НаборДопРеквизитовСведений = Неопределено;
	КонецЕсли;
	
	Возврат НаборДопРеквизитовСведений;
	
КонецФункции

&НаКлиенте
Процедура ДобавитьДопРеквизитСведение(ТипЭлемента, ТипВладельцаНабораЭлементов, Вид = "")
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		
		ТекстВопроса = Нстр("ru = 'Данные еще не записаны.
		|Добавление дополнительных свойств возможно только после записи элемента.
		|Записать элемент?'");
		
		ПоказатьВопрос(Новый ОписаниеОповещения("ДобавитьДопРеквизитСведениеЗавершение", ЭтотОбъект, Новый Структура("Вид, ТипВладельцаНабораЭлементов, ТипЭлемента", Вид, ТипВладельцаНабораЭлементов, ТипЭлемента)), ТекстВопроса, РежимДиалогаВопрос.ДаНет);
		Возврат;
		
	КонецЕсли;
	
	ДобавитьДопРеквизитСведениеФрагмент(Вид, ТипВладельцаНабораЭлементов, ТипЭлемента);
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьДопРеквизитСведениеФрагмент(Знач Вид, Знач ТипВладельцаНабораЭлементов, Знач ТипЭлемента)
    
    Перем НаборДопРеквизитовСведений, ПараметрыФормы;
    
    ТекущийТипВладельцаНабораЭлементов = ТипВладельцаНабораЭлементов;
    ТекущийТипЭлемента = ТипЭлемента;
    
    НаборДопРеквизитовСведений = НаборДопРеквизитовСведенийОбъекта(Объект, ТипВладельцаНабораЭлементов);
    Если НЕ ЗначениеЗаполнено(НаборДопРеквизитовСведений) Тогда
        Возврат;
	КонецЕсли;
	
	ВерсияДанныхТекущегоНабора = ПолучитьВерсиюДанныхНабора(НаборДопРеквизитовСведений);
	
	ПараметрыФормы = Новый Структура;
	
	Если Вид = "Общее" Тогда
		НаборДопРеквизитовСведений = НаборДопРеквизитовСведенийОбщий(ТипВладельцаНабораЭлементов);
	ИначеЕсли Вид = "ПоОбразцу" Тогда
		Если ТипЭлемента = "ДопРеквизит" Тогда 
			ПараметрыФормы.Вставить("ВыборВладельцаДополнительныхЗначений", Истина);
		Иначе
			ПараметрыФормы.Вставить("ВыборОбщегоСвойства", Истина);
		КонецЕсли;
	КонецЕсли;
	
	ПараметрыФормы.Вставить("НаборСвойств", НаборДопРеквизитовСведений);
	ПараметрыФормы.Вставить("ТекущийНаборСвойств", НаборДопРеквизитовСведений);
	ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ТипЭлемента <> "ДопРеквизит");
	ПараметрыФормы.Вставить("ВидСвойства", ?(ПараметрыФормы.ЭтоДополнительноеСведение, 
												ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения"),
												ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеРеквизиты")));
	
	ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта",
					ПараметрыФормы,
					ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов),
					,
					,
					,
					,
					РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

// Обработчик оповещения.
// Параметры:
// 	РезультатВопроса - КодВозвратаДиалога - выбранный вариант.
// 	ДополнительныеПараметры - Структура - дополнительные параметры:
// 		* Вид - Строка - вид.
// 		* ТипЭлемента - Строка - тип элемента.
// 		* ТипВладельцаНабораЭлементов - Строка - тип владельца набора элементов.
// 		
&НаКлиенте
Процедура ДобавитьДопРеквизитСведениеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Вид = ДополнительныеПараметры.Вид;
	ТипВладельцаНабораЭлементов = ДополнительныеПараметры.ТипВладельцаНабораЭлементов;
	ТипЭлемента = ДополнительныеПараметры.ТипЭлемента;
	
	Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	Попытка
		ЭлементЗаписан = Записать();
	Исключение
		Возврат;
	КонецПопытки;
	
	Если Не ЭлементЗаписан Тогда
		Возврат;
	КонецЕсли;
	
	ДобавитьДопРеквизитСведениеФрагмент(Вид, ТипВладельцаНабораЭлементов, ТипЭлемента);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	НаборДопРеквизитовСведений = НаборДопРеквизитовСведенийОбъекта(Объект, ТипВладельцаНабораЭлементов);
	Если НЕ ЗначениеЗаполнено(НаборДопРеквизитовСведений) Тогда
		Возврат;
	КонецЕсли;
	
	ЭтоНаборыДополнительныхСведений = (ТипЭлемента <> "ДопРеквизит");
	
	Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура")
		И ВыбранноеЗначение.Свойство("ВладелецДополнительныхЗначений") Тогда
		
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("ЭтоДополнительноеСведение",      ЭтоНаборыДополнительныхСведений);
		ПараметрыФормы.Вставить("ТекущийНаборСвойств",            НаборДопРеквизитовСведений);
		ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", ВыбранноеЗначение.ВладелецДополнительныхЗначений);
		
		ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта",
			ПараметрыФормы, ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов));
			
	ИначеЕсли ВыбранноеЗначение.Свойство("ОбщееСвойство") Тогда		
		
		ЗаписатьОбщееСвойствоНаСервере(ВыбранноеЗначение, НаборДопРеквизитовСведений, ЭтоНаборыДополнительныхСведений);
		
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьКомандРедактированияДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	ТаблицаДопРеквизитовСведений = ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
	
	ТекущиеДанные = ТаблицаДопРеквизитовСведений.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТаблицаДопРеквизитов = ТаблицаДопРеквизитов(ЭтотОбъект, ТипЭлемента, ТипВладельцаНабораЭлементов);
	КомандыРедактирования = КомандыРедактированияДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
	
	// Если активная строка - строка общего доп. реквизита (сведения), то сделать недоступными кнопки добавления, удаления, перемещения.
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы, 
		КомандыРедактирования.Удалить, 
		"Доступность", 
		Не ТекущиеДанные.ОбщееСвойство);
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы, 
		КомандыРедактирования.ПереместитьВверх, 
		"Доступность", 
		Не ТекущиеДанные.ОбщееСвойство);
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы, 
		КомандыРедактирования.ПереместитьВниз, 
		"Доступность", 
		Не ТекущиеДанные.ОбщееСвойство);
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы, 
		КомандыРедактирования.КонтекстноеМенюУдалить, 
		"Доступность", 
		Не ТекущиеДанные.ОбщееСвойство);
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы, 
		КомандыРедактирования.КонтекстноеМенюПереместитьВверх, 
		"Доступность", 
		Не ТекущиеДанные.ОбщееСвойство);
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы, 
		КомандыРедактирования.КонтекстноеМенюПереместитьВниз,
		"Доступность",
		Не ТекущиеДанные.ОбщееСвойство);
	
	// Если активная строка - первая или последняя в списке, то сделать недоступными кнопки сдвига вверх или вниз.
	Если Не ТекущиеДанные.ОбщееСвойство Тогда
		
		ИндексСтроки = ТаблицаДопРеквизитов.Индекс(ТекущиеДанные);
		
		Если ИндексСтроки = 0 Тогда
			
			ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
				Элементы, 
				КомандыРедактирования.ПереместитьВверх, 
				"Доступность", 
				Ложь);
			
			ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
				Элементы, 
				КомандыРедактирования.КонтекстноеМенюПереместитьВверх, 
				"Доступность", 
				Ложь);
			
		КонецЕсли;
		
		Если ИндексСтроки = ТаблицаДопРеквизитов.Количество() - 1 Тогда
			
			ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
				Элементы, 
				КомандыРедактирования.ПереместитьВниз, 
				"Доступность", 
				Ложь);
			
			ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
				Элементы, 
				КомандыРедактирования.КонтекстноеМенюПереместитьВниз, 
				"Доступность", 
				Ложь);
			
		КонецЕсли;
		
		Если ИндексСтроки <> 0 Тогда
			
			ПредыдущаяСтрока = ТаблицаДопРеквизитов[ИндексСтроки - 1];
			
			Если ПредыдущаяСтрока.ОбщееСвойство Тогда
				
				// Если предыдущая строка является строкой общего реквизита, то сделать недоступной кнопку сдвига вверх.
				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
					Элементы, 
					КомандыРедактирования.ПереместитьВверх, 
					"Доступность", 
					Ложь);
				
				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
					Элементы, 
					КомандыРедактирования.КонтекстноеМенюПереместитьВверх, 
					"Доступность", 
					Ложь);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	НаборСвойствДопРеквизитовСведений = НаборДопРеквизитовСведенийОбъекта(ТекущийОбъект, ТипВладельцаНабораЭлементов);
	Если НЕ ЗначениеЗаполнено(НаборСвойствДопРеквизитовСведений) Тогда
		Возврат;
	КонецЕсли;
	
	ОбъектНаборСвойств = НаборСвойствДопРеквизитовСведений.ПолучитьОбъект();
	
	Если ТипЭлемента = "ДопРеквизит" Тогда
		ТЧДополнительныеРеквизитыСведения = ОбъектНаборСвойств.ДополнительныеРеквизиты;
	ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
		ТЧДополнительныеРеквизитыСведения = ОбъектНаборСвойств.ДополнительныеСведения;
	КонецЕсли;
	
	ТаблицаДопРеквизитов = ТаблицаДопРеквизитов(ЭтотОбъект, ТипЭлемента, ТипВладельцаНабораЭлементов);
	ТЧДополнительныеРеквизитыСведения.Очистить();
	
	Для каждого ЭлементСтр Из ТаблицаДопРеквизитов Цикл
		Если Не ЭлементСтр.ОбщееСвойство Тогда
			НовСтр = ТЧДополнительныеРеквизитыСведения.Добавить();
			НовСтр.Свойство = ЭлементСтр.Свойство;
			НовСтр.ПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементСтр.Свойство, "ПометкаУдаления");
		КонецЕсли;
	КонецЦикла;
	
	Попытка
		
		ОбъектНаборСвойств.Записать();
		
	Исключение
		
		// Установить признак отказа записи.
		Отказ = Истина;
		
		// Добавить запись в журнал регистрации.
		ИмяСобытия = НСтр("ru = 'Дополнительные %1 %2. Не удалось обновить состав дополнительных %3 набора.'");
		
		ТипСведений = ?(ТипЭлемента = "ДопРеквизит", "реквизиты", "сведения");
		ТипОбъекта  = ?(ТипВладельцаНабораЭлементов = "Номенклатура", "номенклатуры", ?(ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры", "характеристик", "серий"));
		ТипСостава  = ?(ТипЭлемента = "ДопРеквизит", "реквизитов", "сведений");
		
		ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			ИмяСобытия, 
			ТипСведений, 
			ТипОбъекта, 
			ТипСостава);
		
		КомментарийЖурнала  = НСтр("ru = 'При обновлении табличной части дополнительных реквизитов набора свойств ""%1"" произошла ошибка: ""%2""'");
		ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
		КомментарийЖурнала  = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			КомментарийЖурнала, 
			НаборСвойствДопРеквизитовСведений, 
			ПредставлениеОшибки);
		
		ЗаписьЖурналаРегистрации(
			ИмяСобытия, 
			УровеньЖурналаРегистрации.Ошибка, 
			, 
			НаборСвойствДопРеквизитовСведений, 
			КомментарийЖурнала, 
			РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
		
		// Вызвать исключение.
		ВыражениеИсключения = НСтр("ru = 'При записи дополнительных %1 %2 произошла ошибка (см. журнал регистрации).'");
		
		ТипСведений = ?(ТипЭлемента = "ДопРеквизит", "реквизитов", "сведений");
		ТипОбъекта = ?(ТипВладельцаНабораЭлементов = "Номенклатура", "номенклатуры", ?(ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры", "характеристик", "серий"));
		
		ВыражениеИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			ВыражениеИсключения, 
			ТипСведений, 
			ТипОбъекта, 
			ТипСостава);
		
		ВызватьИсключение(ВыражениеИсключения);
		
	КонецПопытки;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриВыбореСтрокиТаблицыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов, ТекущаяСтрока)
	
	Если ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТекущийТипЭлемента = ТипЭлемента;
	ТекущийТипВладельцаНабораЭлементов = ТипВладельцаНабораЭлементов;
	
	НаборСвойств = ?(ТекущаяСтрока.ОбщееСвойство,
					НаборОбщихСвойств,
					Объект.НаборСвойств);
	
	Если ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
		НаборСвойств = ?(ТекущаяСтрока.ОбщееСвойство,
						НаборОбщихСвойствХарактеристик,
						Объект.НаборСвойствХарактеристик);
	ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
		НаборСвойств = ?(ТекущаяСтрока.ОбщееСвойство,
						НаборОбщихСвойствСерий,
						Объект.НаборСвойствСерий);
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура("Ключ, ТекущийНаборСвойств", ТекущаяСтрока.Свойство, НаборСвойств);
	
	ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента",
				ПараметрыФормы,
				ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, ТипЭлемента, ТипВладельцаНабораЭлементов)
	
	ТаблицаДопРеквизитовСведений	= ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
	ТекущиеДанные					= ТаблицаДопРеквизитовСведений.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	Иначе
		Выполнение = Не ТекущиеДанные.ОбщееСвойство;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

// Процедура вызывается при начале выбора шаблона наименования номенклатуры или характеристик.
// Проверяет модифицированность элемента и открывается форму редактирования шаблона.
//
// Параметры:
//	ШаблонНаименования (Строка) - шаблон наименования,
//	ЭлементШаблонаНаименования (ПолеФормы) - элемент шаблона,
//	ИмяШаблона (Строка) - имя шаблона наименования,
//	ФлагЗапрета (Строка) - имя флага запрета.
//
&НаКлиенте
Процедура ИзменениеВРедактореШаблона(ИмяШаблонаНаименования)
	
	ОчиститьСообщения();
	
	ПараметрыВопроса = Новый Структура;
	ПараметрыВопроса.Вставить("ИмяШаблонаНаименования", ИмяШаблонаНаименования);
	
	Если Модифицированность Тогда
		
		ТекстВопроса = НСтр("ru = 'Изменение шаблона наименования с помощью редактора 
		                          |формул возможно только после записи элемента, записать элемент?'");
		

		ПоказатьВопрос(Новый ОписаниеОповещения("ИзменениеВРедактореШаблонаВопросОЗаписиЗавершение", ЭтотОбъект, ПараметрыВопроса),
			ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,,НСтр("ru = 'Редактирование шаблона'"));
			
		Возврат;	
	КонецЕсли;
	
	ИзменениеВРедактореШаблонаВопросФрагмент(ПараметрыВопроса);
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменениеВРедактореШаблонаВопросФрагмент(ДополнительныеПараметры)
	
	НаборСвойств = Новый Структура("НаборСвойствНоменклатуры, НаборСвойствХарактеристик, Набор", Ложь, Ложь, Неопределено);
	
	ИмяШаблона = ДополнительныеПараметры.ИмяШаблонаНаименования;
	
	Если ИмяШаблона = "ШаблонНаименованияДляПечатиНоменклатуры"
		Или ИмяШаблона = "ШаблонРабочегоНаименованияНоменклатуры" Тогда
		
		НаборСвойств.НаборСвойствНоменклатуры = Истина;
		НаборСвойств.Набор = Объект.НаборСвойств;
		
	ИначеЕсли ИмяШаблона = "ШаблонНаименованияДляПечатиХарактеристики"
		Или ИмяШаблона = "ШаблонРабочегоНаименованияХарактеристики" Тогда
		
		НаборСвойств.НаборСвойствХарактеристик = Истина;
		НаборСвойств.Набор = Объект.НаборСвойствХарактеристик;
		
	Иначе
		
		НаборСвойств.Набор = Объект.НаборСвойствСерий;
		
	КонецЕсли;
	
	АдресДереваОперандов = ПодготовитьДеревоОперандов(ИмяШаблона, НаборСвойств);
	
	ПараметрыРедактированияШаблона = Новый Структура("Формула, ОперандыЗаголовок, Операторы, СтроковаяФормула, ДеревоОперандов");
	
	ПараметрыРедактированияШаблона.Формула           = Объект[ИмяШаблона];
	ПараметрыРедактированияШаблона.ОперандыЗаголовок = НСтр("ru = 'Доступные реквизиты'");
	ПараметрыРедактированияШаблона.Операторы         = АдресХранилищаДереваОператоров;
	
	ПараметрыРедактированияШаблона.ДеревоОперандов  = АдресДереваОперандов;
	ПараметрыРедактированияШаблона.Вставить("ТипРезультата", Новый ОписаниеТипов("Строка"));
	
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ИзменениеВРедактореШаблонаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
	
	ОткрытьФорму(
		"ОбщаяФорма.КонструкторФормул",
		ПараметрыРедактированияШаблона,
		ЭтотОбъект,
		,
		,
		,
		ОписаниеОповещения,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

		
КонецПроцедуры

&НаСервере
Функция ПодготовитьДеревоОперандов(ИмяШаблона, НаборСвойств)
	
	ДеревоОперандов = РаботаСФормулами.ПолучитьПустоеДеревоОперандов();
	
	КорневаяСтрокаДерева = РаботаСФормулами.НоваяСтрокаДереваОперанда(ДеревоОперандов);
	Если НаборСвойств.НаборСвойствНоменклатуры Тогда
		КорневаяСтрокаДерева.Идентификатор = "Номенклатура";
		КорневаяСтрокаДерева.Представление = НСтр("ru = 'Номенклатура'");
		
		КорневаяСтрокаДерева.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
		
		НаборОбщихСвойств = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
	ИначеЕсли НаборСвойств.НаборСвойствХарактеристик Тогда
		КорневаяСтрокаДерева.Идентификатор = "ХарактеристикаНоменклатуры";
		КорневаяСтрокаДерева.Представление = НСтр("ru = 'Характеристика номенклатуры'");
		
		КорневаяСтрокаДерева.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры");
		
		НаборОбщихСвойств = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
	Иначе
		КорневаяСтрокаДерева.Идентификатор = "СерияНоменклатуры";
		КорневаяСтрокаДерева.Представление = НСтр("ru = 'Серия номенклатуры'");
		
		КорневаяСтрокаДерева.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры");
		
		НаборОбщихСвойств = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
	КонецЕсли;
	КорневаяСтрокаДерева.РазрешаетсяВыборОперанда = Ложь;
	КорневаяСтрокаДерева.ВключаетсяВИдентификатор = Ложь;
	КорневаяСтрокаДерева.РазворачиватьДоРеквизитов = Истина;
	
	// Формирование второго слоя операндов. Переопределяется состав доп. реквизитов (из набора свойств).
	// 1. Описание дополнительных ограничений на слой реквизитов и дополнительных реквизитов.
	ОграниченияРазвертки = РаботаСФормулами.ОграниченияРазверткиОперандов();
	ОграниченияРазвертки.НаборыДополнительныхРеквизитов.Добавить(НаборСвойств.Набор);
	ОграниченияРазвертки.НаборыДополнительныхРеквизитов.Добавить(НаборОбщихСвойств);
	ОграниченияРазвертки.НеВыводимыеРеквизиты = "ВерсияДанных";
	
	РаботаСФормулами.РазвернутьСтрокуОперанда(КорневаяСтрокаДерева, ОграниченияРазвертки);
	
	АдресХранения = ПоместитьВоВременноеХранилище(ДеревоОперандов, УникальныйИдентификатор);
	Возврат АдресХранения;
	
КонецФункции

&НаКлиенте
Процедура ИзменениеВРедактореШаблонаВопросОЗаписиЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса = КодВозвратаДиалога.ОК Тогда
		Если Записать() Тогда
			
			ИзменениеВРедактореШаблонаВопросФрагмент(ДополнительныеПараметры);
								
		КонецЕсли;	
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменениеВРедактореШаблонаЗавершение(Результат, ДополнительныеПараметры) Экспорт
		
	Шаблон = Результат;
	ИмяШаблона = ДополнительныеПараметры.ИмяШаблонаНаименования;
	
	Если Шаблон <> Неопределено 
		И Объект[ИмяШаблона] <> Шаблон Тогда
		Модифицированность = Истина;
		Объект[ИмяШаблона] = Шаблон;
		
		Если Не МультиязычностьВключена Тогда
			ИмяРеквизитаЗапретРедактированияНаименования = ИмяРеквизитаЗапретРедактированияНаименования(ИмяШаблона);
			Если ИмяРеквизитаЗапретРедактированияНаименования <> "" Тогда
				Объект[ИмяРеквизитаЗапретРедактированияНаименования] = ЗначениеЗаполнено(Объект[ИмяШаблона]);
			КонецЕсли;
		КонецЕсли;
		
		НастроитьПоШаблонуНаименования(ДополнительныеПараметры.ИмяШаблонаНаименования);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПостроитьДеревоОператоров()
	
	Дерево = РаботаСФормулами.ПолучитьПустоеДеревоОператоров();
	
	ПредставлениеГруппыОператора = НСтр("ru = 'Разделители'");
	ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "Разделители", ПредставлениеГруппыОператора);
	
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "/", " + ""/"" + ", "/");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "\", " + ""\"" + ", "\");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "|", " + ""|"" + ", "|");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "_", " + ""_"" + ", "_");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ",", " + "", "" + ", ",");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ".", " + "". "" + ", ".");
	
	ПредставлениеОператора = НСтр("ru = 'Пробел'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "Пробел", " + "" "" + ", ПредставлениеОператора);
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "(", " + "" ("" + ", "(");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ")", " + "") "" + ", ")");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, """", " + """""""" + ", """");
	
	ПредставлениеГруппыОператора = НСтр("ru = 'Операторы'");
	ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "Операторы", ПредставлениеГруппыОператора);
	
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "+", " + ", "+");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "-", " - ", "-");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "*", " * ", "*");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "/", " / ", "/");
	
	ПредставлениеГруппыОператора = НСтр("ru = 'Логические операторы и константы'");
	ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "ЛогическиеОператорыИКонстанты", ПредставлениеГруппыОператора);
	
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "<", " < ", "<");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ">", " > ", ">");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "<=", " <= ", "<=");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ">=", " >= ", ">=");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "=", " = ", "=");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "<>", " <> ", "<>");
	
	Идентификатор = "И";
	КонструкцияДляВставки = " " + "И" + " ";
	Представление = НСтр("ru = 'И'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление);
	
	Идентификатор = "Или";
	КонструкцияДляВставки = " " + "Или" + " ";
	Представление = НСтр("ru = 'Или'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление);
	
	Идентификатор = "Не";
	КонструкцияДляВставки = " " + "Не" + " ";
	Представление = НСтр("ru = 'Не'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление);
	
	Идентификатор = "ИСТИНА";
	КонструкцияДляВставки = " " + "ИСТИНА" + " ";
	Представление = НСтр("ru = 'ИСТИНА'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление);
	
	Идентификатор = "ЛОЖЬ";
	КонструкцияДляВставки = " " + "ЛОЖЬ" + " ";
	Представление = НСтр("ru = 'ЛОЖЬ'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление);
	
	ПредставлениеГруппыОператора = НСтр("ru = 'Числовые функции'");
	ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "ЧисловыеФункции", ПредставлениеГруппыОператора);
	
	Идентификатор = "Макс";
	КонструкцияДляВставки = "Макс(,)";
	Представление = НСтр("ru = 'Максимум'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,,
	                                  2);
	
	Идентификатор = "Мин";
	КонструкцияДляВставки = "Мин(,)";
	Представление = НСтр("ru = 'Минимум'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,,
	                                  2);
	
	Идентификатор = "Окр";
	ТекстОкругляемоеЗначение      = НСтр("ru = '<Округляемое значение>'");
	ТекстКоличествоЗнаков         = НСтр("ru = '<Знаков после запятой>'");
	КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		"Окр(%1, %2)",
		ТекстОкругляемоеЗначение,
		ТекстКоличествоЗнаков);
	Представление = НСтр("ru = 'Округление'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,,
	                                  2);
	
	Идентификатор = "Цел";
	КонструкцияДляВставки = "Цел()";
	Представление = НСтр("ru = 'Целая часть'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,,
	                                  1);
	
	ПредставлениеГруппыОператора = НСтр("ru = 'Строковые функции'");
	ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "СтроковыеФункции", ПредставлениеГруппыОператора);
	
	Идентификатор = "Строка";
	КонструкцияДляВставки = "Строка()";
	Представление = НСтр("ru = 'Строка'");
	ПояснениеОператора = НСтр("ru = 'Преобразовывает значение в строку'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "ВРег";
	КонструкцияДляВставки = "ВРег()";
	Представление = НСтр("ru = 'Верхний регистр'");
	ПояснениеОператора = НСтр("ru = 'Приводит строку в верхний регистр'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "Лев";
	ТекстСтрокаИсходная = НСтр("ru = '<Исходная строка>'");
	ТекстКоличествоСимволов = НСтр("ru = '<Количество символов>'");
	КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		"Лев(%1, %2)",
		ТекстСтрокаИсходная,
		ТекстКоличествоСимволов);
	Представление = НСтр("ru = 'Левая часть строки'");
	ПояснениеОператора = НСтр("ru = 'Получает указанное количество символов слева строки'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "НРег";
	КонструкцияДляВставки = "НРег()";
	Представление = НСтр("ru = 'Нижний регистр'");
	ПояснениеОператора = НСтр("ru = 'Приводит строку к нижнему регистру'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "Прав";
	ТекстСтрокаИсходная = НСтр("ru = '<Исходная строка>'");
	ТекстКоличествоСимволов = НСтр("ru = '<Количество символов>'");
	КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		"Прав(%1, %2)",
		ТекстСтрокаИсходная,
		ТекстКоличествоСимволов);
	Представление = НСтр("ru = 'Правая часть строки'");
	ПояснениеОператора = НСтр("ru = 'Получает указанное количество символов справа строки'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "СокрЛ";
	КонструкцияДляВставки = "СокрЛ()";
	Представление = НСтр("ru = 'Удаление лишних символов слева'");
	ПояснениеОператора = НСтр("ru = 'Отсекает незначащие символы, стоящие слева от первого значащего символа в строке'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "СокрЛП";
	КонструкцияДляВставки = "СокрЛП()";
	Представление = НСтр("ru = 'Удаление лишних символов слева и справа'");
	ПояснениеОператора = НСтр("ru = 'Отсекает незначащие символы, стоящие слева от первого значащего символа в строке, и пробелы, стоящие справа от последнего значащего символа в строке'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "СокрП";
	КонструкцияДляВставки = "СокрП()";
	Представление = НСтр("ru = 'Удаление лишних символов справа'");
	ПояснениеОператора = НСтр("ru = 'Отсекает незначащие символы, стоящие справа от последнего значащего символа в строке'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "ТРег";
	КонструкцияДляВставки = "ТРег()";
	Представление = НСтр("ru = 'Титульный регистр'");
	ПояснениеОператора = НСтр("ru = 'Преобразует строку следующим образом: у каждого слова строки первый символ преобразуется к верхнему регистру. Все остальные символы преобразуются к нижнему регистру'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "СтрЗаменить";
	ТекстСтрокаИсходная = НСтр("ru = '<Исходная строка>'");
	ТекстСтрокаЧтоЗаменяем = НСтр("ru = '<Строка которую заменить>'");
	ТекстСтрокаНаЧтоЗаменяем = НСтр("ru = '<Строка на которую заменить>'");
	КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		"СтрЗаменить(%1, %2, %3)",
		ТекстСтрокаИсходная,
		ТекстСтрокаЧтоЗаменяем,
		ТекстСтрокаНаЧтоЗаменяем);
	Представление = НСтр("ru = 'Замена в строке'");
	ПояснениеОператора = НСтр("ru = 'Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "СтрДлина";
	КонструкцияДляВставки = "СтрДлина()";
	Представление = НСтр("ru = 'Длина строки'");
	ПояснениеОператора = НСтр("ru = 'Возвращает количество символов строки'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	ПредставлениеГруппыОператора = НСтр("ru = 'Прочие функции'");
	ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "ПрочиеФункции", ПредставлениеГруппыОператора);
	
	Идентификатор = "?";
	ТекстУсловие = НСтр("ru = '<Условие>'");
	ТекстЗначениеИстина = НСтр("ru = '<Значение если истина>'");
	ТекстЗначениеЛожь = НСтр("ru = '<Значение если ложь>'");
	КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		"?(%1, %2, %3)",
		ТекстУсловие,
		ТекстЗначениеИстина,
		ТекстЗначениеЛожь);
	Представление = НСтр("ru = 'Условие'");
	ПояснениеОператора = НСтр("ru = 'Вычисляет значение в зависимости от значения условия'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "ПредопределенноеЗначение";
	КонструкцияДляВставки = "ПредопределенноеЗначение()";
	Представление = НСтр("ru = 'Предопределенное значение'");
	ПояснениеОператора = НСтр("ru = 'Обращение к предопределенному элементу по его имени'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "ЗначениеЗаполнено";
	КонструкцияДляВставки = "ЗначениеЗаполнено()";
	Представление = НСтр("ru = 'Значение заполнено'");
	ПояснениеОператора = НСтр("ru = 'Проверка заполненности значения'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	Идентификатор = "Формат";
	ТекстЗначение = НСтр("ru = '<Значение>'");
	ТекстФорматнаяСтрока = НСтр("ru = '<Форматная строка>'");
	КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		"Формат(%1, %2)",
		ТекстЗначение,
		ТекстФорматнаяСтрока);
	Представление = НСтр("ru = 'Формат'");
	ПояснениеОператора = НСтр("ru = 'Выполняет форматирование значения в соответствии с форматной строкой'");
	РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
	                                  Идентификатор,
	                                  КонструкцияДляВставки,
	                                  Представление,
	                                  ПояснениеОператора);
	
	АдресХранилищаДереваОператоров = ПоместитьВоВременноеХранилище(Дерево, УникальныйИдентификатор);
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииФлагаЗаполнятьОбязательно(ВладелецРеквизита, ИдентификаторСтрокиТаблицы)
	
	КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, ВладелецРеквизита);
	
	ТекущиеДанные = КоллекцияРеквизитовДляКонтроля.НайтиПоИдентификатору(ИдентификаторСтрокиТаблицы);
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ТекущиеДанные.ЗаполнятьОбязательно Тогда
		ТекущиеДанные.ОтображатьПриСоздании = Истина;
	КонецЕсли;
	
	Если ТекущиеДанные.ЭтоДопРеквизит Тогда
		ТекущиеДанные.ДоступностьОтображатьПриСоздании = Не ТекущиеДанные.ЗаполнятьОбязательно;
	Иначе
		ТекущиеДанные.ДоступностьОтображатьПриСоздании = Справочники.ВидыНоменклатуры.ДоступноИзменениеНастройкиОтображенияРеквизита(Объект,
																																	ТекущиеДанные,
																																	ВладелецРеквизита);
	КонецЕсли;
	
КонецПроцедуры

// Процедура заполняет нужную таблицу дополнительных реквизитов (сведений).
//
// Параметры:
//	Таблица - ДанныеФормыКоллекция - Таблица доп.реквизитов (сведений).
//	
//	НаборСвойствДопРеквизитов - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - Ссылка на элемент-владелец 
//	набора доп.реквизитов (сведений).
//	
//	НаборОбщихСвойствДопРеквизитов - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - Ссылка на элемент-владелец 
//	набора общих доп.реквизитов (сведений).
//	
//	ТипДанных - Строка - Тип данных которые будут заполняться. 
//	Принимает значения: "Реквизиты", "Сведения".
//	
//	ТолькоОбщиеСвойства -Булево - Если параметр, установлен в Истина, то предварительно очищается не вся таблица,
//	а только список общих доп.реквизитов (сведений). Это сделано для того чтобы избежать 
//	потери введенных данных о не общих доп.реквизитах (сведениях) в форму.
//	Значение по умолчанию: Ложь.
&НаСервере
Процедура ЗаполнитьСписокСвойствДопРеквизитовТаблицы(Таблица, НаборСвойствДопРеквизитов, НаборОбщихСвойствДопРеквизитов, 
	ТипДанных, ТолькоОбщиеСвойства = Ложь)
	
	// Если нужно перезаполнить свойства, то проверить, что передана ссылка на набор свойств.
	Если Не ТолькоОбщиеСвойства Тогда
		Если Не ЗначениеЗаполнено(НаборСвойствДопРеквизитов) Тогда
			Возврат;
		КонецЕсли;
	Иначе
		// Если нужно перезаполнить только ОБЩИЕ свойства, то проверить, что передана ссылка на набор ОБЩИХ свойств.
		Если Не ЗначениеЗаполнено(НаборОбщихСвойствДопРеквизитов) Тогда
			Возврат;
		КонецЕсли;
	КонецЕсли;
	
	Если ТолькоОбщиеСвойства Тогда
		
		// Удалить из таблицы только строки общих свойств.
		ВГраница = Таблица.Количество() - 1;
		
		Для ОбрИндекс = 0 По ВГраница Цикл
			
			СтрокаТаблицы = Таблица[ВГраница - ОбрИндекс];
			
			Если СтрокаТаблицы.ОбщееСвойство Тогда
				Таблица.Удалить(СтрокаТаблицы);
			КонецЕсли;
			
		КонецЦикла;
		
	Иначе
		
		Таблица.Очистить();
		
	КонецЕсли;
	
	Если ТипДанных = "Реквизиты" Тогда
		ИмяТЧ = "ДополнительныеРеквизиты";
	ИначеЕсли ТипДанных = "Сведения" Тогда
		ИмяТЧ = "ДополнительныеСведения";
	КонецЕсли;
	
	// Получить список дополнительных реквизитов из набора свойств, и дополнительных реквизитов из набора общих свойств.
	Запрос = Новый Запрос;
	
	Запрос.УстановитьПараметр("НаборОбщихСвойств", НаборОбщихСвойствДопРеквизитов);
	
	Если ТолькоОбщиеСвойства Тогда
	
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОбщиеДопРеквизитыСведения.Свойство КАК Свойство,
		|	ОбщиеДопРеквизитыСведения.Свойство.Заголовок КАК ПредставлениеРеквизита,
		|	ИСТИНА КАК ОбщееСвойство,
		|	ОбщиеДопРеквизитыСведения.НомерСтроки КАК НомерСтрокиДляСортировки,
		|	ВЫБОР КОГДА ОбщиеДопРеквизитыСведения.ПометкаУдаления ТОГДА 4 ИНАЧЕ 1 КОНЕЦ КАК ИндексКартинки
		|ИЗ
		|	&ТабЧасть КАК ОбщиеДопРеквизитыСведения
		|ГДЕ
		|	ОбщиеДопРеквизитыСведения.Ссылка = &НаборОбщихСвойств";
		
	Иначе
		
		Запрос.УстановитьПараметр("НаборСвойств", НаборСвойствДопРеквизитов);
		
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДопРеквизитыСведения.Свойство КАК Свойство,
		|	ДопРеквизитыСведения.Свойство.Заголовок КАК ПредставлениеРеквизита,
		|	ЛОЖЬ КАК ОбщееСвойство,
		|	ДопРеквизитыСведения.НомерСтроки КАК НомерСтрокиДляСортировки,
		|	ВЫБОР КОГДА ДопРеквизитыСведения.ПометкаУдаления ТОГДА 4 ИНАЧЕ 1 КОНЕЦ КАК ИндексКартинки
		|ИЗ
		|	&ТабЧасть КАК ДопРеквизитыСведения
		|ГДЕ
		|	ДопРеквизитыСведения.Ссылка = &НаборСвойств
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ОбщиеДопРеквизитыСведения.Свойство,
		|	ОбщиеДопРеквизитыСведения.Свойство.Заголовок,
		|	ИСТИНА,
		|	ОбщиеДопРеквизитыСведения.НомерСтроки,
		|	ВЫБОР КОГДА ОбщиеДопРеквизитыСведения.ПометкаУдаления ТОГДА 4 ИНАЧЕ 1 КОНЕЦ
		|ИЗ
		|	&ТабЧасть КАК ОбщиеДопРеквизитыСведения
		|ГДЕ
		|	ОбщиеДопРеквизитыСведения.Ссылка = &НаборОбщихСвойств";
		
	КонецЕсли;
	
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТабЧасть", "Справочник.НаборыДополнительныхРеквизитовИСведений." + ИмяТЧ); 
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	ТаблицаДопРеквизитовСведений = РезультатЗапроса.Выгрузить();
	
	Если ТолькоОбщиеСвойства Тогда
		
		ТаблицаДопРеквизитовСведений.Сортировать("НомерСтрокиДляСортировки Возр");
		
		ТаблицаВсехДопРеквизитовСведений = Таблица.Выгрузить();
		ТаблицаВсехДопРеквизитовСведений.Очистить();
		
		ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаДопРеквизитовСведений, ТаблицаВсехДопРеквизитовСведений);
		ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Таблица, ТаблицаВсехДопРеквизитовСведений);
		
		Таблица.Загрузить(ТаблицаВсехДопРеквизитовСведений);
		
	Иначе
		
		ТаблицаДопРеквизитовСведений.Сортировать("ОбщееСвойство Убыв, НомерСтрокиДляСортировки Возр");
		
		Таблица.Загрузить(ТаблицаДопРеквизитовСведений);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСпискиДопРеквизитовСведений()
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		Возврат;
	КонецЕсли;
	
	НаборОбщихСвойств				= УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
	НаборОбщихСвойствХарактеристик	= УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
	НаборОбщихСвойствСерий			= УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
	
	ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
		ТаблицаДопРеквизитовНоменклатуры,
		Объект.НаборСвойств,
		НаборОбщихСвойств,
		"Реквизиты",
		РедактируютсяОбщиеРеквизитыСведения);
	
	ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
		ТаблицаДопРеквизитовХарактеристик,
		Объект.НаборСвойствХарактеристик,
		НаборОбщихСвойствХарактеристик,
		"Реквизиты",
		РедактируютсяОбщиеРеквизитыСведения);
	
	ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
		ТаблицаДопРеквизитовСерий,
		Объект.НаборСвойствСерий,
		НаборОбщихСвойствСерий,
		"Реквизиты",
		РедактируютсяОбщиеРеквизитыСведения);
	
	ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
		ТаблицаДопСведенийНоменклатуры,
		Объект.НаборСвойств,
		НаборОбщихСвойств,
		"Сведения",
		РедактируютсяОбщиеРеквизитыСведения);
	
	ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
		ТаблицаДопСведенийХарактеристик,
		Объект.НаборСвойствХарактеристик,
		НаборОбщихСвойствХарактеристик,
		"Сведения",
		РедактируютсяОбщиеРеквизитыСведения);
	
	ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
		ТаблицаДопСведенийСерий,
		Объект.НаборСвойствСерий,
		НаборОбщихСвойствСерий,
		"Сведения",
		РедактируютсяОбщиеРеквизитыСведения);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьНастройкиПолейРеквизитаДляКонтроля(СтрокаРеквизитаДляКонтроля, УсловияДоступности)
	
	СтрокаРеквизитаДляКонтроля.ДоступностьЗаполнятьОбязательно = (Не УсловияДоступности.ТипРеквизитаБулево
																		И Не УсловияДоступности.ЗаполнятьОбязательно);
	
	Если УсловияДоступности.ТолькоЗаполнятьОбязательно Тогда
		Возврат;
	КонецЕсли;
	
	СтрокаРеквизитаДляКонтроля.ДоступностьУникален = (Не УсловияДоступности.ЭтоНеиспользуемыйДляКонтроляТип);
	СтрокаРеквизитаДляКонтроля.ДоступностьОтображатьПриСоздании = (Не СтрокаРеквизитаДляКонтроля.ЗаполнятьОбязательно
																		И Не УсловияДоступности.ЗаполнятьОбязательно);
	
КонецПроцедуры

&НаСервере
Процедура НастроитьФорму()
	ЭтотОбъект.ТолькоПросмотр = Не ЕстьПравоРедактирования;
	
	ВидимостьЭлементов = Справочники.Номенклатура.ИспользованиеЭлементов(Объект, Ложь, Ложь);
		
	Для Каждого ЭлементВидимость Из ВидимостьЭлементов Цикл
		
		Если Элементы.Найти(ЭлементВидимость.Ключ) <> Неопределено Тогда
			Элементы[ЭлементВидимость.Ключ].Видимость = ЭлементВидимость.Значение;
		КонецЕсли;
		
	КонецЦикла;

	ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета = Справочники.ВидыНоменклатуры.ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета();
	
	ЗначенияРеквизитов = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета.Получить(ОсобенностьУчетаДоИзменения); 
	Если ЗначенияРеквизитов <> Неопределено Тогда
		Для Каждого КлючЗначение Из ЗначенияРеквизитов Цикл
			Если Элементы.Найти(КлючЗначение.Ключ) <> Неопределено Тогда
				Элементы[КлючЗначение.Ключ].Доступность = Истина;
			КонецЕсли;
		КонецЦикла
	КонецЕсли;
	
	#Область ЗначенияФО
	
	Если Не ИспользоватьНесколькоСкладов Тогда
		
		Для каждого ДанныеСтроки Из Объект.ПолитикиУчетаСерий Цикл
			Если ТипЗнч(ДанныеСтроки.Склад) = Тип("СправочникСсылка.Склады") Тогда
				Склад = ДанныеСтроки.Склад;
				ПолитикаУчетаСерий = ДанныеСтроки.ПолитикаУчетаСерий;
				Прервать;
			КонецЕсли; 
		КонецЦикла;
		
		Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
	КонецЕсли;
	
	ИспользоватьДополнительныеРеквизитыИСведения = ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеРеквизитыИСведения");
	ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач = ПолучитьФункциональнуюОпцию(
		"ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач", Новый Структура("Склад", Склад));
	ИспользоватьПродажуАгентскихУслуг            = ПолучитьФункциональнуюОпцию("ИспользоватьПродажуАгентскихУслуг");
	ИспользоватьТоварныеКатегории                = ПолучитьФункциональнуюОпцию("ИспользоватьТоварныеКатегории"); 
	
	ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
	ИспользоватьСерииНоменклатуры          = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
	КонтролироватьУникальность             = ПолучитьФункциональнуюОпцию("КонтролироватьУникальностьНоменклатурыПоСочетаниюЗначенийРеквизитов");
	ИспользоватьОрдерныеСклады             = ПолучитьФункциональнуюОпцию("ИспользоватьОрдерныеСклады");
	БазоваяВерсия                          = ПолучитьФункциональнуюОпцию("БазоваяВерсия");
	
	#КонецОбласти
	
	#Область НесколькоВидов
	НесколькоВидовНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры");
	
	Элементы.СтраницаНастройкиПанелиБыстрогоОтбора.Видимость 	= НесколькоВидовНоменклатуры;
	Элементы.Родитель.Видимость 								= НесколькоВидовНоменклатуры;
	Элементы.Описание.Видимость 								= НесколькоВидовНоменклатуры;
	Элементы.ТипНоменклатуры.Видимость 							= НесколькоВидовНоменклатуры;
	Элементы.ПодменюПерейти.Видимость							= НесколькоВидовНоменклатуры;
	Элементы.ДекорацияОтступ.Видимость							= НесколькоВидовНоменклатуры;
	Элементы.ОсобенностьУчета.Видимость 						= НесколькоВидовНоменклатуры 
		И Перечисления.ОсобенностиУчетаНоменклатуры.ОднаИзОсобенностейВключена(); // Наличие возможности выбора при хотя бы в одном типе
		
	#КонецОбласти
	
	#Область ТипНоменклатуры
	ЭтоТовар = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар);
	ЭтоМногооборотнаяТара = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
	ЭтоРабота = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Работа);
	ЭтоУслуга = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга);
	ЭтоНабор = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор);
	
	Элементы.ТипНоменклатуры.Подсказка = Перечисления.ТипыНоменклатуры.ПодсказкаПоТипуНоменклатуры(Объект.ТипНоменклатуры);
	ОднаИзОсобенностейВключена = Перечисления.ОсобенностиУчетаНоменклатуры.ОднаИзОсобенностейВключена(Объект.ТипНоменклатуры);
	Если Не ЗначениеЗаполнено(Объект.ТипНоменклатуры) Тогда
		ПодсказкаОсобенностиУчета = НСтр("ru = 'Заполняется после выбора типа номенклатуры'");
	ИначеЕсли Не ОднаИзОсобенностейВключена И Не ЭтоУслуга Тогда
		ПодсказкаОсобенностиУчета = НСтр("ru = 'Отсутствуют для заданного типа'");
	ИначеЕсли Объект.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета Тогда
		ПодсказкаОсобенностиУчета = НСтр("ru = 'Без особенности учета'");
	Иначе
		ПодсказкаОсобенностиУчета = Перечисления.ОсобенностиУчетаНоменклатуры.ПодсказкаПоОсобенностиУчетаНоменклатуры(Объект.ОсобенностьУчета);
	КонецЕсли;
	Элементы.ОсобенностьУчета.Подсказка = ПодсказкаОсобенностиУчета;
	
	Элементы.ОсобенностьУчета.Доступность = ОднаИзОсобенностейВключена;
	
	ИспользоватьХарактеристикиИзДругогоВида = (Объект.ИспользованиеХарактеристик
										= ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры"));
										
	#КонецОбласти
		
	#Область ОформлениеУслуг
	Элементы.ВариантОформленияПродажи.Видимость = (ЭтоТовар
														И ПолучитьФункциональнуюОпцию("ИспользоватьАктыНаПередачуПрав")
														И (Объект.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета
															Или Не ЗначениеЗаполнено(Объект.ОсобенностьУчета)))
													Или ЭтоУслуга
													Или ЭтоРабота;
	
	Элементы.ДекорацияПродажаОформляется.Видимость = Элементы.ВариантОформленияПродажи.Видимость;
	Элементы.ДекорацияПродажаОформляетсяЗаглушка.Видимость = Элементы.ВариантОформленияПродажи.Видимость;
	
	СписокВыбораВариантовОформления = Элементы.ВариантОформленияПродажи.СписокВыбора;
	СписокВыбораВариантовОформления.Очистить();
	
	СписокВыбораВариантовОформления.Добавить(Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг);
	Если ЭтоУслуга Или ЭтоРабота Тогда
		СписокВыбораВариантовОформления.Добавить(Перечисления.ВариантыОформленияПродажи.АктВыполненныхРабот);
	КонецЕсли;
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьАктыНаПередачуПрав")
		И Не ЭтоМногооборотнаяТара Тогда
		СписокВыбораВариантовОформления.Добавить(Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав);
	КонецЕсли;
	#КонецОбласти
	
	#Область Набор
	Элементы.ВариантРасчетаЦеныНабора.Видимость = ЭтоНабор;
	Элементы.ВариантПредставленияНабораВПечатныхФормах.Видимость = ЭтоНабор;
	#КонецОбласти
	
	#Область ТоварныеКатегории
	Элементы.ДекорацияТоварныеКатегории.Видимость = ИспользоватьТоварныеКатегории;
	Элементы.НастройкаТоварныхКатегорий.Видимость = ИспользоватьТоварныеКатегории;
	Элементы.ВладелецТоварныхКатегорий.Видимость = ИспользоватьТоварныеКатегории;
	СформироватьНадписьПоВидуВладельцу("ТоварныхКатегорий");
	#КонецОбласти
	
	#Область Характеристики
	Элементы.ИспользоватьХарактеристики.Видимость = ИспользоватьХарактеристикиНоменклатуры;
	Элементы.ИспользованиеХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры;
	
	Элементы.ИспользованиеХарактеристик.Доступность = Объект.ИспользоватьХарактеристики;
	
	Элементы.РеквизитыБыстрогоОтбораХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
													И Объект.ИспользоватьХарактеристики
													И Не ИспользоватьХарактеристикиИзДругогоВида;
	Элементы.ТаблицаДопРеквизитовХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
													И Объект.ИспользоватьХарактеристики
													И Не ИспользоватьХарактеристикиИзДругогоВида;
	Элементы.ТаблицаДопСведенийХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
													И Объект.ИспользоватьХарактеристики
													И Не ИспользоватьХарактеристикиИзДругогоВида;
	Элементы.ТаблицаДопСведенийХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
													И Объект.ИспользоватьХарактеристики
													И Не ИспользоватьХарактеристикиИзДругогоВида;
	Элементы.ГруппаРеквизитыДляКонтроляХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
													И Объект.ИспользоватьХарактеристики
													И Не ИспользоватьХарактеристикиИзДругогоВида;
	Элементы.ГруппаШаблоныНаименованийХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
													И Объект.ИспользоватьХарактеристики
													И Не ИспользоватьХарактеристикиИзДругогоВида;
	
	Элементы.ДекорацияОтступШаблоныНаименованийХарактеристик.Видимость = Элементы.ГруппаШаблоныНаименованийХарактеристик.Видимость;												
	Элементы.ВладелецХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры;
	
	Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
													И Объект.ИспользоватьХарактеристики
													И Не ИспользоватьХарактеристикиИзДругогоВида;
	СформироватьНадписьПоВидуВладельцу("Характеристик");
	#КонецОбласти
	
	#Область Серии
	
	ПараметрыОтбораПолитикУчетаСерий = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
	ЗаполнитьЗначенияСвойств(ПараметрыОтбораПолитикУчетаСерий, Объект);
	ОтборПолитикУчетаСерий = НоменклатураСервер.ОтборПолитикУчетаСерийПоПараметрам(ПараметрыОтбораПолитикУчетаСерий);
	ОбязателенУчетОстатковПоСериям = ОтборПолитикУчетаСерий.Свойство("УчитыватьОстаткиСерий")
										И ОтборПолитикУчетаСерий.УчитыватьОстаткиСерий;
										
	ВозможныеПолитикиУчетаСерий = Неопределено;
	ОтборПоПолитике = Неопределено;
	Если ОтборПолитикУчетаСерий.Свойство("ТипПолитики", ВозможныеПолитикиУчетаСерий) Тогда
		
		Если ТипЗнч(ВозможныеПолитикиУчетаСерий) = Тип("Массив")
			Или ТипЗнч(ВозможныеПолитикиУчетаСерий) = Тип("ФиксированныйМассив") Тогда
			
			Если ВозможныеПолитикиУчетаСерий.Количество() = 1 Тогда
				Если ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[0]) Тогда
					ОтборПоПолитике = ВозможныеПолитикиУчетаСерий[0];
				КонецЕсли;
			ИначеЕсли ВозможныеПолитикиУчетаСерий.Количество() = 2 Тогда
				Если ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[0])
					И ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[1]) Тогда
					ОтборПоПолитике = Неопределено;
				ИначеЕсли ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[0]) Тогда
					ОтборПоПолитике = ВозможныеПолитикиУчетаСерий[0];
				ИначеЕсли ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[1]) Тогда
					ОтборПоПолитике = ВозможныеПолитикиУчетаСерий[1];
				КонецЕсли;
			КонецЕсли;
			
		ИначеЕсли ТипЗнч(ВозможныеПолитикиУчетаСерий) = Тип("ПеречислениеСсылка.ТипыПолитикУказанияСерий") Тогда
			ОтборПоПолитике = ВозможныеПолитикиУчетаСерий;
		КонецЕсли;
		
	КонецЕсли;
		
	РазрешеноИспользоватьСерии = (ЭтоТовар Или ЭтоМногооборотнаяТара)
									И ИспользоватьСерииНоменклатуры
									И (ОбязателенУчетОстатковПоСериям
												 И (ИспользоватьОрдерныеСклады
												 	И ИспользоватьНесколькоСкладов
													Или ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач)
										Или Не ОбязателенУчетОстатковПоСериям);
	
	Элементы.ИспользоватьСерии.Видимость = РазрешеноИспользоватьСерии;
													
	Элементы.ВариантЗаданияНастроекСерий.Видимость = РазрешеноИспользоватьСерии;
	Элементы.ВариантЗаданияНастроекСерий.Доступность = Объект.ИспользоватьСерии;
	
	Элементы.НадписьНастройкаИспользованияСерий.Видимость = РазрешеноИспользоватьСерии
													И Объект.ИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	
	Элементы.ВладелецСерий.Видимость = (ЭтоТовар Или ЭтоМногооборотнаяТара) И ИспользоватьСерииНоменклатуры;
	
	ВидимостьПолитикиУчетаСерийСкладыПодразделения = Объект.ИспользоватьСерии
													И РазрешеноИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
													И (ИспользоватьНесколькоСкладов
														Или ИспользоватьПроизводство);
	ВидимостьПолитикиУчетаСерийОдинСклад           = Объект.ИспользоватьСерии
													И РазрешеноИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
													И Не (ИспользоватьНесколькоСкладов
															Или ИспользоватьПроизводство);
	
	Элементы.НадписьПолитикаУчетаСерий2.Видимость          = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
	Элементы.ПолитикаУчетаСерий2.Видимость                 = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
	Элементы.ПолитикаУчетаСерий2.АвтоОтметкаНезаполненного = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
	
	Элементы.ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий.Видимость = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
	
	Элементы.ГруппаНадписьПолитикаУчетаСерий.Видимость    = ВидимостьПолитикиУчетаСерийОдинСклад;
	Элементы.ПолитикаУчетаСерий.АвтоОтметкаНезаполненного = ВидимостьПолитикиУчетаСерийОдинСклад;
	
	ИспользоватьПередачуНаХранение = ПолучитьФункциональнуюОпцию(
		"ИспользоватьПередачуНаОтветственноеХранениеСПравомПродажи");
	ИспользоватьНеотфактурованныеПоставки = ПолучитьФункциональнуюОпцию("ИспользоватьНеотфактурованныеПоставки");
	ИспользоватьТоварыВПутиОтПоставщиков  = ПолучитьФункциональнуюОпцию("ИспользоватьТоварыВПутиОтПоставщиков");
	
	Если ЗначениеЗаполнено(ОтборПоПолитике) Тогда
		// Формирования текста предупреждения по использованию справочных серий
		ЕстьОтборПоТипуПолитикиОписание = Новый Массив;
		Если ЗначениеЗаполнено(Объект.ОсобенностьУчета)
			И Объект.ОсобенностьУчета <> Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета Тогда
			
			ОтборПоОсобенностиУчетаОписание = Новый ФорматированнаяСтрока(НСтр("ru = 'Для вида номенклатуры с особенностью учета ""%ОсобенностьУчета%"" возможно использование'") + Символы.НПП,
											,
											ЦветаСтиля.ПоясняющийТекст);
			ОтборПоОсобенностиУчетаОписание = СтрЗаменить(ОтборПоОсобенностиУчетаОписание, "%ОсобенностьУчета%", Объект.ОсобенностьУчета);
			ЕстьОтборПоТипуПолитикиОписание.Добавить(ОтборПоОсобенностиУчетаОписание);
		ИначеЕсли Объект.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
			ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
											НСтр("ru = 'Для серий, идентифицирующих экземпляр товара, возможно использование'") + Символы.НПП,
											,
											ЦветаСтиля.ПоясняющийТекст));
		Иначе
			ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
											НСтр("ru = 'Для этого вида номенклатуры возможно использование'") + Символы.НПП,
											,
											ЦветаСтиля.ПоясняющийТекст));
		КонецЕсли;
		
		ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
										НСтр("ru = 'только'") + Символы.НПП,
										Новый Шрифт(, , Истина),
										ЦветаСтиля.ПоясняющийОшибкуТекст));
		ОтборПоТипуПолитикиОписание     = НСтр("ru = 'политики учета серий с типом ""%ТипПолитикиУчетаСерий%""'");
		ОтборПоТипуПолитикиОписание     = СтрЗаменить(ОтборПоТипуПолитикиОписание, "%ТипПолитикиУчетаСерий%", Строка(ОтборПоПолитике));
		ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
										ОтборПоТипуПолитикиОписание,
										,
										ЦветаСтиля.ПоясняющийТекст));
		
		ОписанияОпераций = Новый Массив;
		
		Если ИспользоватьПередачуНаХранение Тогда
			ОписанияОпераций.Добавить(НСтр("ru = '""Учет серий в переданных на хранение товарах""'"));
		КонецЕсли;
		
		
		Если ИспользоватьТоварыВПутиОтПоставщиков Тогда
			ОписанияОпераций.Добавить(НСтр("ru = '""Учет товаров в пути от поставщика по сериям""'"));
		КонецЕсли;
		
		Если ИспользоватьНеотфактурованныеПоставки Тогда
			ОписанияОпераций.Добавить(НСтр("ru = '""Учет серий в неотфактурованных поставках товаров""'"));
		КонецЕсли;
		
		ТекстВключенныхОпций = ?(ОписанияОпераций.Количество() = 0, "",
								?(ОписанияОпераций.Количество() > 1, НСтр("ru = 'со снятыми флагами'"),
								НСтр("ru = 'со снятым флагом'")));
		ТекстВключенныхОпций = ?(ЗначениеЗаполнено(ТекстВключенныхОпций),
								ТекстВключенныхОпций + Символы.НПП + СтрСоединить(ОписанияОпераций, "," + Символы.НПП) + ".",
								"");
		
		ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
										?(ЗначениеЗаполнено(ТекстВключенныхОпций), Символы.НПП + ТекстВключенныхОпций, "."),
										,
										ЦветаСтиля.ПоясняющийТекст));
		
		Элементы.НадписьЕстьОтборПоТипуПолитики.Заголовок = Новый ФорматированнаяСтрока(ЕстьОтборПоТипуПолитикиОписание);
		
		Элементы.НадписьЕстьОтборПоТипуПолитики.Видимость = 
				ЗначениеЗаполнено(ОтборПоПолитике)
				И Объект.ИспользоватьСерии
				И РазрешеноИспользоватьСерии
				И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	Иначе
		Элементы.НадписьЕстьОтборПоТипуПолитики.Видимость = Ложь;
	КонецЕсли;
	
	ЕстьОтборПолитикиПоУчетуОстатковПоСериям = ИспользоватьСерииНоменклатуры
												И ОбязателенУчетОстатковПоСериям
												И (Объект.ИспользоватьСерии
													Или Не ИспользоватьОрдерныеСклады)
												И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	
	Элементы.НадписьОтборПолитикиПоУчетуОстатковПоСериямОдинСкладБезОрдерности.Видимость = ЕстьОтборПолитикиПоУчетуОстатковПоСериям
																			И Не ИспользоватьНесколькоСкладов
																			И Не ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач
																			И Не БазоваяВерсия;
	Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямНетОрдерныхСкладов.Видимость = ЕстьОтборПолитикиПоУчетуОстатковПоСериям
			 																И ИспользоватьНесколькоСкладов
																			И Не ИспользоватьОрдерныеСклады
																			И Не БазоваяВерсия;
	Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямЕстьОрдерныеСклады.Видимость = ЕстьОтборПолитикиПоУчетуОстатковПоСериям
																			И Не Элементы.НадписьОтборПолитикиПоУчетуОстатковПоСериямОдинСкладБезОрдерности.Видимость
																			И Не Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямНетОрдерныхСкладов.Видимость;
			
	Элементы.НадписьИспользованиеПолитикиУчетаСерийПриВыключенномСрокеГодности.Видимость = 
			НЕ Объект.ИспользоватьСрокГодностиСерии
			И Объект.ИспользоватьСерии
			И РазрешеноИспользоватьСерии
			И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
			И Объект.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ПартияТоваров;
			
	Элементы.НадписьПодсказкаПолитикиУчетаОтключеныОрдерныеСклады.Видимость = РазрешеноИспользоватьСерии
																	И Объект.ИспользоватьСерии
																	И ИспользоватьНесколькоСкладов
																	И Не ИспользоватьОрдерныеСклады
																	И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
																	И Не ОбязателенУчетОстатковПоСериям
																	И Не БазоваяВерсия;
	
	Элементы.НадписьПодсказкаПолитикиУчетаСерийОдинСклад.Видимость = РазрешеноИспользоватьСерии
																	И Объект.ИспользоватьСерии
																	И Не ИспользоватьНесколькоСкладов
																	И Не ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач
																	И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
																	И Не ОбязателенУчетОстатковПоСериям
																	И Не БазоваяВерсия;
	
	Элементы.ГруппаПолитикиУчетаСерий.Видимость = РазрешеноИспользоватьСерии
											И Объект.ИспользоватьСерии
											И (ИспользоватьНесколькоСкладов
												Или ИспользоватьПроизводство)
											И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
											И ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий;
	
	ВТЧУказываютсяСкладыИПодразделения =  ИспользоватьНесколькоСкладов И ИспользоватьПроизводство;
	
	Элементы.ПолитикиУчетаСерийДобавитьСкладВПолитикиУчетаСерий.Видимость = ВТЧУказываютсяСкладыИПодразделения;
	Элементы.ПолитикиУчетаСерийДобавитьПодразделениеВПолитикиУчетаСерий.Видимость = ВТЧУказываютсяСкладыИПодразделения;
	
	Элементы.ПолитикиУчетаСерийДобавить.Видимость = Не ВТЧУказываютсяСкладыИПодразделения;
	
	Если ВТЧУказываютсяСкладыИПодразделения Тогда
		ПолитикиУчетаСерийСкладЗаголовок       = НСтр("ru = 'Склад или подразделение'");
		ПолитикиУчетаСерийСкладПодсказка       = НСтр("ru = 'Склад или подразделение, в котором ведется учет по сериям'");
		ОтборСтрокТЧПолитикаУчетаСерий         = Новый ФиксированнаяСтруктура("СоответствуетПолитикеПоУмолчанию", Ложь);
		ПолитикиУчетаСерийСкладОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Склады,СправочникСсылка.СтруктураПредприятия");
		ПолитикаУчетаСерийПодсказка
			= НСтр("ru = 'Будет использована как общая политика для всех складов и производственных подразделений: будет устанавливаться по умолчанию для новых складов и производственных подразделений.'");
	ИначеЕсли ИспользоватьНесколькоСкладов Тогда
		ПолитикиУчетаСерийСкладЗаголовок       = НСтр("ru = 'Склад'");
		ПолитикиУчетаСерийСкладПодсказка       = НСтр("ru = 'Склад, в котором ведется учет по сериям'");
		ПолитикиУчетаСерийСкладОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Склады");
		ОтборСтрокТЧПолитикаУчетаСерий         = Новый ФиксированнаяСтруктура("СоответствуетПолитикеПоУмолчанию, ЭтоПолитикаДляСклада", Ложь, Истина);
		ПолитикаУчетаСерийПодсказка
			= НСтр("ru = 'Будет использована как общая политика для всех складов; будет устанавливаться по умолчанию для новых складов.'");
	Иначе
		ПолитикиУчетаСерийСкладЗаголовок       = НСтр("ru = 'Подразделение'");
		ПолитикиУчетаСерийСкладПодсказка       = НСтр("ru = 'Подразделение, в котором ведется учет по сериям'");
		ПолитикиУчетаСерийСкладОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия");
		ОтборСтрокТЧПолитикаУчетаСерий         = Новый ФиксированнаяСтруктура("СоответствуетПолитикеПоУмолчанию, ЭтоПолитикаДляСклада", Ложь, Ложь);
		ПолитикаУчетаСерийПодсказка
			= НСтр("ru = 'Будет использована как общая политика для всех производственных подразделений; будет устанавливаться по умолчанию для новых производственных подразделений.'");
	КонецЕсли;
	Элементы.ПолитикиУчетаСерийСклад.Заголовок       = ПолитикиУчетаСерийСкладЗаголовок;
	Элементы.ПолитикиУчетаСерийСклад.Подсказка       = ПолитикиУчетаСерийСкладПодсказка;
	Элементы.ПолитикиУчетаСерийСклад.ОграничениеТипа = ПолитикиУчетаСерийСкладОграничениеТипа;
	Элементы.ПолитикиУчетаСерий.ОтборСтрок           = ОтборСтрокТЧПолитикаУчетаСерий;
	Элементы.НадписьПолитикаУчетаСерий2.Подсказка    = ПолитикаУчетаСерийПодсказка;
	
	Элементы.ГруппаРеквизитыДляКонтроляСерий.Видимость = РазрешеноИспользоватьСерии
													И Объект.ИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	
	Элементы.ГруппаШаблоныНаименованийСерий.Видимость = РазрешеноИспользоватьСерии
													И Объект.ИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	
	Элементы.ДекорацияОтступШаблоныНаименованийСерий.Видимость = Элементы.ГруппаШаблоныНаименованийСерий.Видимость;
	
	Элементы.ТаблицаДопРеквизитовСерий.Видимость = РазрешеноИспользоватьСерии
													И Объект.ИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	
	Элементы.ТаблицаДопСведенийСерий.Видимость = РазрешеноИспользоватьСерии
													И Объект.ИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	
	Элементы.ШаблонЭтикеткиСерии.Видимость = РазрешеноИспользоватьСерии
													И Объект.ИспользоватьСерии;
	
	Элементы.ПоказатьРеквизитыДляКонтроляСерий.Видимость = РазрешеноИспользоватьСерии
													И Объект.ИспользоватьСерии
													И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
	
	Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры.Видимость = (РазрешеноИспользоватьСерии
																		И Объект.ИспользоватьСерии
																		И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры)
																	Или (ИспользоватьХарактеристикиНоменклатуры
																			И Объект.ИспользоватьХарактеристики
																			И Не ИспользоватьХарактеристикиИзДругогоВида);
																			
	СформироватьНадписьПоВидуВладельцу("Серий");
	
	#Область НадписьНастройкаИспользованияСерий
	
	Если Элементы.НадписьНастройкаИспользованияСерий.Видимость Тогда
		
		НужноНастраиватьРеквизитыСерий = Не Элементы.ИспользоватьСерии.ТолькоПросмотр;
		
		Элементы.СворачиваемаяГруппаНастройкиСоставаРеквизитовСерий.Видимость = НужноНастраиватьРеквизитыСерий;
		
		МассивТекстов = Новый Массив;
		
		МассивТекстов.Добавить(НСтр("ru = 'Серия идентифицирует:'"));
		МассивТекстов.Добавить(Символы.НПП);
		МассивТекстов.Добавить(Новый ФорматированнаяСтрока(Строка(Объект.НастройкаИспользованияСерий),
								Новый Шрифт(,,Истина)));
		
		МассивТекстов.Добавить(" (");
		
		МассивОписанияРеквизитов = Новый Массив;
		
		НастройкиИспользованияСерий = Справочники.ВидыНоменклатуры.НастройкиИспользованияСерий(Объект);
		Для Каждого Описание Из НастройкиИспользованияСерий.ОписанияИспользованияРеквизитовСерии Цикл
			Если Описание.ИмяНастройки = "ИспользоватьRFIDМеткиСерии" Тогда
				
				Если Описание.ИмяРеквизита = "RFIDTID"
					И Описание.Использование Тогда
					МассивОписанияРеквизитов.Добавить(НСтр("ru = 'RFID-метка'"));
				КонецЕсли;
				
			ИначеЕсли Описание.Использование Тогда
				
				Если Не ПустаяСтрока(Описание.ПредставлениеФорматнойСтрокиВЗаголовке) Тогда
					
					ПредставлениеРеквизита = НСтр("ru = '%ПредставлениеРеквизита% (%ТочностьУказания%)'");
					ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ПредставлениеРеквизита%", Описание.ПредставлениеРеквизита);
					ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ТочностьУказания%", Описание.ПредставлениеФорматнойСтрокиВЗаголовке);
					
				Иначе
					ПредставлениеРеквизита = Описание.ПредставлениеРеквизита;
					
				КонецЕсли;
				МассивОписанияРеквизитов.Добавить(ПредставлениеРеквизита);
				
			КонецЕсли;
			
			Если НужноНастраиватьРеквизитыСерий
				И Не ПустаяСтрока(Описание.ОсобенностиУчета) Тогда
				
				ИменаОсобенностей = СтрРазделить(Описание.ОсобенностиУчета, ",");
				
				ВидимостьНастройкиРеквизитаСерии = Ложь;
				
				Для Каждого ИмяОсобенности Из ИменаОсобенностей Цикл
					
					Если Объект.ОсобенностьУчета = ПредопределенноеЗначение("Перечисление.ОсобенностиУчетаНоменклатуры." + ИмяОсобенности) Тогда
						ВидимостьНастройкиРеквизитаСерии = Истина;
						Прервать;
					КонецЕсли;
					
				КонецЦикла;
				Элементы[Описание.ИмяНастройки].Видимость = ВидимостьНастройкиРеквизитаСерии;
			Иначе
				Элементы[Описание.ИмяНастройки].Видимость = Истина;
			КонецЕсли;
				
		КонецЦикла;
				
		МассивТекстов.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
		МассивТекстов.Добавить(") ");
		
		Если НастройкиИспользованияСерий.АвтоматическиГенерироватьСерии Тогда
			МассивТекстов.Добавить(", ");
			МассивТекстов.Добавить(НСтр("ru = 'Возможна автогенерация'"));
			МассивТекстов.Добавить(" ");
		КонецЕсли;
		
		Элементы.НадписьНастройкаИспользованияСерий.Заголовок = Новый ФорматированнаяСтрока(МассивТекстов);
		
		Если Справочники.ВидыНоменклатуры.ПредусмотренаАвтоматическаяГенерацияСерий(НастройкиИспользованияСерий) Тогда 
			Элементы.АвтоматическиГенерироватьСерии.Видимость = Истина;
			Элементы.ИспользоватьНомерСерии.Доступность       = Не Объект.АвтоматическиГенерироватьСерии;
		Иначе
			Элементы.АвтоматическиГенерироватьСерии.Видимость = Ложь;
			Элементы.ИспользоватьНомерСерии.Доступность       = Истина;
		КонецЕсли;
		
		Элементы.ТочностьУказанияСрокаГодностиСерии.Доступность = Объект.ИспользоватьСрокГодностиСерии
																	Или Объект.ИспользоватьДатуПроизводстваСерии;
																	
		Элементы.ИспользоватьRFIDМеткиСерии.Доступность = Объект.НастройкаИспользованияСерий 
														= Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара;
	Иначе
		
		Элементы.СворачиваемаяГруппаНастройкиСоставаРеквизитовСерий.Видимость = Ложь;
		
	КонецЕсли;

	#КонецОбласти
	
	#КонецОбласти
	
	#Область ЕдиницаИзмерения
	Если ЭтоУслуга
	 Или ЭтоРабота
	 Или ЭтоНабор Тогда
		ЗаголовокЕдиницыИзмерения = НСтр("ru = 'Ед. измерения'");
		ЗаголовокГруппыЕдиницаИзмерения = НСтр("ru = 'Единицы измерения'");
	Иначе
		ЗаголовокЕдиницыИзмерения = НСтр("ru = 'Ед. хранения'");
		ЗаголовокГруппыЕдиницаИзмерения = НСтр("ru = 'Единицы измерения и условия хранения'");
	КонецЕсли;
	Элементы.ЕдиницаИзмерения.Заголовок                       = ЗаголовокЕдиницыИзмерения;
	Элементы.ГруппаЕдиницыИзмеренияИУсловияХранения.Заголовок = ЗаголовокГруппыЕдиницаИзмерения;
	
	Элементы.ЕдиницаИзмерения.Доступность = (ИспользованиеУпаковок = "ИндивидуальныйНабор"
											И Объект.ИспользоватьУпаковки)
											Или Не Объект.ИспользоватьУпаковки;
	
	#КонецОбласти
	
	#Область ШаблоныНаименованийИНастройкаРеквизитовНоменклатуры
	Элементы.ГруппаНастройкиСозданияПереключатели.Видимость =  (Объект.ИспользоватьСерии
																	И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры)
																Или (Объект.ИспользоватьХарактеристики
																	И Не ИспользоватьХарактеристикиИзДругогоВида);
	
	Если Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница <> Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры
		И (Не Объект.ИспользоватьСерии
		  		И Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляСерий
			Или Не Объект.ИспользоватьХарактеристики
				И Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляХарактеристик) Тогда																	
				
		Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры;
		УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры, ЦветТекстаФормы);
		УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);	
		УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);	
		
	КонецЕсли;
	
	Если Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры Тогда
		УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры, ЦветТекстаФормы);
		УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);	
		УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);	
	КонецЕсли;
	
	НастроитьПоШаблонуНаименования("ШаблонРабочегоНаименованияНоменклатуры"); 
	НастроитьПоШаблонуНаименования("ШаблонНаименованияДляПечатиНоменклатуры"); 
	НастроитьПоШаблонуНаименования("ШаблонРабочегоНаименованияХарактеристики"); 
	НастроитьПоШаблонуНаименования("ШаблонНаименованияДляПечатиХарактеристики"); 
	НастроитьПоШаблонуНаименования("ШаблонРабочегоНаименованияСерии"); 
	
	Элементы.РедактироватьШаблонНаименованияДляПечатиНоменклатуры.Доступность   = Не ЭтотОбъект.ТолькоПросмотр;
	Элементы.РедактироватьШаблонНаименованияДляПечатиХарактеристики.Доступность = Не ЭтотОбъект.ТолькоПросмотр;
	Элементы.РедактироватьШаблонРабочегоНаименованияНоменклатуры.Доступность    = Не ЭтотОбъект.ТолькоПросмотр;
	Элементы.РедактироватьШаблонРабочегоНаименованияХарактеристики.Доступность  = Не ЭтотОбъект.ТолькоПросмотр;
	Элементы.РедактироватьШаблонРабочегоНаименованияСерии.Доступность           = Не ЭтотОбъект.ТолькоПросмотр;
	
	Если ИспользоватьИндивидуальноеНаименование = "ИспользоватьИндивидуальноеНаименование" Тогда
		Элементы.НаименованиеДляПечати.Доступность = Истина;
	Иначе
		Элементы.НаименованиеДляПечати.Доступность = Ложь;
	КонецЕсли;
	#КонецОбласти

	#Область ДопРеквизитыИДопСведения
	Элементы.СтраницаДопРеквизиты.Видимость = ИспользоватьДополнительныеРеквизитыИСведения;
	Элементы.СтраницаДопСведения.Видимость = ИспользоватьДополнительныеРеквизитыИСведения;

	ЕстьПравоДобавленияРеквизитов = ПравоДоступа("Добавление", Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения);
	
	Элементы.НоменклатураГруппаСоздатьРеквизиты.Видимость 	= ЕстьПравоДобавленияРеквизитов;
	Элементы.ХарактеристикиГруппаСоздатьРеквизиты.Видимость = ЕстьПравоДобавленияРеквизитов;
	Элементы.СерииГруппаСоздатьРеквизиты.Видимость 			= ЕстьПравоДобавленияРеквизитов;
	Элементы.НоменклатураГруппаСоздатьСведения.Видимость 	= ЕстьПравоДобавленияРеквизитов;
	Элементы.ХарактеристикиГруппаСоздатьСведения.Видимость  = ЕстьПравоДобавленияРеквизитов;
	Элементы.СерииГруппаСоздатьСведения.Видимость 			= ЕстьПравоДобавленияРеквизитов;
	#КонецОбласти
	
	#Область КонтролироватьУникальность
	
	Элементы.РеквизитыДляКонтроляНоменклатурыДляРазмераЯчейкиУникален.Видимость = КонтролироватьУникальность;
	Элементы.РеквизитыДляКонтроляХарактеристикДляРазмераЯчейкиУникален.Видимость = КонтролироватьУникальность;
	
	#КонецОбласти
	
	#Область Ценообразование
	
	НастроитьЗакладкуНастройкиЦенообразования();
	
	#КонецОбласти
	
	
	ЗначенияРеквизитов = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета.Получить(Объект.ОсобенностьУчета);
	Если ЗначенияРеквизитов <> Неопределено Тогда
		Для Каждого КлючЗначение Из ЗначенияРеквизитов Цикл
			Если Элементы.Найти(КлючЗначение.Ключ) <> Неопределено Тогда
				Элементы[КлючЗначение.Ключ].Доступность = Ложь;
			КонецЕсли;
		КонецЦикла
	КонецЕсли;
	
	НастроитьФормуЛокализация();
	
КонецПроцедуры

&НаСервере
Процедура НастроитьПоШаблонуНаименования(ИмяШаблонаНаименования)
	
	ИмяРеквизитаЗапретРедактированияНаименования = ИмяРеквизитаЗапретРедактированияНаименования(ИмяШаблонаНаименования);
	
	Если ИмяРеквизитаЗапретРедактированияНаименования <> "" Тогда
		ПолеФормы = Элементы[ИмяРеквизитаЗапретРедактированияНаименования]; // ПолеФормы
		ПолеФормы.Доступность = Не ПустаяСтрока(Объект[ИмяШаблонаНаименования]) И (Не МультиязычностьВключена Или Объект.ЗапретРедактированияРабочегоНаименованияНоменклатуры); 
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
	
	ЕстьПравоРедактирования = НЕ ЗначениеЗаполнено(Объект.Ссылка)
								Или Справочники.ГруппыДоступаНоменклатуры.ЕстьПравоИзменения(Объект);
	
	ОсобенностьУчетаДоИзменения = Объект.ОсобенностьУчета;

	ИспользоватьПроизводство     = Справочники.ВидыНоменклатуры.ИспользоватьПроизводство();
	ИспользоватьНесколькоСкладов = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов");
	ИспользуетсяЦенообразование25          = Параметры.Свойство("ИспользуетсяЦенообразование25") Или ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25();
	ЕстьСкладыБезОрдернойСхемыПриОтраженииИзлишковНедостач   = СкладыСервер.ЕстьСкладыБезОрдернойСхемыПриОтраженииИзлишковНедостач();
	ЕстьСкладыОрдерныеНаОтгрузку = СкладыСервер.ЕстьОрдерныйНаОтгрузкуСклад();
	ЕстьСкладыОрдерныеНаПоступление = СкладыСервер.ЕстьОрдерныйНаПоступлениеСклад();
	
	// Подсистема запрета редактирования ключевых реквизитов объектов
	ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
	
	// Сбросить флаг редактирования общих дополнительных реквизитов (сведений).
	РедактируютсяОбщиеРеквизитыСведения = Ложь;
	
	ОбщееНаименованиеДляПечати = Константы.НаименованиеДляПечатиВидовНоменклатуры.Получить();
	ОбщееНаименованиеДляПечати = ?(ЗначениеЗаполнено(ОбщееНаименованиеДляПечати), ОбщееНаименованиеДляПечати, Нстр("ru = '<не указано>'"));
	
	ПостроитьДеревоОператоров();
	
	Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыДляКонтроля(Объект, "Номенклатура");
	Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(Объект, "Номенклатура");
	
	Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыДляКонтроля(Объект, "ХарактеристикиНоменклатуры");
	Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(Объект, "ХарактеристикиНоменклатуры");
	
	Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(Объект, "СерииНоменклатуры");
	
	ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
	
	СведенияОбЯзыках = МультиязычностьСервер.СведенияОЯзыках();

	МультиязычностьВключена = Ложь;
	
	Для Каждого ДопЯзык Из СведенияОбЯзыках.Используется Цикл
		Если ДопЯзык.Значение Тогда
			МультиязычностьВключена = Истина;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	НастроитьФорму();
	
КонецПроцедуры

&НаСервере
Процедура ЕдиницаИзмеренияПриИзмененииСервер()
	
	Если Объект.КоэффициентЕдиницыДляОтчетов = 1
		Или Объект.КоэффициентЕдиницыДляОтчетов = 0 Тогда
		Объект.ЕдиницаДляОтчетов = Объект.ЕдиницаИзмерения;
	КонецЕсли;
	
	Если Объект.ЕдиницаДляОтчетов = Объект.ЕдиницаИзмерения Тогда
		Объект.КоэффициентЕдиницыДляОтчетов = 1;
	КонецЕсли;
	
	ТипЕдиницы = "";
	
	ЭтоМернаяЕдиница = Справочники.УпаковкиЕдиницыИзмерения.ЭтоМернаяЕдиница(Объект.ЕдиницаИзмерения, ТипЕдиницы);
	
	Если ЭтоМернаяЕдиница Тогда
		Объект.ПоставляетсяВМногооборотнойТаре   = Ложь;
	КонецЕсли;
	
	НастроитьФорму();

КонецПроцедуры

// Обработчик команды, создаваемой механизмом запрета редактирования ключевых реквизитов.
//
&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
	
	ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.РазблокированиеРеквизитов",,,,,, 
		Новый ОписаниеОповещения("Подключаемый_РазрешитьРедактированиеРеквизитовОбъектаЗавершение", ЭтотОбъект), 
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъектаЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    Если ТипЗнч(Результат) = Тип("Массив") И Результат.Количество() > 0 Тогда
        
        ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтотОбъект, Результат);
		НастроитьФорму();
    КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовНаСервере()
	
	Если ПустаяСтрока(Объект.ШаблонНаименованияДляПечатиНоменклатуры)
		И ПустаяСтрока(Объект.ШаблонРабочегоНаименованияНоменклатуры)
		И Объект.РеквизитыБыстрогоОтбораНоменклатуры.Количество() = 0 Тогда
		ТекстПредупреждения = НСтр("ru = 'Настройки проверки заполнения реквизитов номенклатуры не изменены: не заданы ни шаблоны наименований номенклатуры, ни реквизиты, отображаемые в панели быстрого отбора.'");
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);
	Иначе
		ВключитьПроверкуЗаполненияДляРеквизитовНоменклатурыНаСервере();
	КонецЕсли;
	
	Если Объект.ИспользоватьХарактеристики Тогда
		Если ПустаяСтрока(Объект.ШаблонНаименованияДляПечатиХарактеристики)
			И ПустаяСтрока(Объект.ШаблонРабочегоНаименованияХарактеристики)
			И Объект.РеквизитыБыстрогоОтбораХарактеристик.Количество() = 0 Тогда
			ТекстПредупреждения = НСтр("ru = 'Настройки проверки заполнения реквизитов характеристик не изменены: не заданы ни шаблоны наименований характеристик, ни реквизиты, отображаемые в панели быстрого отбора.'");
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);;
		Иначе
			ВключитьПроверкуЗаполненияДляРеквизитовХарактеристикНаСервере();
		КонецЕсли;
	КонецЕсли;
	
	Если Объект.ИспользоватьСерии Тогда
		Если ПустаяСтрока(Объект.ШаблонРабочегоНаименованияСерии) Тогда
			ТекстПредупреждения = НСтр("ru = 'Настройки проверки заполнения серий не изменены: не задан шаблон наименования серий.'");
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);;
		Иначе
			ВключитьПроверкуЗаполненияДляРеквизитовСерийНаСервере();
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовНоменклатурыНаСервере()
	
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновНоменклатурыНаСервере();
	ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораНоменклатурыНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаНоменклатурыНаСервере(ШаблонНаименования)
	
	Если Не ЗначениеЗаполнено(ШаблонНаименования) Тогда
		Возврат;
	КонецЕсли;
	
	ДополнительныеРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, "Номенклатура");
	
	ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
	
	Отбор = Новый Структура("ИмяРеквизита, Свойство, ЭтоДопРеквизит");
	
	ОперандыТекстовойФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ШаблонНаименования);
	
	Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляНоменклатуры Цикл
		
		ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
		
		РеквизитИспользуетсяВФормуле = (ОперандыТекстовойФормулы.Найти(ИмяРеквизита) <> Неопределено);
		
		Если Не РеквизитИспользуетсяВФормуле Тогда
			Продолжить;
		КонецЕсли;
		
		// Если тип реквизита - Булево, то не включать для него контроль заполнения.
		Если СтрокаТЧ.ЭтоДопРеквизит Тогда
			
			ЗаполнитьЗначенияСвойств(Отбор, СтрокаТЧ);
			
			НайденныеСтроки = ДополнительныеРеквизиты.НайтиСтроки(Отбор);
			
			Если НайденныеСтроки.Количество() = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			СтрокаДопРеквизитовСведений = НайденныеСтроки[0];
			
			ТипЗначенияРеквизита = СтрокаДопРеквизитовСведений.Тип;
			
		Иначе
			
			Реквизит = Метаданные.Справочники.Номенклатура.Реквизиты.Найти(ИмяРеквизита);
			
			Если Реквизит = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			
			ТипЗначенияРеквизита = Реквизит.Тип;
			
		КонецЕсли;
		
		Если ТипЗначенияРеквизита = ОписаниеТиповБулево Тогда
			Продолжить;
		КонецЕсли;
		
		СтрокаТЧ.ЗаполнятьОбязательно = Истина;
		СтрокаТЧ.ОтображатьПриСоздании = Истина;
		СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
		
		Модифицированность = Истина;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновНоменклатурыНаСервере()
	
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаНоменклатурыНаСервере(Объект.ШаблонРабочегоНаименованияНоменклатуры);
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаНоменклатурыНаСервере(Объект.ШаблонНаименованияДляПечатиНоменклатуры);
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовХарактеристикНаСервере()
	
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновХарактеристикНаСервере();
	ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораХарактеристикНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовСерийНаСервере()
	
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновСерийНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаХарактеристикНаСервере(ШаблонНаименованияХарактеристики)
	
	Если Не ЗначениеЗаполнено(ШаблонНаименованияХарактеристики) Тогда
		Возврат;
	КонецЕсли;
	
	ДополнительныеРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, "ХарактеристикиНоменклатуры");
	
	ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
	
	Отбор = Новый Структура("ИмяРеквизита, Свойство, ЭтоДопРеквизит");
	
	ОперандыТекстовойФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ШаблонНаименованияХарактеристики);
	
	Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляХарактеристик Цикл
		
		ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
		
		РеквизитИспользуетсяВФормуле = (ОперандыТекстовойФормулы.Найти(СтрокаТЧ.ИмяРеквизита) <> Неопределено);
		
		Если Не РеквизитИспользуетсяВФормуле Тогда
			Продолжить;
		КонецЕсли;
		
		// Если тип реквизита - Булево, то не включать для него контроль заполнения.
		Если СтрокаТЧ.ЭтоДопРеквизит Тогда
			
			ЗаполнитьЗначенияСвойств(Отбор, СтрокаТЧ);
			
			НайденныеСтроки = ДополнительныеРеквизиты.НайтиСтроки(Отбор);
			
			Если НайденныеСтроки.Количество() = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			СтрокаДопРеквизитовСведений = НайденныеСтроки[0];
			
			ТипЗначенияРеквизита = СтрокаДопРеквизитовСведений.Тип;
			
		Иначе
			
			Реквизит = Метаданные.Справочники.ХарактеристикиНоменклатуры.Реквизиты.Найти(ИмяРеквизита);
			
			Если Реквизит = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			
			ТипЗначенияРеквизита = Реквизит.Тип;
			
		КонецЕсли;
		
		Если ТипЗначенияРеквизита = ОписаниеТиповБулево Тогда
			Продолжить;
		КонецЕсли;
		
		СтрокаТЧ.ЗаполнятьОбязательно = Истина;
		СтрокаТЧ.ОтображатьПриСоздании = Истина;
		СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
		
		Модифицированность = Истина;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаСерийНаСервере(ШаблонНаименованияСерии)
	
	Если Не ЗначениеЗаполнено(ШаблонНаименованияСерии) Тогда
		Возврат;
	КонецЕсли;
	
	ДополнительныеРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, "СерииНоменклатуры");
	
	ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
	
	Отбор = Новый Структура("ИмяРеквизита, Свойство, ЭтоДопРеквизит");
	
	ОперандыТекстовойФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ШаблонНаименованияСерии);
	
	Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляСерий Цикл
		
		ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
		
		РеквизитИспользуетсяВФормуле = (ОперандыТекстовойФормулы.Найти(СтрокаТЧ.ИмяРеквизита) <> Неопределено);
		
		Если Не РеквизитИспользуетсяВФормуле Тогда
			Продолжить;
		КонецЕсли;
		
		// Если тип реквизита - Булево, то не включать для него контроль заполнения.
		Если СтрокаТЧ.ЭтоДопРеквизит Тогда
			
			ЗаполнитьЗначенияСвойств(Отбор, СтрокаТЧ);
			
			НайденныеСтроки = ДополнительныеРеквизиты.НайтиСтроки(Отбор);
			
			Если НайденныеСтроки.Количество() = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			СтрокаДопРеквизитовСведений = НайденныеСтроки[0];
			
			ТипЗначенияРеквизита = СтрокаДопРеквизитовСведений.Тип;
			
		Иначе
			
			Реквизит = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ИмяРеквизита);
			
			Если Реквизит = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			
			ТипЗначенияРеквизита = Реквизит.Тип;
			
		КонецЕсли;
		
		Если ТипЗначенияРеквизита = ОписаниеТиповБулево Тогда
			Продолжить;
		КонецЕсли;
		
		СтрокаТЧ.ЗаполнятьОбязательно = Истина;
		
		Модифицированность = Истина;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновХарактеристикНаСервере()
	
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаХарактеристикНаСервере(Объект.ШаблонРабочегоНаименованияХарактеристики);
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаХарактеристикНаСервере(Объект.ШаблонНаименованияДляПечатиХарактеристики);
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновСерийНаСервере()
	
	ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаСерийНаСервере(Объект.ШаблонРабочегоНаименованияСерии);
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораНоменклатурыНаСервере()
	
	Отбор = Новый Структура("ИмяРеквизита");
	
	Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляНоменклатуры Цикл
		
		Отбор.ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
		
		РеквизитИспользуетсяДляОтбора = (Объект.РеквизитыБыстрогоОтбораНоменклатуры.НайтиСтроки(Отбор).Количество() <> 0);
		
		Если РеквизитИспользуетсяДляОтбора Тогда
			
			СтрокаТЧ.ЗаполнятьОбязательно = Истина;
			СтрокаТЧ.ОтображатьПриСоздании = Истина;
			СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
			
			Модифицированность = Истина;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораХарактеристикНаСервере()
	
	Отбор = Новый Структура("ИмяРеквизита");
	
	Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляХарактеристик Цикл
		
		Отбор.ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
		
		Если Объект.РеквизитыБыстрогоОтбораХарактеристик.НайтиСтроки(Отбор).Количество() <> 0 Тогда
			
			СтрокаТЧ.ЗаполнятьОбязательно = Истина;
			СтрокаТЧ.ОтображатьПриСоздании = Истина;
			СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
			
			Модифицированность = Истина;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция УсловияДоступности()
	
	УсловияДоступности = Новый Структура;
	УсловияДоступности.Вставить("ЭтоНеиспользуемыйДляКонтроляТип");
	УсловияДоступности.Вставить("ТипРеквизитаБулево");
	УсловияДоступности.Вставить("ЗаполнятьОбязательно");
	УсловияДоступности.Вставить("ТолькоЗаполнятьОбязательно", Ложь);
	
	Возврат УсловияДоступности;
	
КонецФункции

&НаСервере
Процедура ИспользоватьХарактеристикиПриИзмененииНаСервере()
	
	Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыПоУмолчанию(Объект);
	Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(Объект);
	ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
	НастроитьФорму();
	
КонецПроцедуры

&НаСервере
Процедура ИспользоватьСерииПриИзмененииНаСервере()
	
	Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыПоУмолчанию(Объект);
	Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(Объект);
	ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
	НастроитьФорму();
	
КонецПроцедуры

&НаСервере
Процедура ИспользоватьУпаковкиПриИзмененииНаСервере()

	Если Объект.ИспользоватьУпаковки Тогда
		Объект.ПоставляетсяВМногооборотнойТаре = Ложь;
		Объект.НоменклатураМногооборотнаяТара = Неопределено;
		Объект.ХарактеристикаМногооборотнаяТара = Неопределено;
	КонецЕсли;
	
	НастроитьФорму();
	
КонецПроцедуры

&НаСервере
Процедура НаборУпаковокПриИзмененииНаСервере()
	
	РеквизитыНаборУпаковок = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.НаборУпаковок, 
				"ЕдиницаИзмерения, ЕдиницаДляОтчетов, КоэффициентЕдиницыДляОтчетов");
	
	Если ЗначениеЗаполнено(Объект.НаборУпаковок)
		И Объект.НаборУпаковок <> ПредопределенноеЗначение("Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры") Тогда
		Объект.ЕдиницаИзмерения = РеквизитыНаборУпаковок.ЕдиницаИзмерения;
	КонецЕсли;
	Если ЗначениеЗаполнено(РеквизитыНаборУпаковок.ЕдиницаДляОтчетов) Тогда
		Объект.ЕдиницаДляОтчетов = РеквизитыНаборУпаковок.ЕдиницаДляОтчетов;
		Объект.КоэффициентЕдиницыДляОтчетов = РеквизитыНаборУпаковок.КоэффициентЕдиницыДляОтчетов;
	КонецЕсли;
	
	НастроитьФорму();
	
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьИндивидуальноеНаименованиеПриИзменении(Элемент)
	
	Если ИспользоватьИндивидуальноеНаименование = "ИспользоватьНаименованиеИзКонстанты" Тогда
		Объект.НаименованиеДляПечати = "";
	КонецЕсли;
		
	НастроитьФорму();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатуры()
	
	ТекстВопроса = НСтр("ru = 'Редактирование состава панели быстрого отбора
		|возможно только после записи элемента, записать элемент?'");
		
	ПоказатьВопрос(Новый ОписаниеОповещения("ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатурыЗавершение", ЭтотОбъект),
		ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,,НСтр("ru = 'Редактирование панели быстрого отбора'"));
			
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатурыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса = КодВозвратаДиалога.ОК Тогда
		Если Записать() Тогда
			
			ИзменитьПанельБыстрогоОтбораНоменклатуры();
				
		КонецЕсли;	
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьПанельБыстрогоОтбораНоменклатуры()
	
	Прочитать();
	
	ТекущийТипЭлемента = "ДопРеквизит";
	ТекущийТипВладельцаНабораЭлементов = "Номенклатура";
	
	АдресВХранилище = ПоместитьВХранилищеРеквизитыБыстрогоОтбора();
	
	СтруктураПараметров = Новый Структура("АдресВХранилище", АдресВХранилище);
	
	ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры		

&НаСервере
Функция ПоместитьВХранилищеРеквизитыБыстрогоОтбора()
	
	КоллекцияРеквизитовОтбора      = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовОтбора(Объект, ТекущийТипВладельцаНабораЭлементов);
	КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, ТекущийТипВладельцаНабораЭлементов);
	
	ТаблицаРеквизитовОтбора = Новый ТаблицаЗначений;
	ТаблицаРеквизитовОтбора.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка"));
	ТаблицаРеквизитовОтбора.Колонки.Добавить("ПредставлениеРеквизита", Новый ОписаниеТипов("Строка"));
	ТаблицаРеквизитовОтбора.Колонки.Добавить("ЭтоДопРеквизит", Новый ОписаниеТипов("Булево"));
	ТаблицаРеквизитовОтбора.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
	ТаблицаРеквизитовОтбора.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
	
	Для Каждого Реквизит Из КоллекцияРеквизитовДляКонтроля Цикл
		
		Если Реквизит.ДоступностьУникален Тогда
			НоваяСтрока = ТаблицаРеквизитовОтбора.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Реквизит);
			НоваяСтрока.Используется = КоллекцияРеквизитовОтбора.НайтиСтроки(Новый Структура("ИмяРеквизита",Реквизит.ИмяРеквизита)).Количество() > 0;
		КонецЕсли;
		
	КонецЦикла;
	
	ТаблицаРеквизитовОтбора.Сортировать("ПредставлениеРеквизита");
	
	Возврат ПоместитьВоВременноеХранилище(ТаблицаРеквизитовОтбора, ЭтотОбъект.УникальныйИдентификатор);

КонецФункции

&НаКлиенте
Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристики()
	
	ТекстВопроса = НСтр("ru = 'Редактирование состава панели быстрого отбора
		|возможно только после записи элемента, записать элемент?'");
		
	ПоказатьВопрос(Новый ОписаниеОповещения("ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристикиЗавершение", ЭтотОбъект),
		ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,,НСтр("ru = 'Редактирование панели быстрого отбора'"));
			
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристикиЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса = КодВозвратаДиалога.ОК Тогда
		Если Записать() Тогда
			
			ИзменитьПанельБыстрогоОтбораХарактеристики();
					
		КонецЕсли;	
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьПанельБыстрогоОтбораХарактеристики()
	Прочитать();
	
	КоличествоДоступных = ТаблицаДопРеквизитовХарактеристик.Количество();
	
	Если КоличествоДоступных = 0 Тогда
		
		ТекстСообщения = НСтр("ru = 'Невозможно отредактировать состав панели быстрого отбора характеристик.
		|Не указаны дополнительные реквизиты характеристик.
		|Перед редактированием состава панели быстрого отбора нужно настроить состав 
		|дополнительных реквизитов характеристик.'");
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
		
		Возврат;
		
	КонецЕсли;
	
	ТекущийТипЭлемента = "ДопРеквизит";
	ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры";
	
	АдресВХранилище = ПоместитьВХранилищеРеквизитыБыстрогоОтбора();
	
	СтруктураПараметров = Новый Структура("АдресВХранилище", АдресВХранилище);
	
	ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры		

&НаКлиенте
Процедура ДобавитьСкладВПолитикиУчетаСерийЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт

	Если ТипЗнч(РезультатЗакрытия) <> Тип("СправочникСсылка.Склады") Тогда
		Возврат;
	КонецЕсли;
	
	СтрокаПолитика = Объект.ПолитикиУчетаСерий.Добавить();
	СтрокаПолитика.Склад = РезультатЗакрытия;
	СтрокаПолитика.ЭтоПолитикаДляСклада = Истина;
	
	ИдентификаторСтроки = СтрокаПолитика.ПолучитьИдентификатор();
	
	ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(СтрокаПолитика.Склад, СтрокаПолитика.ПолитикаУчетаСерий);
	
	Элементы.ПолитикиУчетаСерий.ТекущаяСтрока = ИдентификаторСтроки;
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьПодразделениеВПолитикиУчетаСерийЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт

	Если ТипЗнч(РезультатЗакрытия) <> Тип("СправочникСсылка.СтруктураПредприятия") Тогда
		Возврат;
	КонецЕсли;
	
	СтрокаПолитика = Объект.ПолитикиУчетаСерий.Добавить();
	СтрокаПолитика.Склад = РезультатЗакрытия;
	СтрокаПолитика.ЭтоПолитикаДляСклада = Ложь;
	
	ИдентификаторСтроки = СтрокаПолитика.ПолучитьИдентификатор();
	
	ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(СтрокаПолитика.Склад, СтрокаПолитика.ПолитикаУчетаСерий);
	
	Элементы.ПолитикиУчетаСерий.ТекущаяСтрока = ИдентификаторСтроки;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьПредупреждениеПоСкладуКлиент()
	
	ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено
		Или Не ЗначениеЗаполнено(ТекущиеДанные.Склад)
		Или ТипЗнч(ТекущиеДанные.Склад) = Тип("СправочникСсылка.СтруктураПредприятия") Тогда
		Элементы.НадписьПодсказкаПолитикиУчетаСерий.Видимость = Ложь;
		Возврат;
	КонецЕсли;
	
	Элементы.НадписьПодсказкаПолитикиУчетаСерий.Видимость = Не ЕстьОрдернаяСхема(ТекущиеДанные.Склад);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЕстьОрдернаяСхема(Склад)
	
	Если Не ПолучитьФункциональнуюОпцию("ИспользоватьОрдерныеСклады") Тогда
		Возврат Истина;
 	КонецЕсли;
	
	Возврат ПолучитьФункциональнуюОпцию("ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач", Новый Структура("Склад", Склад));
	
КонецФункции

&НаКлиенте
Процедура ИзменитьПанельХарактеристикиДляКлюча()
	
//	Прочитать();
	
	ТекущийТипЭлемента = "ДопРеквизит";
	ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры";
	
	АдресВХранилище = ПоместитьВХранилищеРеквизитыДляКлючаЦен();
	
	СтруктураПараметров = Новый Структура("АдресВХранилище, ФункцияОповещения", АдресВХранилище, "ПодборРеквизитовВТаблицуКлючаЦен");
	
	ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры	

&НаКлиенте
Процедура ИзменитьПанельСерииДляКлюча()
	
//	Прочитать();
	
	ТекущийТипЭлемента = "ДопРеквизит";
	ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры";
	
	АдресВХранилище = ПоместитьВХранилищеРеквизитыДляКлючаЦен();
	
	СтруктураПараметров = Новый Структура("АдресВХранилище, ФункцияОповещения", АдресВХранилище, "ПодборРеквизитовВТаблицуКлючаЦен");
	
	ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры	

&НаСервере
Функция ПоместитьВХранилищеРеквизитыДляКлючаЦен()
	
	КоллекцияРеквизитовКлючаЦен    = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКлючаЦен(Объект, ТекущийТипВладельцаНабораЭлементов);
	КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, ТекущийТипВладельцаНабораЭлементов);
	
	ТаблицаРеквизитовКлючаЦен = Новый ТаблицаЗначений;
	ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка"));
	ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("ПредставлениеРеквизита", Новый ОписаниеТипов("Строка"));
	ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("ЭтоДопРеквизит", Новый ОписаниеТипов("Булево"));
	ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
	ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
	
	Если ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
		
		ДобавляемыйРеквизит = Новый Структура("ИмяРеквизита, ПредставлениеРеквизита");
		
		Если Объект.ИспользоватьНомерСерии Тогда
			
			ДобавляемыйРеквизит.ИмяРеквизита			= "Номер";
			ДобавляемыйРеквизит.ПредставлениеРеквизита	= НСтр("ru = 'Номер'");			
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
			
		КонецЕсли;
			
		Если Объект.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоМесяцев Тогда
			ПредставлениеТочностиУказания	= НСтр("ru = 'месяц, год'");			
		ИначеЕсли Объект.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоДней Тогда
			ПредставлениеТочностиУказания	= НСтр("ru = 'дата'");			
		ИначеЕсли Объект.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоЧасов Тогда
			ПредставлениеТочностиУказания	= НСтр("ru = 'дата, час'");			
		Иначе
			ПредставлениеТочностиУказания	= "";			
		КонецЕсли;

		Если Объект.ИспользоватьСрокГодностиСерии Тогда
			ПредставлениеРеквизита = НСтр("ru = 'Годен до (%ТочностьУказания%)'");
			ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ТочностьУказания%", ПредставлениеТочностиУказания);
			
			ДобавляемыйРеквизит.ИмяРеквизита= "ГоденДо";
			ДобавляемыйРеквизит.ПредставлениеРеквизита = ПредставлениеРеквизита;			
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
		
		Если Объект.ИспользоватьДатуПроизводстваСерии Тогда
			ПредставлениеРеквизита = НСтр("ru = 'Дата производства (%ТочностьУказания%)'");
			ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ТочностьУказания%", ПредставлениеТочностиУказания);
			
			ДобавляемыйРеквизит.ИмяРеквизита           = "ДатаПроизводства";
			ДобавляемыйРеквизит.ПредставлениеРеквизита = ПредставлениеРеквизита;
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
		
		Если Объект.ИспользоватьНомерКИЗГИСМСерии Тогда
			ДобавляемыйРеквизит.ИмяРеквизита	= "НомерКиЗГИСМ";
			ДобавляемыйРеквизит.ПредставлениеРеквизита	= НСтр("ru = '%1'");
			ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "КиЗ");
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
		
		Если Объект.ИспользоватьПроизводителяЕГАИССерии Тогда
			ДобавляемыйРеквизит.ИмяРеквизита	= "ПроизводительЕГАИС";
			ДобавляемыйРеквизит.ПредставлениеРеквизита	= НСтр("ru = 'Производитель (ЕГАИС)'");
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
		
		Если Объект.ИспользоватьСправку2ЕГАИССерии Тогда
			ДобавляемыйРеквизит.ИмяРеквизита	= "Справка2ЕГАИС";
			ДобавляемыйРеквизит.ПредставлениеРеквизита	= НСтр("ru = 'Справка 2 (ЕГАИС)'");
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
		
		Если Объект.ИспользоватьПроизводителяВЕТИССерии Тогда
			ДобавляемыйРеквизит.ИмяРеквизита	= "ПроизводительВЕТИС";
			ДобавляемыйРеквизит.ПредставлениеРеквизита	= НСтр("ru = 'Производитель (%1)'");
			ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "ВетИС");
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
		
		Если Объект.ИспользоватьЗаписьСкладскогоЖурналаВЕТИССерии Тогда
			ДобавляемыйРеквизит.ИмяРеквизита	= "ЗаписьСкладскогоЖурналаВЕТИС";
			ДобавляемыйРеквизит.ПредставлениеРеквизита	= НСтр("ru = 'Запись складского журнала (%1)'");
			ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "ВетИС");
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
		
		Если Объект.ИспользоватьИдентификаторПартииВЕТИССерии Тогда
			ДобавляемыйРеквизит.ИмяРеквизита	= "ИдентификаторПартииВЕТИС";
			ДобавляемыйРеквизит.ПредставлениеРеквизита	= НСтр("ru = 'Идентификатор партии (%1)'");
			ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "ВетИС");
			ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
		КонецЕсли;
	КонецЕсли;
	
	Для Каждого Реквизит Из КоллекцияРеквизитовДляКонтроля Цикл
		
		Если Реквизит.ЗаполнятьОбязательно Тогда
			НоваяСтрока = ТаблицаРеквизитовКлючаЦен.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Реквизит);
			НоваяСтрока.Используется = КоллекцияРеквизитовКлючаЦен.НайтиСтроки(Новый Структура("ИмяРеквизита",Реквизит.ИмяРеквизита)).Количество() > 0;
		КонецЕсли;
		
	КонецЦикла;
	
	ТаблицаРеквизитовКлючаЦен.Сортировать("ПредставлениеРеквизита");
	
	Возврат ПоместитьВоВременноеХранилище(ТаблицаРеквизитовКлючаЦен, ЭтотОбъект.УникальныйИдентификатор);

КонецФункции

&НаСервере
Процедура ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, Знач ДобавляемыйРеквизит)
	
	НоваяСтрока = ТаблицаРеквизитовКлючаЦен.Добавить();
	ЗаполнитьЗначенияСвойств(НоваяСтрока, ДобавляемыйРеквизит);
//			НоваяСтрока.ИмяРеквизита	= ДобавляемыйРеквизит.ИмяРеквизита;
//			НоваяСтрока.ПредставлениеРеквизита	= ДобавляемыйРеквизит.ПредставлениеРеквизита;
	НоваяСтрока.ЭтоДопРеквизит	= Ложь;
	НоваяСтрока.Используется = КоллекцияРеквизитовКлючаЦен.НайтиСтроки(Новый Структура("ИмяРеквизита",ДобавляемыйРеквизит.ИмяРеквизита)).Количество() > 0;
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура ТипНоменклатурыПриИзмененииСервер()
	
	Перечисления.ОсобенностиУчетаНоменклатуры.ОбработатьИзменениеТипаНоменклатуры(Объект.ТипНоменклатуры,
		Объект.ОсобенностьУчета);
	Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыПоУмолчанию(Объект);
	Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(Объект);
	
	Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыДляКонтроля(Объект, "Номенклатура");
	
	ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
	
	НастроитьФорму();
	ОсобенностьУчетаДоИзменения = Объект.ОсобенностьУчета;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
		
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПолитикиУчетаСерий.Склад");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<выберите склад>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	//
		
	УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
		"РеквизитыДляКонтроляНоменклатуры",
		"ТаблицаДопРеквизитовНоменклатуры",
		"ТаблицаДопРеквизитовСерий");
	УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
		"РеквизитыДляКонтроляХарактеристик",
		"ТаблицаДопРеквизитовХарактеристик",
		"ТаблицаДопРеквизитовХарактеристик");
	УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
		"РеквизитыДляКонтроляСерий",
		"ТаблицаДопРеквизитовСерий",
		"ТаблицаДопРеквизитовСерий");
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
		
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокОбщийНабор.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Истина;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
		
		//
		
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокИндивидуальныйНабор.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Истина;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
		
	КонецЕсли;
		
КонецПроцедуры

&НаСервере
Процедура УстановитьУсловноеОформлениеРеквизитыДляКонтроля(ИмяТаблицыРеквизитыДляКонтроля, ИмяТаблицыДопРеквизитов, ИмяТаблицыДопСведений)
	
	ЭтоТаблицаРеквизитыКонтроляСерий = (ИмяТаблицыРеквизитыДляКонтроля = "РеквизитыДляКонтроляСерий");
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ЭлементФормы = Элементы[ИмяТаблицыДопРеквизитов]; // ТаблицаФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыДопРеквизитов + ".ОбщееСвойство");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ЭлементФормы = Элементы[ИмяТаблицыДопСведений]; // ТаблицаФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыДопСведений + ".ОбщееСвойство");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	
	//
			
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ЗаполнятьОбязательно"]; // ПолеФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ДоступностьЗаполнятьОбязательно");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	//
	Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда 
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ОтображатьПриСоздании"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ДоступностьОтображатьПриСоздании");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Ложь;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
		
		//
		
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "Уникален"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ДоступностьУникален");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Ложь;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	КонецЕсли;
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ПредставлениеРеквизитаГиперссылка"]; // ПолеФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
	Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда 
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ВиденСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДоступенСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	КонецЕсли;
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ПредставлениеРеквизита"]; // ПолеФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	
	Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда 
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиВиденСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиДоступенСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	КонецЕсли;
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
	
	//
		
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиЗаполнятьОбязательно"]; // ПолеФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	
	ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЗаполнятьОбязательно");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиЗаполнятьОбязательно"]; // ПолеФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	//Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("Формат", НСтр("ru = 'БЛ=''всегда''; БИ=''с условием'''"));
	
	//
	
	Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда 
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиДоступенСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиВиденСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Ложь;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<для доп. реквизитов>'"));
		Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
		Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);	
		
		//
		
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДоступенСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Истина;
		
		//Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
		Элемент.Оформление.УстановитьЗначениеПараметра("Формат", НСтр("ru = 'БЛ=''доступен всегда''; БИ=''доступен с условием'''"));
		
		//
		
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ВиденСУсловием"]; // ПолеФормы
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Истина;
		
		//Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
		Элемент.Оформление.УстановитьЗначениеПараметра("Формат", НСтр("ru = 'БЛ=''виден всегда''; БИ=''виден с условием'''"));
		
		//
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьРеквизитыДляКонтроляНоменклатуры(Команда)
	Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры;
	УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры, ЦветТекстаФормы);
	УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);	
	УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьРеквизитыДляКонтроляХарактеристик(Команда)
	Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляХарактеристик;
	УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры);
	УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик, ЦветТекстаФормы);	
	УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьРеквизитыДляКонтроляСерий(Команда)
	Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляСерий;
	УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры);
	УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);	
	УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий, ЦветТекстаФормы);	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста 
Процедура УстановитьСтандартноеОформлениеГиперссылки(Кнопка)
	
	Кнопка.Шрифт = Новый Шрифт;
	Кнопка.ЦветТекста = Новый Цвет;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста 
Процедура УстановитьОформлениеНажатойГиперссылки(Кнопка, ЦветТекста)
	
	Кнопка.Шрифт = Новый Шрифт(,,Истина);
	Кнопка.ЦветТекста = ЦветТекста;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьРеквизитыЦенообразования()
	
	Справочники.ВидыНоменклатуры.УстановитьРеквизитыЦенообразованияПоУмолчанию(Объект);
	НастроитьФорму();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьВидВладелец(ЗначащаяЧастьИмениНадписи)
	
	ПараметрыФормыВыбора = Новый Структура;
	ПараметрыФормыВыбора.Вставить("ТекущийВид", Объект.Ссылка);
	ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
	
	ОтборФормыВыбора = ЭтотОбъект[ИмяРеквизитаОтборВладельца(ЗначащаяЧастьИмениНадписи)];
	
	ПараметрыФормыВыбора.Вставить("Отбор", ОтборФормыВыбора);
	
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ЗначащаяЧастьИмениНадписи", ЗначащаяЧастьИмениНадписи);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьВидВладелецЗавершение", ЭтотОбъект, ДополнительныеПараметры);
	
	ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаВыбора",
				ПараметрыФормыВыбора,
				ЭтотОбъект,
				,
				,
				,
				ОписаниеОповещения,
				РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьВидВладелецЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Не ЗначениеЗаполнено(Результат) Тогда
		НастроитьФорму();
	Иначе
		Объект[ИмяРеквизитаВладельца(ДополнительныеПараметры.ЗначащаяЧастьИмениНадписи)] = Результат;
		ВыбратьВидВладелецСервер(ДополнительныеПараметры.ЗначащаяЧастьИмениНадписи);	
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ВыбратьВидВладелецСервер(ЗначащаяЧастьИмениНадписи)
	
	Справочники.ВидыНоменклатуры.УстановитьРеквизитыЦенообразованияПоУмолчанию(Объект);
	ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи);
	НастроитьФорму();
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)
	
	Особенности = ОсобенностиВыводаНадписиПоВладельцу(ЗначащаяЧастьИмениНадписи);
	
	СписокВидов = ЭтотОбъект[ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)];
	ВидВладелец = Объект[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)];
		
	Если (Не Особенности.ЭтотВидСамЯвляетсяВладельцем 
		И Не ЗначениеЗаполнено(ВидВладелец))
		Или Не Особенности.НуженТекстВНадписи Тогда
		СписокВидов.Очистить();
		Возврат;
	КонецЕсли;
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ВидыНоменклатуры.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
	|ГДЕ
	|	&РеквизитВладелец = &ВидВладелец
	|	И &ВидВладелец <> ЗНАЧЕНИЕ(Справочник.ВидыНоменклатуры.ПустаяСсылка)
	|	И ВидыНоменклатуры.Ссылка <> &Ссылка
	|	И НЕ ВидыНоменклатуры.ПометкаУдаления";
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&РеквизитВладелец", "ВидыНоменклатуры." + ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи));
	
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	Если Особенности.ЭтотВидСамЯвляетсяВладельцем Тогда
		Запрос.УстановитьПараметр("ВидВладелец", Объект.Ссылка);
	Иначе
		Запрос.УстановитьПараметр("ВидВладелец", ВидВладелец);
	КонецЕсли;
	Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
	
	СписокВидов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
	
КонецПроцедуры

&НаСервере
Функция ОсобенностиВыводаНадписиПоВладельцу(ЗначащаяЧастьИмениНадписи)
	Особенности = Новый Структура("ЭтотВидСамЯвляетсяВладельцем,НуженТекстВНадписи,МожноРедактироватьВладельца");
	
	Особенности.ЭтотВидСамЯвляетсяВладельцем = Ложь;
	Особенности.НуженТекстВНадписи           = Ложь;
	Особенности.МожноРедактироватьВладельца  = Ложь;
	
	Если ЗначащаяЧастьИмениНадписи = "ТоварныхКатегорий" Тогда
		Если Не Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
			Особенности.ЭтотВидСамЯвляетсяВладельцем = Истина;
		КонецЕсли;
		
		Особенности.НуженТекстВНадписи = ПолучитьФункциональнуюОпцию("ИспользоватьТоварныеКатегории");
		Особенности.МожноРедактироватьВладельца = Не Элементы.НастройкаТоварныхКатегорий.ТолькоПросмотр;
		
	ИначеЕсли ЗначащаяЧастьИмениНадписи = "Серий" Тогда
		Если Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
			Особенности.ЭтотВидСамЯвляетсяВладельцем = Истина;
		КонецЕсли;
		
		Особенности.НуженТекстВНадписи = Объект.ИспользоватьСерии;
		Особенности.МожноРедактироватьВладельца = Не Элементы.ИспользоватьСерии.ТолькоПросмотр;
		
	ИначеЕсли ЗначащаяЧастьИмениНадписи = "Характеристик" Тогда
		Если Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры Тогда
			Особенности.ЭтотВидСамЯвляетсяВладельцем = Истина;
		КонецЕсли;	
		
		Особенности.НуженТекстВНадписи =  Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры
											Или  Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры;
		Особенности.МожноРедактироватьВладельца = Не Элементы.ИспользованиеХарактеристик.ТолькоПросмотр;
		
	КонецЕсли;
	
	Возврат Особенности;
КонецФункции

&НаСервере
Функция ОсобенностиВыводаНадписиИзмененияНабораРеквизитовЦенообразования(ЗначащаяЧастьИмениНадписи)
	Особенности = Новый Структура("НуженТекстВНадписи,МожноРедактировать");
	
	Особенности.НуженТекстВНадписи           = Ложь;
	Особенности.МожноРедактировать  = Ложь;
	
	Если ЗначащаяЧастьИмениНадписи = "Серии" Тогда
		
		Особенности.НуженТекстВНадписи = Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам;
		Особенности.МожноРедактировать = Не Элементы.НастройкиКлючаЦенПоСерии.ТолькоПросмотр;
		
	ИначеЕсли ЗначащаяЧастьИмениНадписи = "Характеристики" Тогда
		
		Особенности.НуженТекстВНадписи =  Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам;
		Особенности.МожноРедактировать = Не Элементы.НастройкиКлючаЦенПоХарактеристике.ТолькоПросмотр;
		
	КонецЕсли;
	
	Возврат Особенности;
КонецФункции

&НаСервере
Процедура СформироватьНадписьПоВидуВладельцу(ЗначащаяЧастьИмениНадписи);
	Особенности = ОсобенностиВыводаНадписиПоВладельцу(ЗначащаяЧастьИмениНадписи);
	
	МассивСтрок = Новый Массив;
	Если Особенности.НуженТекстВНадписи Тогда
		
		СписокВидов = ЭтотОбъект[ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)];
		ПредставлениеКоличестваВидов = "";
		
		Если Особенности.ЭтотВидСамЯвляетсяВладельцем Тогда
			
			Если ЗначащаяЧастьИмениНадписи <> "Серий" Тогда
				МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Список'"),,,,"ОткрытьСписок"));
				Если СписокВидов.Количество() > 0 Тогда
					МассивСтрок.Добавить(" ");
					МассивСтрок.Добавить(НСтр("ru = 'используется еще в'"));
					МассивСтрок.Добавить(" ");
					ПредставлениеКоличестваВидов = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(СписокВидов.Количество(),
																													НСтр("ru = 'виде,видах,видах'"));
				КонецЕсли;
			Иначе
				Если СписокВидов.Количество() > 0 Тогда
					МассивСтрок.Добавить(" ");
					МассивСтрок.Добавить(НСтр("ru = 'и еще'"));
					МассивСтрок.Добавить(" ");
					ПредставлениеКоличестваВидов = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(СписокВидов.Количество(),
																													НСтр("ru = 'вида,видов,видов'"));
				КонецЕсли;
			КонецЕсли;
			
		Иначе
			ВидВладелец = Объект[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)];
			
			Если Не ЗначениеЗаполнено(ВидВладелец) Тогда
				МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = '<вид не выбран>'"),Новый Шрифт(,,Истина),ЦветаСтиля.ЦветОсобогоТекста));
				МассивСтрок.Добавить(" ");
				МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Выбрать'"),,,,"ИзменитьВладельца"));
			Иначе	
				
				ПредставлениеВида = ОбщегоНазначенияУТКлиентСервер.ПредставлениеСтрокиСДлинойНеБолее(Строка(ВидВладелец), 40);
				МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ПредставлениеВида,,,,"ОткрытьВладельца"));
				
				Если Особенности.МожноРедактироватьВладельца Тогда
					МассивСтрок.Добавить(" (");
					МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'изменить'"),,,,"ИзменитьВладельца"));
					МассивСтрок.Добавить(")");
				КонецЕсли;	
				
				Если СписокВидов.Количество() > 0 Тогда
					МассивСтрок.Добавить(" ");
					МассивСтрок.Добавить(НСтр("ru = 'и еще с'"));
					МассивСтрок.Добавить(" ");
					ПредставлениеКоличестваВидов = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(СписокВидов.Количество(),
																													НСтр("ru = 'видом,видами,видами'"));
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
		Если Не ПустаяСтрока(ПредставлениеКоличестваВидов) Тогда
			МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ПредставлениеКоличестваВидов,
													,
													,
													,
													"ОткрытьСписокВидовСТемЖеВладельцем"));
		КонецЕсли;
	КонецЕсли;
	ЭлементФормы = Элементы[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)]; // ДекорацияФормы
	ЭлементФормы.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок);
	
КонецПроцедуры

&НаСервере
Процедура СформироватьНадписьРазрезаЦенообразования(ЗначащаяЧастьИмениНадписи);
	Особенности = ОсобенностиВыводаНадписиИзмененияНабораРеквизитовЦенообразования(ЗначащаяЧастьИмениНадписи);
	
	Если Особенности.НуженТекстВНадписи Тогда
		
		МассивСтрок = Новый Массив;
	
		Если ЗначащаяЧастьИмениНадписи = "Характеристики" Тогда
			
			МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен(ЗначащаяЧастьИмениНадписи);
			
			Если МассивОписанияРеквизитов.Количество() Тогда
				
				МассивСтрок.Добавить("<");
				МассивСтрок.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
				МассивСтрок.Добавить(">");
				
			Иначе
				
				МассивСтрок.Добавить(НСтр("ru = '<Реквизиты не выбраны>'"));
					
			КонецЕсли;
			
			ЭлементФормы = Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики;
			
		ИначеЕсли ЗначащаяЧастьИмениНадписи = "Серии" Тогда
			
			МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен(ЗначащаяЧастьИмениНадписи);

			Если МассивОписанияРеквизитов.Количество() Тогда
				
				МассивСтрок.Добавить("<");
				МассивСтрок.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
				МассивСтрок.Добавить(">");
				
			Иначе
				
				МассивСтрок.Добавить(НСтр("ru = '<Реквизиты не выбраны>'"));
					
			КонецЕсли;
			
			ЭлементФормы = Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Серии;
			
		КонецЕсли;
		
		Если Особенности.МожноРедактировать Тогда
			МассивСтрок.Добавить(" (");
			МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'изменить'"),,,,"ИзменитьНастройкуИспользованияРеквизитов"));
			МассивСтрок.Добавить(")");
		КонецЕсли;
		
		ЭлементФормы.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, ЗначащаяЧастьИмениНадписи, СтандартнаяОбработка);
	
	СтандартнаяОбработка = Ложь;
	
	Если НавигационнаяСсылка = "ОткрытьВладельца" Тогда
		ПоказатьЗначение(,Объект[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)]);
	ИначеЕсли НавигационнаяСсылка = "ИзменитьВладельца" Тогда
		ВыбратьВидВладелец(ЗначащаяЧастьИмениНадписи);
	ИначеЕсли НавигационнаяСсылка = "ОткрытьСписокВидовСТемЖеВладельцем" Тогда
		ПоказатьЗначение(,ЭтотОбъект[ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)]);
	ИначеЕсли НавигационнаяСсылка = "ОткрытьСписок" Тогда
		Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
			
			ТекстВопроса = Нстр("ru = 'Данные еще не записаны.
			|Переход к списку возможен только после записи данных.'");
			
			КнопкиВопроса = Новый СписокЗначений;
			КнопкиВопроса.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Записать'"));
			КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
			
			ДополнительныеПараметрыВопроса = Новый Структура;
			ДополнительныеПараметрыВопроса.Вставить("ЗначащаяЧастьИмениНадписи", ЗначащаяЧастьИмениНадписи);
			
			ПоказатьВопрос(Новый ОписаниеОповещения("ОткрытьСписокЗавершение", ЭтотОбъект, ДополнительныеПараметрыВопроса),
							ТекстВопроса,
							КнопкиВопроса);
			Возврат;
			
		КонецЕсли;
		
		ОткрытьСписокФрагмент(ЗначащаяЧастьИмениНадписи);
	Иначе
		ТекстИсключения = НСтр("ru = 'Неизвестная навигационная ссылка.'");
		
		ВызватьИсключение ТекстИсключения;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьСписокЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
        Возврат;
    КонецЕсли;
    
    Попытка
        ЭлементЗаписан = Записать();
    Исключение
        Возврат;
    КонецПопытки;
    
    Если Не ЭлементЗаписан Тогда
        Возврат;
    КонецЕсли;
    
   ОткрытьСписокФрагмент(ДополнительныеПараметры.ЗначащаяЧастьИмениНадписи);

КонецПроцедуры

&НаКлиенте
Процедура ОткрытьСписокФрагмент(ЗначащаяЧастьИмениНадписи)
    
	Если ЗначащаяЧастьИмениНадписи = "ТоварныхКатегорий" Тогда
		ПараметрыОткрытия = Новый Структура;
	    ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Владелец", Объект.Ссылка));
	    ПараметрыОткрытия.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
	    
	    ОткрытьФорму("Справочник.ТоварныеКатегории.ФормаСписка",
					ПараметрыОткрытия,
					ЭтотОбъект,
					,
					,
					,
					,
					РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
				
	ИначеЕсли ЗначащаяЧастьИмениНадписи = "Характеристик" Тогда
				
	    ПараметрыОткрытия = Новый Структура;
	    ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Владелец", Объект.Ссылка));
	    ПараметрыОткрытия.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
	    
	    ОткрытьФорму("Справочник.ХарактеристикиНоменклатуры.Форма.ФормаСписка",
					ПараметрыОткрытия,
					ЭтотОбъект,
					,
					,
					,
					,
					РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ЗаписатьОбщееСвойствоНаСервере(ВыбранноеЗначение, НаборДопРеквизитовСведений, ЭтоНаборыДополнительныхСведений)
	
	Блокировка = Новый БлокировкаДанных;
	
	ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений");
	ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
	ЭлементБлокировки.УстановитьЗначение("Ссылка", НаборДопРеквизитовСведений);
	
	Попытка
		ЗаблокироватьДанныеДляРедактирования(НаборДопРеквизитовСведений);
		НачатьТранзакцию();
		Попытка
			Блокировка.Заблокировать();
			ЗаблокироватьДанныеДляРедактирования(НаборДопРеквизитовСведений);
			
			ТекущийНаборОбъект = НаборДопРеквизитовСведений.ПолучитьОбъект();
			Если ТекущийНаборОбъект.ВерсияДанных <> ВерсияДанныхТекущегоНабора Тогда
				Если ЭтоНаборыДополнительныхСведений Тогда
					ВызватьИсключение
					НСтр("ru = 'Действие не выполнено, так как состав дополнительных сведений
					|был изменен другим пользователем.
					|Новый состав дополнительных сведений прочитан.
					|
					|Повторите действие, если требуется.'");
				Иначе
					ВызватьИсключение
					НСтр("ru = 'Действие не выполнено, так как состав дополнительных реквизитов
					|был изменен другим пользователем.
					|Новый состав дополнительных реквизитов прочитан.
					|
					|Повторите действие, если требуется.'");
				КонецЕсли;
			КонецЕсли;
			
			ТабличнаяЧасть = ТекущийНаборОбъект[?(ЭтоНаборыДополнительныхСведений,
				"ДополнительныеСведения", "ДополнительныеРеквизиты")];
			
			НайденнаяСтрока = ТабличнаяЧасть.Найти(ВыбранноеЗначение.ОбщееСвойство, "Свойство");
			
			Если НайденнаяСтрока = Неопределено Тогда
				НоваяСтрока = ТабличнаяЧасть.Добавить();
				НоваяСтрока.Свойство = ВыбранноеЗначение.ОбщееСвойство;
				ТекущийНаборОбъект.Записать();
				
			ИначеЕсли НайденнаяСтрока.ПометкаУдаления Тогда
				НайденнаяСтрока.ПометкаУдаления = Ложь;
				ТекущийНаборОбъект.Записать();
			КонецЕсли;
			
			Модифицированность = Истина;
			
			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			ВызватьИсключение;
		КонецПопытки;
	Исключение
		РазблокироватьДанныеДляРедактирования(НаборДопРеквизитовСведений);
		ВызватьИсключение;
	КонецПопытки;
	
	ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере();
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьВерсиюДанныхНабора(Набор)
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Набор, "ВерсияДанных");
КонецФункции

&НаКлиенте
Процедура ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда
		ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий = Истина;
		Возврат;
	КонецЕсли;
	
	УстановитьПолитикуУчетаСерийПоУмолчанию();
	ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииСервер();
	ОбновитьПредупреждениеПоСкладуКлиент();
	
КонецПроцедуры

&НаСервере
Процедура ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииСервер()
	
	ДействиеПриИзмененииПолитикУчетаСерий();
	УдалитьДублиСкладовПолитикУчетаСерийНоменклатуры();
	
КонецПроцедуры

&НаСервере
Процедура ДействиеПриИзмененииПолитикУчетаСерий()
	
	ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
	НастроитьФорму();
	
КонецПроцедуры

&НаСервере
Процедура УдалитьДублиСкладовПолитикУчетаСерийНоменклатуры()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПолитикиУчетаСерий.Склад КАК Склад,
	|	1                        КАК КоличествоСкладов
	|ПОМЕСТИТЬ ПолитикиУчетаСерий
	|ИЗ
	|	&ТаблицаПолитик КАК ПолитикиУчетаСерий
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПолитикиУчетаСерий.Склад                    КАК Склад,
	|	СУММА(ПолитикиУчетаСерий.КоличествоСкладов) КАК КоличествоСкладов
	|ИЗ
	|	ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
	|
	|СГРУППИРОВАТЬ ПО
	|	ПолитикиУчетаСерий.Склад
	|
	|ИМЕЮЩИЕ
	|	СУММА(ПолитикиУчетаСерий.КоличествоСкладов) > 1";
	
	Запрос.УстановитьПараметр("ТаблицаПолитик", Объект.ПолитикиУчетаСерий.Выгрузить());
	
	ДублиСкладов      = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
	УдаляемыеПолитики = Новый Массив;
	
	Для Каждого ПовторяемыйСклад Из ДублиСкладов Цикл
		ОтборСтрок    = Новый Структура("Склад", ПовторяемыйСклад);
		СтрокиПолитик = Объект.ПолитикиУчетаСерий.НайтиСтроки(ОтборСтрок);
		
		Для Сч = 0 По СтрокиПолитик.ВГраница() Цикл
			Если Сч = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			УдаляемыеПолитики.Добавить(СтрокиПолитик[Сч]);
		КонецЦикла;
	КонецЦикла;
	
	Для Каждого УдаляемаяПолитика Из УдаляемыеПолитики Цикл
		Объект.ПолитикиУчетаСерий.Удалить(УдаляемаяПолитика);
	КонецЦикла;
	
КонецПроцедуры

// Удаляет дубли строк, а так же скрытые строки если введена переопределяющая строка.
//
// Параметры:
//  Склад				 - СправочникСсылка.Склады, СправочникСсылка.СтруктураПредприятия - склад или подразделение новой строки
//  ПолитикаУчетаСерий	 - СправочникСсылка.ПолитикиУчетаСерий - политика учета серий новой строки.
//
&НаСервере
Процедура ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(Склад, ПолитикаУчетаСерий)
	
	СтрокиКУдалению = Новый Массив();
	СтрокиССовпадающимиПолитиками = Новый Массив();
	
	// Поиск всех имеющихся строк по текущему складу
	СтруктураОтбора = Новый Структура();
	СтруктураОтбора.Вставить("Склад", Склад);
	
	НайденныеСтроки = Объект.ПолитикиУчетаСерий.НайтиСтроки(СтруктураОтбора);
	
	ИндексовНайденныхСтрок = НайденныеСтроки.Количество() - 1;
	Для Индекс = 0 По ИндексовНайденныхСтрок Цикл
		Строка = НайденныеСтроки[Индекс];
		
		Если Строка.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий Тогда
			// Удаление скрытых строк.
			СтрокиКУдалению.Добавить(Строка);
		ИначеЕсли Строка.ПолитикаУчетаСерий = ПолитикаУчетаСерий Тогда
			// Заполнение дублей строк для последующего удаления лишних
			СтрокиССовпадающимиПолитиками.Добавить(Строка);
		Иначе
			// Строки где политика отличается от умолчания остаются - пользователь
			// должен явным образом выбрать какую строку нужно оставить.
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого Строка Из СтрокиКУдалению Цикл
		Объект.ПолитикиУчетаСерий.Удалить(Строка);
		
		СтрокаВМассивеСовпадающихПолитик = СтрокиССовпадающимиПолитиками.Найти(Строка);
		Если СтрокаВМассивеСовпадающихПолитик <> Неопределено Тогда
			СтрокиССовпадающимиПолитиками.Удалить(СтрокаВМассивеСовпадающихПолитик);
		КонецЕсли;
	КонецЦикла;
	
	Если СтрокиССовпадающимиПолитиками.Количество() > 1 Тогда
		Для Индекс = 1 По СтрокиССовпадающимиПолитиками.Количество() - 1 Цикл
			Строка = СтрокиССовпадающимиПолитиками[Индекс];
			Объект.ПолитикиУчетаСерий.Удалить(Строка);
		КонецЦикла;
	КонецЕсли;
	
	ДействиеПриИзмененииПолитикУчетаСерий();
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьПолитикуУчетаСерийПоУмолчанию()
	
	Для Каждого Строка Из Объект.ПолитикиУчетаСерий Цикл
		Строка.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий;
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура УдалитьПустыеСтрокиПолитикУчетаСерий()
	
	ПараметрыОтбора = Новый Структура();
	ПараметрыОтбора.Вставить("Склад", Неопределено);
	ПараметрыОтбора.Вставить("ПолитикаУчетаСерий", Справочники.ПолитикиУчетаСерий.ПустаяСсылка());
	СтрокиКУдалению = Объект.ПолитикиУчетаСерий.НайтиСтроки(ПараметрыОтбора);
	
	Для Каждого ЭлементКУдалению Из СтрокиКУдалению Цикл
		Объект.ПолитикиУчетаСерий.Удалить(ЭлементКУдалению);
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта()
	
	Если Объект.ИспользоватьИндивидуальноеНаименованиеПриПечати Тогда
		ИспользоватьИндивидуальноеНаименование = "ИспользоватьИндивидуальноеНаименование";
	Иначе
		ИспользоватьИндивидуальноеНаименование = "ИспользоватьНаименованиеИзКонстанты";
	КонецЕсли;
	
	Если Объект.ИспользоватьСерии Тогда
		Если Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
			ВариантЗаданияНастроекСерий = "ИспользуютсяТакжеКакВДругомВидеНоменклатуры";
		Иначе
			ВариантЗаданияНастроекСерий = "НастроеныДляВидаНоменклатуры";
		КонецЕсли;
	Иначе
		ВариантЗаданияНастроекСерий = "";
	КонецЕсли;
	
	Если Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
		НастройкаТоварныхКатегорий = "ОбщиеСДругимВидомНоменклатуры";
	Иначе
		НастройкаТоварныхКатегорий = "НастроеныДляЭтогоВидаНоменклатуры";
	КонецЕсли;
	
	Если Объект.ИспользоватьУпаковки Тогда
		Если Объект.НаборУпаковок = Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры Тогда
			ИспользованиеУпаковок = "ИндивидуальныйНабор";
		Иначе
			ИспользованиеУпаковок = "ОбщийНабор";
		КонецЕсли;
	КонецЕсли;
	
	ОтборВладельцаТоварныхКатегорий = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(Объект, "ВладелецТоварныхКатегорий");
	ОтборВладельцаХарактеристик     = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(Объект, "ВладелецХарактеристик");
	ОтборВладельцаСерий             = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(Объект, "ВладелецСерий");
	
	ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем("ТоварныхКатегорий");
	ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем("Характеристик");
	ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем("Серий");
	
	ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий = Ложь;
	
	Для Каждого СтрТабл Из Объект.ПолитикиУчетаСерий Цикл
		
		СтрТабл.ЭтоПолитикаДляСклада = Не ЗначениеЗаполнено(СтрТабл.Склад)
										Или (ТипЗнч(СтрТабл.Склад) = Тип("СправочникСсылка.Склады"));
		СтрТабл.СоответствуетПолитикеПоУмолчанию = СтрТабл.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий;
		
		Если Не СтрТабл.СоответствуетПолитикеПоУмолчанию Тогда
			ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзмененияСтруктура = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
	ЗаполнитьЗначенияСвойств(ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзмененияСтруктура, Объект);
	ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзменения = Новый ФиксированнаяСтруктура(ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзмененияСтруктура);
	
	ЗаполнитьСпискиДопРеквизитовСведений();

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура СвернутьРазвернутьВсеГруппы(Форма)
	
	ИменаСворачиваемыхГрупп = ИменаСворачиваемыхГрупп();
	
	Для Каждого ИмяГруппы Из ИменаСворачиваемыхГрупп Цикл
		
		Если Форма.НастройкаВидимостиФормы = "ПоказатьВсе" Тогда
			Форма.Элементы[ИмяГруппы].Показать();
		Иначе
			Форма.Элементы[ИмяГруппы].Скрыть();
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ИменаСворачиваемыхГрупп()
	
	ИменаСворачиваемыхГрупп = Новый Массив;
	
	ИменаСворачиваемыхГрупп.Добавить("СтраницаОсновное");
	ИменаСворачиваемыхГрупп.Добавить("СтраницаДопРеквизиты");
	ИменаСворачиваемыхГрупп.Добавить("СтраницаНастройкиЦенообразования");	
	ИменаСворачиваемыхГрупп.Добавить("СтраницаШаблоныНаименований");
	ИменаСворачиваемыхГрупп.Добавить("СтраницаНастройкиПанелиБыстрогоОтбора");
	ИменаСворачиваемыхГрупп.Добавить("СтраницаНастройкиСоздания");
	ИменаСворачиваемыхГрупп.Добавить("СтраницаЗначенияПоУмолчанию");
	ИменаСворачиваемыхГрупп.Добавить("СтраницаДопСведения");
	
	Возврат ИменаСворачиваемыхГрупп;
КонецФункции

&НаКлиенте
Процедура РеквизитыДляКонтроляВыбор(ЗначащаяЧастьИмени, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекущиеДанные = Элементы[ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени)].ТекущиеДанные;
	
	ПараметрыОбработки = Новый Структура;
	ПараметрыОбработки.Вставить("ТекущееСвойство",		ТекущиеДанные.Свойство);
	ПараметрыОбработки.Вставить("ЗначащаяЧастьИмени",	ЗначащаяЧастьИмени);
	ПараметрыОбработки.Вставить("Поле",					Поле);
	
	Если Модифицированность Тогда
		ОписаниеОповещения	= Новый ОписаниеОповещения("РеквизитыДляКонтроляВыборЗавершение", ЭтотОбъект, ПараметрыОбработки);
		ТекстВопроса		= НСтр("ru = 'Перед открытием формы настройки необходимо записать элемент. Продолжить?'");
		
		ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена);
		
		Возврат;
	КонецЕсли;
	
	РеквизитыДляКонтроляВыборЗавершение(Неопределено, ПараметрыОбработки);
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыДляКонтроляВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено
		И Результат <> КодВозвратаДиалога.ОК Тогда
		
		Возврат;
		
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.ОК Тогда
		Если Не Записать() Тогда
			Возврат;
		КонецЕсли;
	КонецЕсли;
	
	ТекущееСвойство		= ДополнительныеПараметры.ТекущееСвойство;
	ЗначащаяЧастьИмени	= ДополнительныеПараметры.ЗначащаяЧастьИмени;
	Поле				= ДополнительныеПараметры.Поле;
	
	ОтборРеквизитов			= Новый Структура("Свойство", ТекущееСвойство);
	
	СтрокиРеквизитов		= Объект[ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени)].НайтиСтроки(ОтборРеквизитов);
	
	ТекущаяСтрока			= Неопределено;
	РедактируемоеСвойство	= Неопределено;
	
	Если СтрокиРеквизитов.Количество() > 0 Тогда
		ТекущаяСтрока			= СтрокиРеквизитов[0];
		РедактируемоеСвойство	= СтрокиРеквизитов[0].Свойство;
	Иначе
		Возврат;
	КонецЕсли;
	
	Если ТекущаяСтрока.ЭтоОбщийРеквизит Тогда
		
		Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
			ТекущийНаборСвойств = НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
		ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
			ТекущийНаборСвойств = НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
		ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
			ТекущийНаборСвойств = НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
		КонецЕсли;
		
	Иначе
		
		Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
			ТекущийНаборСвойств = Объект.НаборСвойств;
		ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
			ТекущийНаборСвойств = Объект.НаборСвойствХарактеристик;
		ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
			ТекущийНаборСвойств = Объект.НаборСвойствСерий;
		КонецЕсли;
		
	КонецЕсли;
	
	РедактируемоеСвойствоВидНастройки = "";
	
	Если СтрНайти(Поле.Имя, "ПредставлениеРеквизита") <> 0 Тогда
		
		ПараметрыФормыСвойства = Новый Структура;
		ПараметрыФормыСвойства.Вставить("ТекущийНаборСвойств",	ТекущийНаборСвойств);
		ПараметрыФормыСвойства.Вставить("Ключ",					РедактируемоеСвойство);
		
		ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта",
					ПараметрыФормыСвойства,
					ЭтотОбъект,
					,
					,
					,
					,
					РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
	ИначеЕсли СтрНайти(Поле.Имя, "Виден") <> 0
		Или СтрНайти(Поле.Имя, "Доступен") <> 0
		Или СтрНайти(Поле.Имя, "ЗаполнятьОбязательно") <> 0 Тогда
		
		ЗаполнитьЗависимостиРедактируемогоСвойства();
		
		Если СтрНайти(Поле.Имя, "Виден") <> 0 Тогда
			РедактируемоеСвойствоВидНастройки = "Виден";
		ИначеЕсли СтрНайти(Поле.Имя, "Доступен") <> 0 Тогда
			РедактируемоеСвойствоВидНастройки = "Доступен";
		Иначе
			РедактируемоеСвойствоВидНастройки = "ЗаполнятьОбязательно";
		КонецЕсли;
		
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("ДополнительныйРеквизит",	РедактируемоеСвойство);
		ПараметрыФормы.Вставить("ЗависимостиРеквизитов",	РедактируемоеСвойствоЗависимости);
		ПараметрыФормы.Вставить("Набор",					ТекущийНаборСвойств);
		ПараметрыФормы.Вставить("НастраиваемоеСвойство",	РедактируемоеСвойствоВидНастройки);
		
		ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ЗависимостьРеквизитов",
					ПараметрыФормы,
					ЭтотОбъект,
					,
					,
					,
					,
					РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьЗависимостиРедактируемогоСвойства()
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.ЗависимоеСвойство КАК ЗависимоеСвойство,
	|	ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.НаборСвойств КАК НаборСвойств,
	|	ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Реквизит КАК Реквизит,
	|	ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Условие КАК Условие,
	|	ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Значение КАК Значение
	|ИЗ
	|	ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов КАК ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов
	|ГДЕ
	|	ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Ссылка = &Ссылка";
	
	Запрос.УстановитьПараметр("Ссылка", РедактируемоеСвойство);
	
	РедактируемоеСвойствоЗависимости.Загрузить(Запрос.Выполнить().Выгрузить());
	
КонецПроцедуры

&НаСервере
Процедура ЗаписатьНастройкиСвойства(НастройкиОтбораВХранилище)
	
	ЗначащаяЧастьИмени = "Номенклатуры";
	
	Если Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляХарактеристик Тогда
		ЗначащаяЧастьИмени = "Характеристик";
	ИначеЕсли Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляСерий Тогда
		ЗначащаяЧастьИмени = "Серий";
	КонецЕсли;
	
	ИмяТаблицыРеквизитыДляКонтроля = ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени);
	
	ОтборСвойств	= Новый Структура("Свойство", РедактируемоеСвойство);
	СтрокиСвойств	= Объект[ИмяТаблицыРеквизитыДляКонтроля].НайтиСтроки(ОтборСвойств);
	
	Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
		НаборСвойств = Объект.НаборСвойств;
	ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
		НаборСвойств = Объект.НаборСвойствХарактеристик;
	ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
		НаборСвойств = Объект.НаборСвойствСерий;
	Иначе
		ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определен набор свойств для ""%1""'"), ЗначащаяЧастьИмени);
	КонецЕсли;
	
	Если СтрокиСвойств.Количество() > 0 Тогда
		Если СтрокиСвойств[0].ЭтоОбщийРеквизит Тогда
			НаборСвойств = ?(ЗначащаяЧастьИмени = "Номенклатуры",
							УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие"),
							?(ЗначащаяЧастьИмени = "Характеристик",
								УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие"),
								УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие")));
		КонецЕсли;
	КонецЕсли;
	
	СвойствоОбъект = РедактируемоеСвойство.ПолучитьОбъект();

	Для Каждого КлючЗначение Из НастройкиОтбораВХранилище Цикл
		
		ОтборСтрок = Новый Структура;
		ОтборСтрок.Вставить("НаборСвойств",			НаборСвойств);
		ОтборСтрок.Вставить("ЗависимоеСвойство",	КлючЗначение.Ключ);
		
		НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
		
		Для Каждого СтрМас Из НайденныеСтроки Цикл
			СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
		КонецЦикла;
		
		Если КлючЗначение.Значение <> Неопределено Тогда
			ДанныеХранилища = КлючЗначение.Значение; // ХранилищеЗначения -
			ТаблицаНастроек = ДанныеХранилища.Получить();
			
			Для Каждого СтрТабл Из ТаблицаНастроек Цикл
				НоваяСтрока = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
				
				ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрТабл);
			КонецЦикла;
		КонецЕсли;
		
	КонецЦикла;
	
	СвойствоОбъект.Записать();
	
	ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьРазрезыЦенообразования()

	МассивТекстов = Новый Массив;
	
	МассивТекстов.Добавить(НСтр("ru = 'Номенклатура'"));
	
	Если Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.Использовать 
		Или Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
	
		МассивТекстов.Добавить(НСтр("ru = ', Характеристика'"));
		
		Если Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
			
			МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен("Характеристики");
			
			Если МассивОписанияРеквизитов.Количество() Тогда
				
				МассивТекстов.Добавить(" (");			
				МассивТекстов.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
				МассивТекстов.Добавить(")");
				
			КонецЕсли;
			
		КонецЕсли;
	
	КонецЕсли;	
	
	Если Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.Использовать
		Или Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
	
		МассивТекстов.Добавить(НСтр("ru = ', Серия'"));
	
		Если Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
			
			МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен("Серии");
			
			Если МассивОписанияРеквизитов.Количество() Тогда
				
				МассивТекстов.Добавить(" (");			
				МассивТекстов.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
				МассивТекстов.Добавить(")");
				
			КонецЕсли;
			
		КонецЕсли;
	
	КонецЕсли;	
	
	Если Объект.НастройкиКлючаЦенПоУпаковке = Перечисления.ВариантОтбораДляКлючаЦен.Использовать Тогда
	
		МассивТекстов.Добавить(НСтр("ru = ', Упаковка'"));

	КонецЕсли;	
	
	Если Объект.РазрезыЦенообразования <> СтрСоединить(МассивТекстов) Тогда		
		Объект.РазрезыЦенообразования = СтрСоединить(МассивТекстов);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПолучитьДанныеПоРеквизитамДляКлючаЦен(Знач ЗначащаяЧастьИмениНадписи)
	
	МассивОписанияРеквизитов = Новый Массив;			
	
	Если ЗначащаяЧастьИмениНадписи = "Характеристики" Тогда
		
		Если Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры Тогда
			
			Для Каждого Реквизит Из Объект.РеквизитыХарактеристикДляКлючаЦен Цикл				
				МассивОписанияРеквизитов.Добавить(Строка(Реквизит.ПредставлениеРеквизита));
			КонецЦикла;
			
		ИначеЕсли Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда 
			
			Запрос = Новый Запрос;
			Запрос.Текст =
				"ВЫБРАТЬ
				|	ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен.Ссылка,
				|	ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен.ПредставлениеРеквизита
				|ИЗ
				|	Справочник.ВидыНоменклатуры.РеквизитыХарактеристикДляКлючаЦен КАК ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен
				|ГДЕ
				|	ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен.Ссылка = &ВидНоменклатуры";
			
			Запрос.УстановитьПараметр("ВидНоменклатуры", Объект.ВладелецХарактеристик);
			
			ТаблицаРезультатаЗапроса = Запрос.Выполнить().Выгрузить();
			
			МассивОписанияРеквизитов = ТаблицаРезультатаЗапроса.ВыгрузитьКолонку("ПредставлениеРеквизита");
			
		КонецЕсли;
	ИначеЕсли ЗначащаяЧастьИмениНадписи = "Серии" Тогда 

		Если Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
			
			Для Каждого Реквизит Из Объект.РеквизитыСерийДляКлючаЦен Цикл				
				МассивОписанияРеквизитов.Добавить(Строка(Реквизит.ПредставлениеРеквизита));
			КонецЦикла;
			
		Иначе 
			
			Запрос = Новый Запрос;
			Запрос.Текст =
				"ВЫБРАТЬ
				|	ВидыНоменклатурыРеквизитыСерийДляКлючаЦен.Ссылка,
				|	ВидыНоменклатурыРеквизитыСерийДляКлючаЦен.ПредставлениеРеквизита
				|ИЗ
				|	Справочник.ВидыНоменклатуры.РеквизитыСерийДляКлючаЦен КАК ВидыНоменклатурыРеквизитыСерийДляКлючаЦен
				|ГДЕ
				|	ВидыНоменклатурыРеквизитыСерийДляКлючаЦен.Ссылка = &ВидНоменклатуры";
			
			Запрос.УстановитьПараметр("ВидНоменклатуры", Объект.ВладелецСерий);
			
			ТаблицаРезультатаЗапроса = Запрос.Выполнить().Выгрузить();
			
			МассивОписанияРеквизитов = ТаблицаРезультатаЗапроса.ВыгрузитьКолонку("ПредставлениеРеквизита");
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат МассивОписанияРеквизитов;
	
КонецФункции

&НаСервере
Процедура КодТНВЭДПриИзмененииСервер()
	
	Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.КодТНВЭД, "ПрослеживаемыйТовар") Тогда
		Объект.ВестиУчетПоГТД = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция НаборСвойствПоИмени(ИмяНабора)
	
	Возврат УправлениеСвойствами.НаборСвойствПоИмени(ИмяНабора);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени)
	
	Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
		Возврат "РеквизитыДляКонтроляНоменклатуры";
	ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
		Возврат "РеквизитыДляКонтроляХарактеристик";
	ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
		Возврат "РеквизитыДляКонтроляСерий";
	Иначе
		ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя таблицы реквизитов контроля для %1'"), ЗначащаяЧастьИмени);
	КонецЕсли;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяРеквизитаЗапретРедактированияНаименования(ИмяРеквизитаШаблонНаименования)
	
	Если ИмяРеквизитаШаблонНаименования = "ШаблонНаименованияДляПечатиНоменклатуры" Тогда
		Возврат "ЗапретРедактированияНаименованияДляПечатиНоменклатуры";
	ИначеЕсли ИмяРеквизитаШаблонНаименования = "ШаблонНаименованияДляПечатиХарактеристики" Тогда
		Возврат "ЗапретРедактированияНаименованияДляПечатиХарактеристики";
	ИначеЕсли ИмяРеквизитаШаблонНаименования = "ШаблонРабочегоНаименованияНоменклатуры" Тогда
		Возврат "ЗапретРедактированияРабочегоНаименованияНоменклатуры";
	ИначеЕсли ИмяРеквизитаШаблонНаименования = "ШаблонРабочегоНаименованияХарактеристики" Тогда
		Возврат "ЗапретРедактированияРабочегоНаименованияХарактеристики";
	КонецЕсли;
	
	Возврат "";
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяРеквизитаВладельца(ЗначащаяЧастьИмени)
	
	Если ЗначащаяЧастьИмени = "Характеристик" Тогда
		Возврат "ВладелецХарактеристик";
	ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
		Возврат "ВладелецСерий";
	ИначеЕсли ЗначащаяЧастьИмени = "ТоварныхКатегорий" Тогда
		Возврат "ВладелецТоварныхКатегорий";
	Иначе
		ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя реквизита-владельца для %1'"), ЗначащаяЧастьИмени);
	КонецЕсли;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмени)
	
	Если ЗначащаяЧастьИмени = "Характеристик" Тогда
		Возврат "ВидыНоменклатурыСТемЖеВладельцемХарактеристик";
	ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
		Возврат "ВидыНоменклатурыСТемЖеВладельцемСерий";
	ИначеЕсли ЗначащаяЧастьИмени = "ТоварныхКатегорий" Тогда
		Возврат "ВидыНоменклатурыСТемЖеВладельцемТоварныхКатегорий";
	Иначе
		ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя списка видов номенклатуры с тем же владельцем для %1'"), ЗначащаяЧастьИмени);
	КонецЕсли;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяРеквизитаОтборВладельца(ЗначащаяЧастьИмени)
	
	Если ЗначащаяЧастьИмени = "Характеристик" Тогда
		Возврат "ОтборВладельцаХарактеристик";
	ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
		Возврат "ОтборВладельцаСерий";
	ИначеЕсли ЗначащаяЧастьИмени = "ТоварныхКатегорий" Тогда
		Возврат "ОтборВладельцаТоварныхКатегорий";
	Иначе
		ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя реквизита отбора владельца %1'"), ЗначащаяЧастьИмени);
	КонецЕсли;
	
КонецФункции

#КонецОбласти

#Область Локализация

&НаСервере
Процедура ПриСозданииНаСервереЛокализация()
	
	//++ Локализация
	
	// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("РежимПредставленияОбъектаСервиса", "Гиперссылка");
	РаботаСНоменклатурой.ПриСозданииНаСервереФормаВидаНоменклатуры(ЭтотОбъект, Объект.Ссылка, Элементы.ГруппаРаботаСНоменклатурой, ДополнительныеПараметры);
	// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	
	НаименованиеОКВЭД2 = НаименованиеОКВЭД2(Объект.КодОКВЭД2);
	
	//-- Локализация

	Возврат;
	
КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервереЛокализация(Отказ, ТекущийОбъект)
	
	//++ Локализация
	
	// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	РаботаСНоменклатурой.ПриЗаписиНаСервереФормаВидаНоменклатуры(ЭтотОбъект, ТекущийОбъект, Отказ);
	// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	
	//-- Локализация

	Возврат;
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервереЛокализация(Отказ, ПроверяемыеРеквизиты)
	
	//++ Локализация
	
	// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	РаботаСНоменклатурой.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
	// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	
	//-- Локализация

	Возврат;
	
КонецПроцедуры

&НаСервере
Процедура НастроитьФормуЛокализация()
	
	//++ Локализация
	БазоваяВерсия = ПолучитьФункциональнуюОпцию("БазоваяВерсия");
	
	Элементы.ГруппаНаименованиеДляПечатиТТН.ТолькоПросмотр = Не ЕстьПравоРедактирования;

	Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямЕстьОрдерныеСклады.Видимость =
		Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямЕстьОрдерныеСклады.Видимость;
	
	Элементы.ВестиУчетПоГТД.Заголовок = НоменклатураЛокализация.ЗаголовокВестиУчетПоГТД();
	
	#Область ТТН
	ВидимостьНаименованийДляТТН = ПолучитьФункциональнуюОпцию("ИспользоватьТТН")
									И (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар
									Или Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
	
	Элементы.ИспользоватьОбщееНаименованиеДляПечати.Видимость  = ВидимостьНаименованийДляТТН;
	Элементы.ОбщееНаименованиеДляПечати.Видимость              = ВидимостьНаименованийДляТТН;
	Элементы.ИспользоватьИндивидуальноеНаименование.Видимость  = ВидимостьНаименованийДляТТН;
	Элементы.НаименованиеДляПечати.Видимость                   = ВидимостьНаименованийДляТТН;
	Элементы.ГруппаНаименованиеДляПечатиТТНЗаголовок.Видимость = ВидимостьНаименованийДляТТН;
	#КонецОбласти
	
	//-- Локализация
	
КонецПроцедуры

//++ Локализация
#Область РаботаСНоменклатуройПодключаемыеКоманды

// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
&НаКлиенте
Процедура Подключаемый_НачалоВыбораРаботаСНоменклатурой(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	РаботаСНоменклатуройКлиент.ВыбратьОбъектСервиса(ЭтотОбъект, Элемент, СтандартнаяОбработка, Ложь,
		Новый ОписаниеОповещения("ЗакрытиеФормыВыбораОбъектаСервиса", ЭтотОбъект, Новый Структура));
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОчисткаРаботаСНоменклатурой(Элемент, СтандартнаяОбработка)
	
	РаботаСНоменклатуройКлиент.НажатиеОчиститьКатегорию(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_НажатиеРежимОбновленияРаботаСНоменклатурой(Элемент)
	
	РаботаСНоменклатуройКлиент.НажатиеРежимОбновления(ЭтотОбъект, ПодготовитьДанныеФормы(),
		Новый ОписаниеОповещения("ЗакрытиеФормыЗаполненияОбъекта", ЭтотОбъект));
		
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОткрытьРаботаСНоменклатурой(Элемент, СтандартнаяОбработка)
	
	РаботаСНоменклатуройКлиент.ОткрытьКарточкуОбъектаСервиса(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_НажатиеРаботаСНоменклатурой(Элемент, СтандартнаяОбработка)
	
	РаботаСНоменклатуройКлиент.НажатиеГиперссылки(ЭтотОбъект, Элемент, СтандартнаяОбработка,
		Новый ОписаниеОповещения("ЗакрытиеФормыВыбораОбъектаСервиса", ЭтотОбъект, Новый Структура));
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбработкаНавигационнойСсылкиРаботаСНоменклатурой(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	РаботаСНоменклатуройКлиент.НажатиеГиперссылки(ЭтотОбъект, Элемент, СтандартнаяОбработка,
		Новый ОписаниеОповещения("ЗакрытиеФормыВыбораОбъектаСервиса", ЭтотОбъект, Новый Структура));
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытиеФормыВыбораОбъектаСервиса(ДанныеОбъекта, ДополнительныеПараметры) Экспорт 
	
	РаботаСНоменклатуройКлиент.ОбработкаОповещенияЗакрытиеФормыВыбора(
		ДанныеОбъекта, ДополнительныеПараметры, ПодготовитьДанныеФормы(),
			Новый ОписаниеОповещения("ЗакрытиеФормыЗаполненияОбъекта", ЭтотОбъект));
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытиеФормыЗаполненияОбъекта(ПараметрыЗакрытияФормы, ДополнительныеПараметры) Экспорт 
	
	ЗаполнитьРеквизитыФормы(ПараметрыЗакрытияФормы);
	
КонецПроцедуры

&НаСервере
Функция ПодготовитьДанныеФормы()
	
	Возврат РаботаСНоменклатурой.ПодготовитьДанныеДляИнтерактивногоЗаполнения(ЭтотОбъект);
			
КонецФункции

&НаСервере
Процедура ЗаполнитьРеквизитыФормы(ПараметрыЗакрытияФормы)
	
	РаботаСНоменклатурой.ЗаполнитьРеквизитыФормы(ЭтотОбъект, ПараметрыЗакрытияФормы);
	
	НастроитьФорму();
			
КонецПроцедуры

&НаСервере
Процедура ПерезаполнитьИдентификаторыКатегорий()
	
	РаботаСНоменклатурой.ПерезаполнитьВстроенныеРеквизиты(ЭтотОбъект);
		
КонецПроцедуры

// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой

#КонецОбласти
//-- Локализация

//++ Локализация

&НаСервереБезКонтекста
Функция ПодборОКВЭДСервер(Знач СтрокаПоиска)
	
	ПараметрыПодбора              = КлассификаторОКВЭД.НовыйОтбор();
	ПараметрыПодбора.СтрокаПоиска = СтрокаПоиска;
	ПараметрыПодбора.Режим        = "КодИНаименование";
	ПараметрыПодбора.Разрешенные  = Истина;
	
	Возврат КлассификаторОКВЭД.Подбор(ПараметрыПодбора);
	
КонецФункции

&НаКлиенте
Процедура ПодборИзОКВЭДЗавершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(РезультатВыбора) <> Тип("Структура")
		Или РезультатВыбора.ВыбранныеЗначения.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Если Не Объект.КодОКВЭД2 = РезультатВыбора.ВыбранныеЗначения[0].Код Тогда
		
		Объект.КодОКВЭД2 = РезультатВыбора.ВыбранныеЗначения[0].Код;
		НаименованиеОКВЭД2 = РезультатВыбора.ВыбранныеЗначения[0].Наименование;
		
		Модифицированность = Истина;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция НаименованиеОКВЭД2(КодОКВЭД2)
	
	НаименованиеОКВЭД2 = "";
	
	Если ЗначениеЗаполнено(КодОКВЭД2) Тогда
		
		ЗначениеОКВЭД2ПоКоду = КлассификаторОКВЭД.ЗначениеПоКоду(КодОКВЭД2, Ложь);
		Если ЗначениеОКВЭД2ПоКоду.Количество() > 0 Тогда
			
			НаименованиеОКВЭД2 = ЗначениеОКВЭД2ПоКоду[0].Наименование;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат НаименованиеОКВЭД2;
	
КонецФункции

//-- Локализация

#КонецОбласти

&НаСервере
Процедура НастроитьЗакладкуНастройкиЦенообразования()
	
	Если Не ИспользуетсяЦенообразование25 Тогда
		
		Элементы.СтраницаНастройкиЦенообразования.Видимость   = Ложь;
		Возврат;
				
	КонецЕсли;
	
	ИспользоватьХарактеристикиНоменклатуры 	= ИспользуетсяЦенообразование25 И ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
	ИспользоватьСерииНоменклатуры          	= ИспользуетсяЦенообразование25 И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
	ИспользоватьУпаковкиНоменклатуры 		= ИспользуетсяЦенообразование25 И ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
	
	НастройкаСерийДляЦенообразования = ПолучитьНастройкиИспользованияСерииДляЦенообразования();
	
	Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикам.Видимость   = ИспользоватьХарактеристикиНоменклатуры;
	Элементы.ГруппаНастройкиЦенообразованияПоСериям.Видимость            = ИспользоватьСерииНоменклатуры;
	Элементы.ГруппаНастройкиЦенообразованияПоУпаковкам.Видимость         = ИспользоватьУпаковкиНоменклатуры;

	Элементы.НастройкиКлючаЦенПоХарактеристике.Доступность = Объект.ИспользоватьХарактеристики 
																И Не Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры;
	Элементы.НастройкиКлючаЦенПоСерии.Доступность          = НастройкаСерийДляЦенообразования.Использовать
																И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;

	Если ИспользоватьХарактеристикиНоменклатуры Тогда
		
		Если НЕ Объект.ИспользоватьХарактеристики Тогда
			Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Истина;
			Элементы.КомментарийИспользованияХарактеристики.Заголовок = НСтр("ru = 'Невозможно включение ведения ценообразования по характеристикам по следующим причинам:
																		| - по виду номенклатуры не ведется учет в разрезе характеристик'"); 	
		ИначеЕсли Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры Тогда 
			Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Истина;
			Элементы.КомментарийИспользованияХарактеристики.Заголовок = НСтр("ru = 'Невозможно включение ведения ценообразования по реквизитам характеристик по следующим причинам:
																		| - по виду номенклатуры учет в разрезе характеристик не общий. Для ведения ценообразования по реквизитам номенклатуры, необходимо изменить режим на общий'"); 	
		ИначеЕсли Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда 
			Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Истина;
			Элементы.КомментарийИспользованияХарактеристики.Заголовок = НСтр("ru = 'Изменение настроек по характеристикам не возможно по следующим причинам:
																		| - по виду номенклатуры учет в разрезе характеристик общий с другими видами номенклатуры. 
																		|Изменение настроек характеристик номенклатуры возможно только в форме владельца вида номенклатуры'"); 	
		Иначе
			
			Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Ложь;
			 	
		КонецЕсли;
		
		Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики.Доступность = (Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам 
																					И Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры
																					И Не Элементы.НастройкиКлючаЦенПоХарактеристике.ТолькоПросмотр);
																						
		СписокВыбора = Элементы.НастройкиКлючаЦенПоХарактеристике.СписокВыбора;
		СписокВыбора.Очистить();
	
		СписокВыбора.Добавить(Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать, Нстр("ru = 'без характеристик'"));
		СписокВыбора.Добавить(Перечисления.ВариантОтбораДляКлючаЦен.Использовать, Нстр("ru = 'по характеристикам'"));
		Если Объект.ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры Тогда
			СписокВыбора.Добавить(Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам, Нстр("ru = 'по реквизитам характеристик'"));
			Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики.Видимость = Истина;
		Иначе
			Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики.Видимость = Ложь;
		КонецЕсли;
		
		СформироватьНадписьРазрезаЦенообразования("Характеристики");
		
	КонецЕсли;
	
	Если ИспользоватьСерииНоменклатуры Тогда
		
		Элементы.ГруппаНастройкиЦенообразованияПоСериямИнформация.Видимость = НЕ НастройкаСерийДляЦенообразования.Использовать;
		Элементы.КомментарийИспользованияСерии.Заголовок = НастройкаСерийДляЦенообразования.Комментарий;
	
		Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Серии.Доступность         = (Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам
																					И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
																					И Не Элементы.НастройкиКлючаЦенПоСерии.ТолькоПросмотр);
																					
		СформироватьНадписьРазрезаЦенообразования("Серии");
		
	КонецЕсли;
	
	ОбновитьРазрезыЦенообразования();
	
КонецПроцедуры

&НаСервере
Функция ПолучитьНастройкиИспользованияСерииДляЦенообразования()
	
	НастройкаСерийДляЦенообразования = Новый Структура("Использовать, Комментарий", Истина, "");
	
	Если НЕ Объект.ИспользоватьСерии Тогда
		НастройкаСерийДляЦенообразования.Использовать = Ложь;
		НастройкаСерийДляЦенообразования.Комментарий = НСтр("ru = 'Невозможно включение ведения ценообразования по сериям по следующим причинам:
															| - по виду номенклатуры не ведется учет в разрезе серий'");
	ИначеЕсли Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
		НастройкаСерийДляЦенообразования.Использовать = Ложь;
		НастройкаСерийДляЦенообразования.Комментарий = НСтр("ru = 'Невозможно включение ведения ценообразования по сериям по следующим причинам:
															| - по виду номенклатуры учет в разрезе серий общий с другими видами номенклатуры. 
															|Изменение настроек серий номенклатуры возможно только в форме владельца вида номенклатуры'");
	КонецЕсли;
	
	Возврат НастройкаСерийДляЦенообразования;
	
КонецФункции

&НаКлиенте
Процедура НастройкиКлючаЦенПоХарактеристикеПриИзменении(Элемент)
	НастройкиКлючаЦенПоХарактеристикеПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура НастройкиКлючаЦенПоХарактеристикеПриИзмененииНаСервере()
	НастроитьЗакладкуНастройкиЦенообразования();
КонецПроцедуры

&НаКлиенте
Процедура НастройкиКлючаЦенПоСерииПриИзменении(Элемент)
	НастройкиКлючаЦенПоСерииПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура НастройкиКлючаЦенПоСерииПриИзмененииНаСервере()
	НастроитьЗакладкуНастройкиЦенообразования();
КонецПроцедуры

&НаСервере
Процедура НастройкиКлючаЦенПоУпаковкеПриИзмененииНаСервере()
	НастроитьЗакладкуНастройкиЦенообразования();
КонецПроцедуры

&НаКлиенте
Процедура НастройкиКлючаЦенПоУпаковкеПриИзменении(Элемент)
	НастройкиКлючаЦенПоУпаковкеПриИзмененииНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьНаборРеквизитовХарактеристикДляКлючаЦенОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьНастройкуИспользованияРеквизитов" Тогда
		ИзменитьПанельХарактеристикиДляКлюча();
	КонецЕсли;	

КонецПроцедуры

&НаКлиенте
Процедура ИзменитьНаборРеквизитовСерийДляКлючаЦенОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьНастройкуИспользованияРеквизитов" Тогда
		ИзменитьПанельСерииДляКлюча();
	КонецЕсли;	
КонецПроцедуры

Связанные материалы