Регистрация цен номенклатуры поставщика / Форма документа / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

&НаКлиенте
Перем СтараяНоменклатура; // Используется в механизмах обработчиков событий табличной части Товары
&НаКлиенте
Перем СтараяНоменклатураПартнера; // Используется в механизмах обработчиков событий табличной части Товары
&НаКлиенте
Перем СтараяХарактеристика; // Используется в механизмах обработчиков событий табличной части Товары
&НаКлиенте
Перем ИзмененаЦена; // Используется в механизмах обработчиков событий табличной части Товары
&НаКлиенте
Перем СтрокаДобавлена;

&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;

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

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

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

	УстановитьУсловноеОформление();
	
	ФлагОткрытияФормы = Истина;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ЗаполнитьПризнакХарактеристикиИспользуются = Новый Структура("Номенклатура", "ХарактеристикиИспользуются");
	ЗаполнитьПризнакАртикул = Новый Структура("Номенклатура", "Артикул");
	
	НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
		Объект.Товары,
		Новый Структура("ЗаполнитьПризнакХарактеристикиИспользуются, ЗаполнитьПризнакАртикул",
			ЗаполнитьПризнакХарактеристикиИспользуются,
			ЗаполнитьПризнакАртикул));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДеревоЦенПослеУдаления(Элемент)
	ДеревоЦенПослеУдаленияНаСервере();
КонецПроцедуры

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

	ТекущаяСтрока = Элементы.ДеревоЦен.ТекущиеДанные;

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

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

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);

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

&НаКлиенте
Процедура ДеревоЦенХарактеристикаПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.ДеревоЦен.ТекущиеДанные;

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

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

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
КонецПроцедуры

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

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

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
КонецПроцедуры

&НаКлиенте
Процедура ДеревоЦенПриАктивизацииЯчейки(Элемент)
	
	Если Элемент.ТекущиеДанные = Неопределено
		Или Элемент.ТекущийЭлемент = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Элемент.ТекущийЭлемент.Имя = "ДеревоЦен" + "Характеристика" Тогда
		Если Элемент.ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
			Элемент.ТекущийЭлемент.ТолькоПросмотр = Истина;
		Иначе
			Элемент.ТекущийЭлемент.ТолькоПросмотр = Ложь;
		КонецЕсли;
	ИначеЕсли Элемент.ТекущийЭлемент.Имя = "ДеревоЦен" + "Номенклатура" Тогда
		Если Элемент.ТекущиеДанные.ПолучитьРодителя() <> Неопределено Тогда
			Элемент.ТекущийЭлемент.ТолькоПросмотр = Истина;
		Иначе
			Элемент.ТекущийЭлемент.ТолькоПросмотр = Ложь;
		КонецЕсли;
	ИначеЕсли Элемент.ТекущийЭлемент.Имя = "ДеревоЦен" + "НоменклатураПартнера" Тогда
		ЭтоВерхнийУровень = Элемент.ТекущиеДанные.ПолучитьРодителя() = Неопределено;
		ХарактеристикиИспользуются = Элемент.ТекущиеДанные.ХарактеристикиИспользуются;
		
		Если ЭтоВерхнийУровень И ХарактеристикиИспользуются Тогда
			Элемент.ТекущийЭлемент.ТолькоПросмотр = Истина;
		Иначе
			Элемент.ТекущийЭлемент.ТолькоПросмотр = Ложь;
			
			Если Элемент.ТекущийЭлемент.Имя = "ДеревоЦен" + "НоменклатураПартнера" Тогда
				ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;

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

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

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

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

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

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

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

	ДеревоЦенУпаковкаПриИзмененииКлиент(Элемент);

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

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

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

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

	НоменклатураПартнеровКлиент.ОткрытьФормуВыбораНоменклатурыПартнера(ЭтотОбъект, Объект.Партнер, ТекущаяСтрока, Элемент.Заголовок, ОповещениеОЗакрытие,, Ложь);

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

