Цены поставщиков (прайс-листы) / Прайс-лист / Модуль формы

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

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

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

&НаКлиенте
Перем ОтображаетсяВопрос;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Сформировать(Команда)
	
	ОчиститьСообщения();
	
	Если ПроверитьЗаполнение() Тогда
		
		ОткрытьФормуНастройкиПрайсЛиста();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

	Форма.ИспользоватьРежимРедактирования = ИспользоватьРежимРедактирования;
	
КонецПроцедуры

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

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

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

#Область ШтрихкодыИТорговоеОборудование

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

КонецПроцедуры // ОбработатьШтрихкоды()
// Конец МеханизмВнешнегоОборудования

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

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

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

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

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

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

		УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
		УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Ложь);
		
		Результат = Истина;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

&НаСервере
Процедура ОчиститьСохраненныеДокументыИПрименитьНастройки(Знач ВыбранноеЗначение)
	
	УстановкаЦенСервер.ОчиститьСохраненныеДокументы(СохраненныеДокументы, УникальныйИдентификатор);
	
	ПрименитьНастройки(ВыбранноеЗначение);
	
КонецПроцедуры

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

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

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