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

файл

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

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

		ПриСозданииЧтенииНаСервере();
		
	КонецЕсли;
	
	ПриСозданииНаСервереЛокализация(Отказ, СтандартнаяОбработка);
	
	СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	
	НастроитьФормуИОбновитьКарточку();
	
	ФормаИнициализирована = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ОбработкаОповещенияЗапись_Запись_СертификатыНоменклатурыСписок(Сертификат)

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

&НаСервере
Процедура ОбработкаОповещенияЗапись_ХарактеристикиНоменклатуры(Характеристика)

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

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

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

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

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

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

&НаКлиенте
Процедура СтраницыКарточкаНоменклатурыПриСменеСтраницы(Элемент, ТекущаяСтраница)
	
	ОбработатьСменуСтраницКарточкиНоменклатуры(ТекущаяСтраница);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВесМожноУказыватьВДокументахПриИзменении(Элемент)
	МераМожноУказыватьВДокументахПриИзменении("Вес");
КонецПроцедуры

&НаКлиенте
Процедура ОбъемМожноУказыватьВДокументахПриИзменении(Элемент)
	МераМожноУказыватьВДокументахПриИзменении("Объем");
КонецПроцедуры

&НаКлиенте
Процедура ПлощадьМожноУказыватьВДокументахПриИзменении(Элемент)
	МераМожноУказыватьВДокументахПриИзменении("Площадь");
КонецПроцедуры

&НаКлиенте
Процедура ДлинаМожноУказыватьВДокументахПриИзменении(Элемент)
	МераМожноУказыватьВДокументахПриИзменении("Длина");
КонецПроцедуры

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

&НаКлиенте
Процедура ОбъемЕдиницаИзмеренияНажатие(Элемент, СтандартнаяОбработка)
	ЕдиницаИзмеренияНажатие("ОбъемЕдиницаИзмерения", СтандартнаяОбработка, "Объем");
КонецПроцедуры

&НаКлиенте
Процедура ПлощадьЕдиницаИзмеренияНажатие(Элемент, СтандартнаяОбработка)
	ЕдиницаИзмеренияНажатие("ПлощадьЕдиницаИзмерения", СтандартнаяОбработка, "Площадь");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если ПараметрыПереходаПоГиперссылке.РежимОткрытияОкнаФормы = Неопределено Тогда
		ПараметрыПереходаПоГиперссылке.РежимОткрытияОкнаФормы = РежимОткрытияОкнаФормы.Независимый;
	КонецЕсли;
	
	Возврат ПараметрыПереходаПоГиперссылке;
	
КонецФункции

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

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

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

&НаКлиенте
Процедура ГиперссылкаПерейтиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ГиперссылкаПерейтиСформироватьПараметрыИВопрос(Элемент.Имя, НавигационнаяСсылкаФорматированнойСтроки);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура УстановитьАктивностьТекущийЭлемент()
	ТекущийЭлемент = Элементы[ТекущийЭлементВыбор];
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура КомандаПерейти(Команда)
	
	ИмяЭлемента = Команда.Имя;
	ИмяЭлемента = ИмяЭлементаПереходаКСвязанномуСписку(Элементы, ИмяЭлемента, Ложь);
	
	ГиперссылкаПерейтиСформироватьПараметрыИВопрос(ИмяЭлемента, "");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ПриИзмененииРеквизитов

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

&НаСервере
Процедура ПриЗаписиВидаНоменклатуры()

	ОбновитьКешРеквизитовВидаНоменклатуры();
	НастроитьФормуИОбновитьКарточку();

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПроизводительПриИзмененииСервер()
		
	Объект.Марка = Справочники.Марки.ПолучитьМаркуПоУмолчанию(Объект.Производитель);
	
КонецПроцедуры

&НаКлиенте
Процедура ВидАлкогольнойПродукцииПриИзменении(Элемент)
	
	//++ Локализация
	ВидАлкогольнойПродукцииПриИзмененииСервер();
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура АлкогольнаяПродукцияВоВскрытойТареПриИзменении(Элемент)
	
	//++ Локализация
	АлкогольнаяПродукцияВоВскрытойТареПриИзмененииНаСервере();
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура РассчитатьОбъемВДекалитрах(Команда)

	//++ Локализация
	ОчиститьСообщения();
	РассчитатьОбъемВДекалитрахНаСервере();
	//-- Локализация
	
КонецПроцедуры

#Область ОбработчикиСобытийТаблицыФормыДрагоценныеМатериалы

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

&НаКлиенте
Процедура Операции0НачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
	
	//++ Локализация
	
	
	//-- Локализация

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

&НаКлиенте
Процедура ТоварУчаствуетВДеятельностиПоСтавкеНДС0ПриИзменении(Элемент)
	
	//++ Локализация
	
	
	//-- Локализация
	
	Возврат;

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

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

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

#Область РаботаСФайламиИИзображениями

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

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

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

#Область НастройкаВидимостиГруппИЭлементов

&НаСервере
Процедура НастроитьФормуИОбновитьКарточку()

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

#Область НастройкаВидимостиГруппИЭлементовПереключательРежима

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

&НаСервере
Процедура СкрытьРаскрытьВсеГруппы(Свернуть)
	
	ИменаСворачиваемыхГрупп = ИменаСворачиваемыхГрупп();
	
	Для Каждого ИмяГруппы Из ИменаСворачиваемыхГрупп Цикл
		ИзменитьСвернутостьГруппы(ИмяГруппы, Свернуть);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

