Виды цен (Колонки прайс-листа) / Форма элемента / Модуль формы

файл

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

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

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

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

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

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

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

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

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

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

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

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

	УстановитьЗначениеНаценокСкидок();

	УстановитьДоступностьВспомогательнаяЦена(ЭтаФорма);
	
	ОбновитьПредставлениеУточненияЗначенияСкидкиНаценки();
	
	ОбновитьПредставлениеУточнениеПороговСрабатывания();

	ОбновитьПредставлениеУточненияЗначенияВалюты();
	
	ОбновитьПредставлениеУточнениеНастроекОкругления();
	
	ОбновитьПредставлениеГлубиныПродаж();
	
	ОбновитьФлажокИспользоватьПорогиСрабатывания();

	НастроитьВидимостьДоступностьЭлементовНастройкиПорогов(ЭтаФорма);
	
	ОбновитьДанныеПоВладельцуИндивидуальногоВидаЦен();
	НастроитьВидимостьДоступностьЭлементовПриИзмененииТипаВидаЦены(ЭтаФорма);
		
КонецПроцедуры

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

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

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

	КонецЕсли;
	
	//-- Локализация
	
КонецПроцедуры

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

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

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

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

			Если Отказ Тогда
				ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'В виде цен указан некорректный влияющий вид цены. Проверьте формулы или базовый вид цены.'"), Объект.Ссылка,,,Отказ);
			КонецЕсли;
			
		КонецЕсли;
		
		ИдентификаторБазовогоВидаЦен = Справочники.ВидыЦен.НайтиИдентификаторВидаЦен(ИдентификаторыБазовогоВидаЦен, ТекущийОбъект.БазовыйВидЦены);
		Справочники.ВидыЦен.ИзвлечьБазовыеЦеныИзФормулы(ТекущийОбъект, ДоступныеБазовыеВидыЦен, "["+ИдентификаторБазовогоВидаЦен+"]", Отказ);
		ТекущийОбъект.Формула = "[" + ИдентификаторБазовогоВидаЦен + "]*" + Формат(((ТекущийОбъект.Наценка/100)+1),"ЧРД=.; ЧН=0; ЧГ=0");

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

	ИначеЕсли ТекущийОбъект.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗагружаетсяИзЯндексМаркет Тогда

		ХранилищеНастроекПеременная = ХранилищеНастроекПараметровСпособаЗаданияЦены;//ХранилищеЗначения
		НастройкиПоСпособуЗаданияЦены = ХранилищеНастроекПеременная.Получить();
		НастройкиПоСпособуЗаданияЦены.ЗначениеПараметра = ПараметрыСпособаЗаданияЦены;
		ТекущийОбъект.ХранилищеНастроекПараметровСпособаЗаданияЦены = Новый ХранилищеЗначения(НастройкиПоСпособуЗаданияЦены, Новый СжатиеДанных(9));

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

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


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

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

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

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

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

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

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

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

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)

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

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

	ИначеЕсли Объект.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяСOzon")
		ИЛИ Объект.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяИзЯндексМаркет") Тогда

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

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

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

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

	Оповестить("ИзменениеВидаЦен", Объект.Ссылка, ВладелецФормы);

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

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

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

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

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

	Если ИмяСобытия = "Запись_НаборКонстант" Тогда
		Если Источник =	"ИспользоватьФорматыМагазинов" 
			Или Источник =	"ИспользоватьНесколькоСкладов"
			Или Источник =	"ИспользоватьПартнеровИКонтрагентов"
			Или Источник =	"ИспользоватьСоглашенияСКлиентами" Тогда
			
			СформироватьСписокВыбораНазначенийВидовЦен();
			
		КонецЕсли;
	КонецЕсли;

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

	ВладелецИндивидуальногоВидаЦенПриИзмененииСервер(ВыбранноеЗначение);
	
	ОбновитьПредлагаемоеЗначениеИдентификатора();
	
КонецПроцедуры

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

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

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

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

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

	ОбновитьПредлагаемоеЗначениеИдентификатора();

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

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

&НаКлиенте
Процедура ГлубинаАнализаДанныхПриИзменении(Элемент)

	ЗаписатьЗначенияДопПараметровВСКД(Элемент.Имя);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВалютаЦеныПриИзменении(Элемент)
	
	НастроитьТаблицуПравилОкругления();
	НастроитьДоступностьЭлементовФормы(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

		Объект.ВспомогательнаяЦена = Ложь;		
	КонецЕсли;	
КонецПроцедуры

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

		Форма.Элементы.ВспомогательнаяЦена.Доступность = Ложь;
		
	Иначе
		Форма.Элементы.ВспомогательнаяЦена.Доступность = Истина;
		
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПриПродажеПриИзменении(Элемент)
	УстановитьЗначениеИспользоватьПриПродажеСервер();
	УстановитьЗначениеВспомогательнаяЦенаСервер();
	УстановитьДоступностьВспомогательнаяЦена(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПриРозничнойПродажеПриИзменении(Элемент)
	УстановитьЗначениеИспользоватьПриПродажеСервер();
	УстановитьЗначениеВспомогательнаяЦенаСервер();
	УстановитьДоступностьВспомогательнаяЦена(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПриПродажеМеждуОрганизациямиПриИзменении(Элемент)
	УстановитьЗначениеВспомогательнаяЦенаСервер();
	УстановитьДоступностьВспомогательнаяЦена(ЭтаФорма);
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ПараметрыСпособаЗаданияЦеныПриИзменении(Элемент)

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

	Если Объект.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяСOzon") Тогда
		ОбновитьПредлагаемоеЗначениеИдентификатора();
	КонецЕсли;
	
	//-- Локализация

	Модифицированность = Истина;
	
КонецПроцедуры

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

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

	Если Объект.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяСOzon") Тогда
		ОбновитьПредлагаемоеЗначениеИдентификатора();
	КонецЕсли;

	//-- Локализация
	
	Модифицированность = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

	ВидВызова = ПолучитьВидВызова(Элемент.Имя);

	НастроитьУточнения(ВидВызова);

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

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

	НастроитьУточнения(ВидВызова);

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

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

	НастроитьУточнения(ВидВызова);

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

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);

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

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

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

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

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

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

	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);

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

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

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

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

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

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

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

			
			РасшифровкаЦеновыхДиапазонов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(РасшифровкаЦеновыхДиапазонов,
				СтрСоединить(МассивПравил, "; "),
				" ");
		Иначе

			РасшифровкаЦеновыхДиапазонов = НСтр("ru = 'Настроить округление цен по диапазонам'");
					
		КонецЕсли;
				
		УточнениеНастроекОкругленияПредставление = Новый ФорматированнаяСтрока(РасшифровкаЦеновыхДиапазонов,,,,"Изменить");
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОбновитьФлажокИспользоватьПорогиСрабатывания()

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

&НаСервере
Процедура ОбновитьВладелецИндивидуальногоВидаЦенПредставление()
	Если ЗначениеЗаполнено(ВладелецИндивидуальногоВидаЦен) Тогда
		МассивТекстов = Новый Массив;

		МассивТекстов.Добавить(Новый ФорматированнаяСтрока(Строка(ВладелецИндивидуальногоВидаЦен),,,,"ОткрытьВладельцаИндивидуальногоВидаЦен"));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоНебезопасныйСпособЗаданияЦены(СпособЗаданияЦены, НебезопасныеСпособыЗаданияЦен)
	
	Возврат НебезопасныеСпособыЗаданияЦен.НайтиПоЗначению(СпособЗаданияЦены) <> Неопределено;
	
КонецФункции

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

	Если Открыта() Тогда
		Закрыть();
	КонецЕсли;

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

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

	ИначеЕсли ВидВызова = "УточнениеВалютПоЦеновымГруппам" Тогда
		 
		Таблица = Объект.Валюты.Выгрузить();

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

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

&НаСервере
Процедура СохранитьНастройки()

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ПолучитьXML(Значение)
	
	Запись = Новый ЗаписьXML();
	Запись.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(Запись, Значение);
	Возврат Запись.Закрыть();
	
КонецФункции

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

	ХранилищеНастроекКомпоновкиДанныхОтбораПоНоменклатуре = Новый ХранилищеЗначения(Настройки);
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Функция БазовыеВидыЦенСервер()
	
	БазовыеВидыЦенМассив = Новый Массив();
	
	Для Каждого ВидЦены Из ДоступныеБазовыеВидыЦен Цикл
		БазовыеВидыЦенМассив.Добавить(ВидЦены.Идентификатор);
	КонецЦикла;
	
	Возврат БазовыеВидыЦенМассив;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьВидимостьЭлементовФормы(Форма)
	
	Элементы = Форма.Элементы;
	Объект = Форма.Объект;
	
	Элементы.ПараметрыВидаРасчета.Видимость = Ложь;
	Элементы.ГлубинаАнализаДанных.Видимость = Ложь;

	Элементы.СтраницаДополнительнойНастройки.Видимость = Ложь;
	
	Элементы.ВалютаЦены.Видимость = Форма.ИспользоватьНесколькоВалют;
	Элементы.ГруппаУточнениеВалютПоЦеновымГруппам.Видимость = Форма.ИспользоватьНесколькоВалют;
	
	Элементы.ИспользоватьПриПередачеПродукцииДавальцу.Видимость = Ложь;
	
	Элементы.ИспользоватьПриВыпускеПродукции.Видимость = Форма.ИспользоватьПроизводство;
	Элементы.ИспользоватьПриОптовойПродаже.Видимость = Форма.ИспользоватьНесколькоВидовЦен;
	
	Элементы.ГруппаУточнениеПоЦеновымГруппам.Видимость= Ложь;	
	Элементы.ГруппаОсновнаяФормулаРасчета.Видимость   = Ложь;
	Элементы.ГруппаНаценкаНаБазовыйВидЦены.Видимость  = Ложь;
	Элементы.ГруппаНаценка.Видимость = Ложь;
	Элементы.ГруппаОтборНоменклатуры.Видимость        = Ложь;
	
	Элементы.СтраницаСКД.Видимость              = Ложь;
	Элементы.СтраницаПравилаРасчета.Видимость   = Ложь;

	Элементы.ГруппаОтборНоменклатуры.Видимость = Истина;
	
	//++ Локализация

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

	//-- Локализация
	
	Если Объект.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБ")
		Или Объект.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПриПоступлении") Тогда

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

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

		Элементы.ГруппаНаценка.Видимость = Истина;

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

		Элементы.ПараметрыВидаРасчета.Видимость = Истина;

		Элементы.СтраницаПравилаРасчета.Видимость 		= Истина;
		Элементы.ГруппаУточнениеПоЦеновымГруппам.Видимость= Истина;
		Элементы.СтраницаДополнительнойНастройки.Видимость= Истина;
		
		Элементы.ГруппаНаценка.Видимость = Истина;
		
	//++ Локализация

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

	Иначе
		
		Элементы.СтраницаПравилаРасчета.Видимость = Истина;

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

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

    ФормаУточнения.Открыть();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗавершениеРедактированияГлубиныПродаж() Экспорт
	ОбновитьПредставлениеГлубиныПродаж()
КонецПроцедуры

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

&НаСервере
Процедура УстановитьЗначениеНаценокСкидок()
	
	Если Объект.Наценка >= 0 Тогда
		НаценкаИлиСкидка = 1;
	ИначеЕсли Объект.Наценка < 0 Тогда 
		НаценкаИлиСкидка = -1;
	КонецЕсли;

	НаценкаПоМодулю = НаценкаИлиСкидка * Объект.Наценка;
	
КонецПроцедуры

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

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

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

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

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

	Объект.Наценка = НаценкаПоМодулю * НаценкаИлиСкидка;
	
КонецПроцедуры

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

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

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

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

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

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

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

	Возврат Результат;	
КонецФункции

&НаКлиенте
Функция БазовыеВидыЦен()
	
	БазовыеВидыЦенМассив = Новый Массив();
	
	Для Каждого ВидЦены Из ДоступныеБазовыеВидыЦен Цикл
		БазовыеВидыЦенМассив.Добавить(ВидЦены.Идентификатор);
	КонецЦикла;
	
	Возврат БазовыеВидыЦенМассив;
	
КонецФункции

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

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

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

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

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

	Форма.Элементы.ИспользоватьРасширеннуюНастройкуОкругления.ТолькоПросмотр= ТолькоПросмотрДанныхОкругления;
	Форма.Элементы.ТочностьОкругления.ТолькоПросмотр 						= ТолькоПросмотрДанныхОкругления;
	Форма.Элементы.ВариантОкругления.ТолькоПросмотр 						= ТолькоПросмотрДанныхОкругления;
	Форма.Элементы.КонструкторОкругления.Доступность 						= НЕ ТолькоПросмотрДанныхОкругления;
	
	Форма.Элементы.УточнениеНастроекОкругленияПредставление.Доступность		= НЕ ТолькоПросмотрДанныхОкругления;
		
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьВидимостьДоступностьЭлементовНастройкиЦенМаркетплейсов(Форма)

	ТолькоПросмотрДанныхЦенМаркетплейсов = Не Форма.ИспользоватьИнтеграциюСOzon;

	Форма.Элементы.ПараметрыСпособаЗаданияЦены.ТолькоПросмотр = ТолькоПросмотрДанныхЦенМаркетплейсов;
	Форма.Элементы.ПараметрыСпособаЗаданияЦеныПроизвольныйТип.ТолькоПросмотр = ТолькоПросмотрДанныхЦенМаркетплейсов;

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ИдентификаторПоТипуЦены(ТипЦены, СписокЗначенийТиповЦен, УчетнаяЗапись)

	ЧастиИдентификатора = Новый Массив;

	Если СписокЗначенийТиповЦен <> Неопределено Тогда
		Для Каждого ТипЦеныСписка Из СписокЗначенийТиповЦен Цикл
			Если ТипЦеныСписка.Представление = ТипЦены Тогда
				ЧастиИдентификатора.Добавить(ТипЦеныСписка.Значение);
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;

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

	Возврат СтрСоединить(ЧастиИдентификатора, "-");

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

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

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

	СписокВыбора = Элементы[ИмяЭлемента].СписокВыбора;
	СписокВыбора.Очистить();

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

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

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

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

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