&НаКлиенте
Процедура ДеревоЦенНоменклатураПартнераАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)

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

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

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

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

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

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

&НаКлиенте
Процедура ВыбранныеЦеныПриИзменении(Элемент)
	
	ВыбранныеЦеныИзменены = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ТекущаяСтрока = Элементы.ДеревоЦен.ТекущиеДанные;

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

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

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);

	ДеревоЦенХарактеристикаПриИзмененииСервер(Элементы.ДеревоЦен.ТекущаяСтрока);

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

&НаКлиенте
Процедура НеВыполнятьПроверкуСопоставленнойНоменклатурыПоставщика(Команда)
	
	НеВыполнятьПроверкуСопоставленнойНоменклатурыПоставщика = Не НеВыполнятьПроверкуСопоставленнойНоменклатурыПоставщика;
	Элементы.ФормаНеВыполнятьПроверкуСопоставленнойНоменклатурыПоставщика.Пометка = НеВыполнятьПроверкуСопоставленнойНоменклатурыПоставщика;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ДобавитьТоварыПоОтбору(Команда)
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
	ПараметрыФормы.Вставить("ПодбиратьНоменклатуруПартнера", Истина);
	ПараметрыФормы.Вставить("Партнер", Объект.Партнер);
	
	АдресВоВременномХранилище = Неопределено;

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

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

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

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

&НаКлиенте
Процедура ОтчетПоДинамикеЦен(Команда)
	
	ЗакупкиКлиент.ОткрытьОтчетПоДинамикеЦенПоставщика(ЭтаФорма);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПерейтиКУстановкеЦен(Команда)
	
	Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаУстановкаЦен;
	ПриПереходеКУстановкеЦен();
	
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиКРедактированиюСпискаВидовЦен(Команда)
	
	Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаВидыЦен;
	
КонецПроцедуры

&НаКлиенте
Процедура ПереключательАвтоматическиДобавлятьХарактеристики(Команда)
	
	УстановитьАвтоматическиДобавлятьХарактеристикиНаКлиенте(Не АвтоматическиДобавлятьХарактеристики);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами

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

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

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

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

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

// СтандартныеПодсистемы.Свойства

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

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

// Конец СтандартныеПодсистемы.Свойства

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

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенХарактеристика.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ИндексКартинки");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 2;

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

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦен.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ИндексКартинки");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 2;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Gray);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма, 
																			 "ДеревоЦен" + "Характеристика",
																			 "ДеревоЦен.ХарактеристикиИспользуются");

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

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

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

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

&НаСервере
Процедура ДеревоЦенПослеУдаленияНаСервере()
	АдресХранилищаКэшаДанных = "";
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
	
	Если Открыта() Тогда
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

// Устанавливает признак автозаполнения цен характеристик по номенклатуре
//
// Параметры:
// НовоеЗначение - Булево
//
&НаКлиенте
Процедура УстановитьЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуреНаКлиенте(НовоеЗначение)
	
	ЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре = НовоеЗначение;
	Элементы.ДеревоЦенПереключательЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре.Пометка = НовоеЗначение;
	
КонецПроцедуры

// Устанавливает признак автозаполнения цен характеристик по номенклатуре
//
// Параметры:
// НовоеЗначение - Булево
//
&НаКлиенте
Процедура УстановитьАвтоматическиДобавлятьХарактеристикиНаКлиенте(НовоеЗначение)
	
	АвтоматическиДобавлятьХарактеристики = НовоеЗначение;
	Элементы.ДеревоЦенПереключательАвтоматическиДобавлятьХарактеристики.Пометка = НовоеЗначение;
	
КонецПроцедуры

