#Область ОписаниеПеременных
&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ПринудительноЗакрытьФорму = Истина;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ИспользуетсяЦенообразование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 Тогда
ПараметрыСпособаЗаданияЦеныПроизвольныйТип = НастройкаПодключения.Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти