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

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

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

	УстановитьСвойстваПереопределяемыхЭлементовФормы();
	
	Если ЗначениеЗаполнено(Параметры.Ключ) Тогда
		УстановитьРазрешениеРедактирования(Ложь);
	КонецЕсли;

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

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

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

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

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

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

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

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

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

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

	СопоставлениеНоменклатурыКонтрагентовКлиентПереопределяемый.ПослеЗаписи_ФормаЭлементаНоменклатурыКонтрагентов(
		ЭтаФорма, ПараметрыЗаписи);

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИдентификаторПриИзменении(Элемент)
	
	ОбработатьЗаполнениеИдентификатора();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура РазрешитьРедактирование(Команда)
	
	ПоказатьВопросОРазрешенииРедактирования();
	
КонецПроцедуры

&НаКлиенте
Процедура КартинкаОткрытиеВладельцаНажатие(Элемент)
	
	ПоказатьЗначение(,Объект.ВладелецНоменклатуры);

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

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

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

&НаСервере
Процедура УстановитьСвойстваПереопределяемыхЭлементовФормы()

	МетаданныеСопоставления = СопоставлениеНоменклатурыКонтрагентовСлужебный.МетаданныеСопоставленияНоменклатуры();
		
	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ПредставлениеЗаголовка = НСтр("ru = '(Создание)'");
	Иначе
		ПредставлениеЗаголовка = Объект.Наименование;
	КонецЕсли;
	
	Заголовок = СтрШаблон(НСтр("ru = '%1: %2'"), МетаданныеСопоставления.НоменклатураКонтрагентаПредставлениеОбъекта, ПредставлениеЗаголовка);

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

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

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

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

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

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

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

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

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

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

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

	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЗаголовокПредставленияЕдиницыИзмерения(Элементы, ЗаголовокНачало, ЗаголовокОкончание)
	
	Элементы.ПредставлениеЧислителяЗнаменателяНачало.Заголовок     = ЗаголовокНачало;
	Элементы.ПредставлениеЧислителяЗнаменателяОкончание.Заголовок  = ЗаголовокОкончание;
	Элементы.ПредставлениеЧислителяЗнаменателяОкончание1.Заголовок = ЗаголовокОкончание;
	
КонецПроцедуры

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

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

	Возврат Идентификаторы;
	
КонецФункции

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

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

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

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

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

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

	Если НоменклатураЗаполнена Тогда
		ДругиеШтрихкодыНоменклатуры = Новый Массив();
		СопоставлениеНоменклатурыКонтрагентовПереопределяемый.ПриОпределенииШтрихкодовНоменклатурыКонтрагента(
			НоменклатураИБ, Объект.Штрихкод, ДругиеШтрихкодыНоменклатуры);

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

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

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

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