// Устанавливает признак автозаполнения цен характеристик по номенклатуре
//
// Параметры:
// НовоеЗначение - Булево
//
&НаСервере
Процедура УстановитьЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре(НовоеЗначение)
	
	Если НовоеЗначение = Неопределено Тогда
		НовоеЗначение = Истина;
	КонецЕсли;
	
	ЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре = НовоеЗначение;
	Элементы.ДеревоЦенПереключательЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре.Пометка = НовоеЗначение;
	
КонецПроцедуры

// Устанавливает признак автозаполнения цен характеристик по номенклатуре
//
// Параметры:
// НовоеЗначение - Булево
//
&НаСервере
Процедура УстановитьАвтоматическиДобавлятьХарактеристики(НовоеЗначение)
	
	Если НовоеЗначение = Неопределено Тогда
		НовоеЗначение = Истина;
	КонецЕсли;
	
	АвтоматическиДобавлятьХарактеристики = НовоеЗначение;
	Элементы.ДеревоЦенПереключательАвтоматическиДобавлятьХарактеристики.Пометка = НовоеЗначение;
	
КонецПроцедуры

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

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

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

	НоменклатураПартнеровСервер.ЗаполнитьНоменклатуруПартнераПоНоменклатуреВТаблице(Объект.Товары, Объект.Партнер);

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

&НаСервере
Процедура ПриИзмененииПартнераСервер()
	
	УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(ЭтаФорма);
	УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура ПриПереходеКУстановкеЦенСервер()
	
	УстановкаЦенСервер.ПереформироватьТаблицуЦен(ЭтаФорма);
	
КонецПроцедуры

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

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

// Параметры:
//	Элемент - ПолеФормы - Элемент формы
&НаКлиенте
Процедура ДеревоЦенЦенаПриИзмененииКлиент(Элемент)
	
	ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ИмяКолонкиУпаковка = СтрЗаменить(Элемент.Имя, "ДеревоЦен"+  "ВидЦены", "Упаковка" + "ВидЦены");
	ИмяТекущейКолонки  = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
	
	Если СтрНайти(ИмяТекущейКолонки, "ПроцентИзменения" + "ВидЦены") Тогда
		ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "ПроцентИзменения" + "ВидЦены", "ВидЦены");
		ТекущиеДанные[ИмяТекущейКолонки] = Окр(
			ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * ((ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] / 100) + 1),
			15,
			2);
		ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "ПроцентИзмененияВидЦены", "ВидЦены"), "ДеревоЦен" + "ВидЦены", "Упаковка" + "ВидЦены");
	КонецЕсли;
	Если СтрНайти(ИмяТекущейКолонки, "СуммаИзменения" + "ВидЦены") Тогда
		ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "СуммаИзменения" + "ВидЦены", "ВидЦены");
		ТекущиеДанные[ИмяТекущейКолонки] = ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] + ТекущиеДанные["СуммаИзменения" + ИмяТекущейКолонки];
		Если ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] <> 0 Тогда
			ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] / ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * 100;
		Иначе
			ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
		КонецЕсли;
		ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "СуммаИзменения" + "ВидЦены", "ВидЦены"), "ДеревоЦен" + "ВидЦены", "Упаковка" + "ВидЦены");
	КонецЕсли;
	
	ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ТекущиеДанные.ПолучитьИдентификатор());
	
	ТекущиеДанные["ИзмененаВручную"+ИмяТекущейКолонки] = Истина;
	
	Если ТекущиеДанные["СтараяЦена"+ИмяТекущейКолонки] <> 0 Тогда
		ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = Окр(
			100 * (ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена"+ИмяТекущейКолонки]) / ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки],
			5,
			2);
		ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки];
	Иначе
		ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
	КонецЕсли;
	
	Если ЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре Тогда
		
		МассивСтруктурУпаковокНоменклатуры = Новый Массив;
		СоответствиеКоэффициентовУпаковокНоменклатуры = Неопределено;
		Если ИспользоватьУпаковкиНоменклатуры Тогда
			
			ТекущееЗначениеУпаковки = ТекущиеДанные[ИмяКолонкиУпаковка];
			Если ЗначениеЗаполнено(ТекущееЗначениеУпаковки) Тогда
				Структура = УстановкаЦенКлиентСервер.ИнициализироватьОписаниеУпаковкиНоменклатуры();
				Структура.Номенклатура = ТекущиеДанные.Номенклатура;
				Структура.Упаковка = ТекущееЗначениеУпаковки;
				МассивСтруктурУпаковокНоменклатуры.Добавить(Структура);
			КонецЕсли;
			
			ЭлементыХарактеристики = ТекущаяСтрока.ПолучитьЭлементы();
			Для Каждого ЭлементХарактеристика Из ЭлементыХарактеристики Цикл
				
				ЗначениеКолонкиУпаковка = ЭлементХарактеристика[ИмяКолонкиУпаковка];
				Если ЗначениеЗаполнено(ЗначениеКолонкиУпаковка) 
					И УстановкаЦенКлиентСервер.НайтиСтруктуруУпаковкиНоменклатурыВМассиве(МассивСтруктурУпаковокНоменклатуры, 
																							ЭлементХарактеристика.Номенклатура, 
																							ЗначениеКолонкиУпаковка) = Неопределено Тогда
					
					Структура = УстановкаЦенКлиентСервер.ИнициализироватьОписаниеУпаковкиНоменклатуры();
					Структура.Номенклатура = ЭлементХарактеристика.Номенклатура;
					Структура.Упаковка = ЗначениеКолонкиУпаковка;
					МассивСтруктурУпаковокНоменклатуры.Добавить(Структура);
					
				КонецЕсли;
				
			КонецЦикла;
		
			Если МассивСтруктурУпаковокНоменклатуры.Количество() > 0 Тогда
				СоответствиеКоэффициентовУпаковокНоменклатуры = КоэффициентыУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры);
			КонецЕсли;
			
		КонецЕсли;
		
		// Определим коэффициент упаковки текущей цены
		КоэффициентУпаковкиЦеныИсточника = 1;
		Если ИспользоватьУпаковкиНоменклатуры Тогда
			Если ЗначениеЗаполнено(ТекущееЗначениеУпаковки) И СоответствиеКоэффициентовУпаковокНоменклатуры <> Неопределено Тогда				
				РезультатПоиска = УстановкаЦенКлиентСервер.ПолучитьКоэффициентУпаковкиНоменклатуры(СоответствиеКоэффициентовУпаковокНоменклатуры, 
																									ТекущиеДанные.Номенклатура, 
																									ТекущееЗначениеУпаковки);
				Если РезультатПоиска <> Неопределено Тогда
					КоэффициентУпаковкиЦеныИсточника = РезультатПоиска;																										
				КонецЕсли;																												
			КонецЕсли;
		КонецЕсли;
		
		ТекущееЗначение = ТекущиеДанные[ИмяТекущейКолонки];
		ЭлементыХарактеристики = ТекущаяСтрока.ПолучитьЭлементы();
		Для Каждого ЭлементХарактеристика Из ЭлементыХарактеристики Цикл
			
			Если ИспользоватьУпаковкиНоменклатуры Тогда
				
				ЗначениеКолонкиУпаковка = ЭлементХарактеристика[ИмяКолонкиУпаковка];
				Если ТекущееЗначениеУпаковки = ЗначениеКолонкиУпаковка И
					
					ЭлементХарактеристика[ИмяТекущейКолонки] <> ТекущееЗначение Тогда
					ЭлементХарактеристика[ИмяТекущейКолонки] = ТекущееЗначение;
					ЭлементХарактеристика["ИзмененаВручную"+ИмяТекущейКолонки] = Истина;
					
					Если ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки] <> 0 Тогда
						ЭлементХарактеристика["ПроцентИзменения"+ИмяТекущейКолонки] = Окр(100*(ЭлементХарактеристика[ИмяТекущейКолонки] - ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки])/ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки],5,2);
					Иначе
						ЭлементХарактеристика["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
					КонецЕсли;
					
				Иначе
					
					// Определим коэффициент упаковки влияющей цены
					КоэффициентУпаковкиЦеныНазначения = 1;
					
					Если ЗначениеЗаполнено(ЗначениеКолонкиУпаковка) И СоответствиеКоэффициентовУпаковокНоменклатуры <> Неопределено Тогда
						РезультатПоиска = УстановкаЦенКлиентСервер.ПолучитьКоэффициентУпаковкиНоменклатуры(СоответствиеКоэффициентовУпаковокНоменклатуры, 
																												ТекущиеДанные.Номенклатура, 
																												ЗначениеКолонкиУпаковка);
						Если РезультатПоиска <> Неопределено Тогда
							КоэффициентУпаковкиЦеныНазначения = РезультатПоиска;
						КонецЕсли;
					КонецЕсли;
					
					Если КоэффициентУпаковкиЦеныИсточника = КоэффициентУпаковкиЦеныНазначения Тогда
						НоваяЦена = ТекущееЗначение;
					Иначе
						НоваяЦена = ТекущееЗначение / КоэффициентУпаковкиЦеныИсточника * КоэффициентУпаковкиЦеныНазначения;
					КонецЕсли;
					
					Если ЭлементХарактеристика[ИмяТекущейКолонки] <> НоваяЦена Тогда
						
						ЭлементХарактеристика[ИмяТекущейКолонки] = НоваяЦена;
						ЭлементХарактеристика["ИзмененаВручную"+ИмяТекущейКолонки] = Истина;
						
						Если ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки] <> 0 Тогда
							ЭлементХарактеристика["ПроцентИзменения"+ИмяТекущейКолонки] = Окр(100*(ЭлементХарактеристика[ИмяТекущейКолонки] - ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки])/ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки],5,2);
						Иначе
							ЭлементХарактеристика["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
						КонецЕсли;
						
					КонецЕсли;
					
				КонецЕсли;
				
			Иначе
				
				НоваяЦена = ТекущееЗначение;
				
				Если ЭлементХарактеристика[ИмяТекущейКолонки] <> НоваяЦена Тогда
					
					ЭлементХарактеристика[ИмяТекущейКолонки] = НоваяЦена;
					ЭлементХарактеристика["ИзмененаВручную"+ИмяТекущейКолонки] = Истина;
					
					Если ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки] <> 0 Тогда
						ЭлементХарактеристика["ПроцентИзменения"+ИмяТекущейКолонки] = Окр(100*(ЭлементХарактеристика[ИмяТекущейКолонки] - ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки])/ЭлементХарактеристика["СтараяЦена"+ИмяТекущейКолонки],5,2);
					Иначе
						ЭлементХарактеристика["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
					КонецЕсли;
					
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Процедура ДеревоЦенУпаковкаПриИзмененииНаСервере(Идентификатор, ИмяТекущейКолонки)
	УстановкаЦенСервер.ДеревоЦенУпаковкаВалютаПриИзменении(ЭтаФорма, Идентификатор, ИмяТекущейКолонки);
КонецПроцедуры

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

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

&НаСервере
Процедура ДеревоЦенХарактеристикаПриИзмененииСервер(ИдентификаторСтроки, РассчитатьЦены = Истина)
	
	УстановкаЦенСервер.ДеревоЦенХарактеристикаПриИзменении(ЭтаФорма, ИдентификаторСтроки);
	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция КоэффициентыУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры)
	
	Возврат УстановкаЦенСервер.СоответствиеКоэффициентовКоллекцииУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры);
		
КонецФункции

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

&НаСервере
Процедура ПеречитатьВидыЦенПоставщикаНаСервере()
	
	УстановкаЦенСервер.ПеречитатьВыбранныеЦены(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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