#Область ЕдиницыИзмерения

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

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

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

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

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

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

#Область УчетИмпортаИПрослеживаемости

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

&НаСервереБезКонтекста
Функция РеквизитыПрослеживаемости(КодТНВЭД)
	
	Возврат Справочники.Номенклатура.РеквизитыПрослеживаемости(КодТНВЭД);
	
КонецФункции

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

#Область ПроверкаУникальности

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

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

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

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

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

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

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

&НаСервере
Процедура НастроитьДоступностьБлокируемыхРеквизитов()

	Элементы.ИспользоватьУпаковки.ТолькоПросмотр = Объект.ИспользоватьУпаковки;
	Элементы.ИспользованиеУпаковокИндивидуальныйНабор.ТолькоПросмотр = Объект.ИспользоватьУпаковки;
	Элементы.ИспользованиеУпаковокОбщийНабор.ТолькоПросмотр = Объект.ИспользоватьУпаковки;
	Элементы.НаборУпаковок.ТолькоПросмотр = Объект.ИспользоватьУпаковки;
	
	НоменклатураЛокализация.НастроитьДоступностьБлокируемыхРеквизитов(ЭтотОбъект);
	
КонецПроцедуры

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

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

// Возвращаемое значение:
//	ФиксированнаяСтруктура:
//		* АдресТаблицыПараметров - Строка
//		* АртикулНоменклатурыПоставщика - Строка
//		* ИсточникКопирования - Структура
//		* Качество - ПеречислениеСсылка.ГрадацииКачества
//		* Наименование - Строка
//		* НаименованиеНоменклатурыПоставщика - Строка
//		* НаименованиеПолное - Строка
//		* Штрихкод - Строка
//
&НаСервере
Функция ПараметрыСоздания()
	
	Возврат ПараметрыСоздания;
	
КонецФункции

// Возвращаемое значение:
//	Структура:
//		* ПолноеИмя - Строка - имя файла.
//		* ИмяБезРасширения - Строка - имя файла без расширения.
//		* Расширение - Строка - расширение файла.
//
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеДанныхФайла()
	
	Результат = Новый Структура;
	Результат.Вставить("ПолноеИмя");
	Результат.Вставить("ИмяБезРасширения");
	Результат.Вставить("Расширение");
	
	Возврат Результат;
	
КонецФункции

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

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

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

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

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

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

	ЗначениеЯзыка = Новый Структура;

	Для Каждого Язык Из Метаданные.Языки Цикл 
		Если СтрСравнить(Язык.КодЯзыка, ТекущийЯзык().КодЯзыка) = 0 Тогда
			Продолжить;
		КонецЕсли;
		Суффикс = МультиязычностьСервер.СуффиксЯзыка(Язык.КодЯзыка);
		ЗначениеЯзыка = Новый Структура;
		ЗначениеЯзыка.Вставить("КодЯзыка", Язык.КодЯзыка);
		ЗначениеЯзыка.Вставить("ЗначениеРеквизита", Объект[ИмяРеквизита + "Язык1"]);
		ЗначениеЯзыка.Вставить("Суффикс", "Язык1");
		ЗначенияНаРазныхЯзыках.Добавить(ЗначениеЯзыка);
	КонецЦикла; 
	РезультатЗаполнения.Вставить("ЗначенияНаРазныхЯзыках", ЗначенияНаРазныхЯзыках);
	
	Возврат РезультатЗаполнения;
КонецФункции

&НаСервере
Функция ЗаголовокФормированияПоШаблонуРабочее()
	Возврат НСтр("ru='<Рабочее наименование будет сформировано по шаблону>'");
КонецФункции

&НаСервере
Функция ЗаголовокФормированияПоШаблонуДляПечати()
	Возврат НСтр("ru='<Наименование для печати будет сформировано по шаблону>'");
КонецФункции

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

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

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

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

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

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

	ИменаСворачиваемыхГруппЛокализация(ИменаСворачиваемыхГрупп);
	
	Возврат ИменаСворачиваемыхГрупп;
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура РассчитатьОбъемВДекалитрахНаСервере()
	
	Если Не Объект.ОбъемИспользовать Тогда
		ОбщегоНазначения.СообщитьПользователю(НСтр("ru='Не задан объем для номенклатуры.'"),,"ОбъемИспользовать","Объект");
		Возврат;
	КонецЕсли;
	ОбъемЕдиницаИзмерения = ?(ЗначениеЗаполнено(Объект.ОбъемЕдиницаИзмерения), Объект.ОбъемЕдиницаИзмерения, Объект.ЕдиницаИзмерения);
	РеквизитыЕдиницыИзмеренияОбъем = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъемЕдиницаИзмерения, "Числитель, Знаменатель");
	
	Объект.ОбъемДАЛ = 100 * (Объект.ОбъемЧислитель * РеквизитыЕдиницыИзмеренияОбъем.Числитель) / 
		(Объект.ОбъемЗнаменатель * РеквизитыЕдиницыИзмеренияОбъем.Знаменатель);
	
КонецПроцедуры


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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформлениеЛокализация()
	
	//++ Локализация
	
	
	//-- Локализация

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

#Область УчетИмпортаИПрослеживаемости

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


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

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

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

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

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

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

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

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

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

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

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

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

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