#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем ИзмененаЦена;
&НаКлиенте
Перем ОтображаетсяВопрос;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ВариантИзмененияЦены = 1;
УстановитьУсловноеОформление();
УстановкаЦенСервер.ЗагрузитьНастройкиОтбораПоУмолчанию(ЭтотОбъект);
Дата = КонецДня(ТекущаяДатаСеанса());
КодФормы = "Обработка_ПрайсЛист_Форма";
ФлагОткрытияФормы = Истина;
ИмяДополнительнойКолонки = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов().ИмяКолонки;
ИспользоватьЦеновыеГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьЦеновыеГруппы");
ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
ИспользоватьСерииНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
ИспользоватьУпаковкиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
ИспользоватьНесколькоВидовЦен = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен");
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(Дата);
ИспользоватьИнтеграциюСЯндексМаркет = Ложь;
ИспользоватьИнтеграциюСOzon = Ложь;
ТекущаяДата = ТекущаяДатаСеанса();
ИспользоватьИнтеграциюСЯндексМаркет = ИнтеграцияСМаркетплейсамиСерверЛокализация.ФункциональнаяОпцияИспользоватьИнтеграциюСЯндексМаркет();
ИспользоватьИнтеграциюСOzon = ИнтеграцияСМаркетплейсамиСерверЛокализация.ФункциональнаяОпцияИспользоватьИнтеграциюСOzon();
ЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре = Истина;
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтотОбъект);
ПравоРегистрацииШтрихкодовНоменклатурыДоступно = ШтрихкодированиеНоменклатурыСервер.ПравоРегистрацииШтрихкодовНоменклатурыДоступно();
ВидыЦен = Неопределено;
Если Параметры.Свойство("ВидыЦен") Тогда
ВидыЦен = Параметры.ВидыЦен;
КонецЕсли;
ТаблицаВидовЦен = Неопределено;
СохраненныеНастройки = УстановкаЦенКлиентСервер.НоваяСтруктураНастроекФормы();
СохраненныеНастройкиИзХранилища = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ПрайсЛист", "Обработка.ПрайсЛист");
Если СохраненныеНастройкиИзХранилища <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(СохраненныеНастройки, СохраненныеНастройкиИзХранилища);
Если СохраненныеНастройки.Свойство("ВыбранныеЦеныТаблица") И ЗначениеЗаполнено(СохраненныеНастройки.ВыбранныеЦеныТаблица) Тогда
ТаблицаВидовЦен = СохраненныеНастройки.ВыбранныеЦеныТаблица;
КонецЕсли;
КонецЕсли;
УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(ЭтотОбъект,ВидыЦен,ТаблицаВидовЦен);
Если Не ЗначениеЗаполнено(Параметры.Номенклатура) И Не ЗначениеЗаполнено(ВидыЦен) Тогда
Если ЗначениеЗаполнено(СохраненныеНастройки.НастройкиКомпоновщика) Тогда
КомпоновщикНастроекОтбор.ЗагрузитьНастройки(СохраненныеНастройки.НастройкиКомпоновщика);
КонецЕсли;
УстановкаЦенСервер.НастроитьЗаголовокОтбора(ЭтотОбъект);
Если ЗначениеЗаполнено(СохраненныеНастройки.НастройкиКомпоновщикаКолонок) Тогда
КомпоновщикНастроекОтборКолонок.ЗагрузитьНастройки(СохраненныеНастройки.НастройкиКомпоновщикаКолонок);
КонецЕсли;
Если ЗначениеЗаполнено(СохраненныеНастройки.ВыбранныеЦеныТаблица) Тогда
Для Каждого СтрокаТЧ Из ВыбранныеЦены Цикл
НайденныйВидЦены = СохраненныеНастройки.ВыбранныеЦеныТаблица.Найти(СтрокаТЧ.Ссылка, "ВидЦены");
СтрокаТЧ.Выбрана = НайденныйВидЦены <> Неопределено И Не СтрокаТЧ.ЗапрещенныйВидЦены;
СтрокаТЧ.Редактировать = СтрокаТЧ.Выбрана;
КонецЦикла;
ИначеЕсли ЗначениеЗаполнено(СохраненныеНастройки.ВыбранныеЦены) Тогда
Для Каждого СтрокаТЧ Из ВыбранныеЦены Цикл
СтрокаТЧ.Выбрана = СохраненныеНастройки.ВыбранныеЦены.Найти(СтрокаТЧ.Ссылка) <> Неопределено
И Не СтрокаТЧ.ЗапрещенныйВидЦены;
СтрокаТЧ.Редактировать = СтрокаТЧ.Выбрана;
КонецЦикла;
КонецЕсли;
УстановкаЦенКлиентСервер.ПроставитьФлагиВлияетЗависитНаКлиенте(ЭтотОбъект);
Если ЗначениеЗаполнено(СохраненныеНастройки.ТаблицаПараметровОтбора) Тогда
ТаблицаПараметровОтбора.Загрузить(СохраненныеНастройки.ТаблицаПараметровОтбора);
КонецЕсли;
ЗаполнитьНастройкиОтображения(СохраненныеНастройки);
ВыбранныеЦены.Сортировать("РеквизитДопУпорядочивания");
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Ложь);
Иначе
Если ВыбранныеЦены.Количество() = 1 Тогда
Для Каждого ТекСтрока Из ВыбранныеЦены Цикл
ТекСтрока.Выбрана = Истина;
КонецЦикла;
Иначе
Если ЗначениеЗаполнено(Параметры.Номенклатура) Тогда
ПараметрыВидовЦен = Новый Структура;
ПараметрыВидовЦен.Вставить("Номенклатура", Параметры.Номенклатура);
ПараметрыВидовЦен.Вставить("Дата", Дата);
ПараметрыВидовЦен.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
МассивВидовЦен = ПолучитьМассивУстановленныхРанееВидовЦенПоНоменклатуре(ПараметрыВидовЦен);
Если МассивВидовЦен.Количество() > 0 Тогда
Для Каждого ВидЦены Из МассивВидовЦен Цикл
МассивСтрок = ВыбранныеЦены.НайтиСтроки(Новый Структура("Ссылка", ВидЦены));
Если МассивСтрок.количество() > 0 Тогда
СтрокаТаблицы = МассивСтрок[0];
Если Не СтрокаТаблицы.Выбрана И Не СтрокаТаблицы.ЗапрещенныйВидЦены Тогда
СтрокаТаблицы.Выбрана = Истина;
СтрокаТаблицы.Редактировать = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
УстановкаЦенКлиентСервер.ПроставитьФлагиВлияетЗависитНаКлиенте(ЭтотОбъект);
ИначеЕсли ЗначениеЗаполнено(ВидыЦен) Тогда
Если ВидыЦен.Количество() > 0 Тогда
Для Каждого ВидЦены Из ВидыЦен Цикл
МассивСтрок = ВыбранныеЦены.НайтиСтроки(Новый Структура("Ссылка", ВидЦены));
Если МассивСтрок.количество() > 0 Тогда
СтрокаТаблицы = МассивСтрок[0];
Если Не СтрокаТаблицы.Выбрана И Не СтрокаТаблицы.ЗапрещенныйВидЦены Тогда
СтрокаТаблицы.Выбрана = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
УстановкаЦенКлиентСервер.ПроставитьФлагиВлияетЗависитНаКлиенте(ЭтотОбъект);
иначе
Для Каждого СтрокаТаблицы Из ВыбранныеЦены Цикл
Если Не СтрокаТаблицы.Выбрана И Не СтрокаТаблицы.ЗапрещенныйВидЦены Тогда
СтрокаТаблицы.Выбрана = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ЗаполнитьНастройкиОтображения(СохраненныеНастройки);
ВыбранныеЦены.Сортировать("РеквизитДопУпорядочивания");
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Ложь);
КонецЕсли;
Если ВариантГруппировки = Неопределено Тогда
ВариантГруппировки = Перечисления.ВариантыНавигацииВФормахНоменклатуры.ПоНоменклатуре;
КонецЕсли;
ЗафиксироватьКолонкуНоменклатуры(ЗафиксироватьКолонкуНоменклатуры);
Если ЗначениеЗаполнено(Параметры.Номенклатура) Тогда
СохранятьВсеНастройки = Ложь;
КомпоновщикНастроекОтбор.Настройки.Отбор.Элементы.Очистить();
СписокНоменклатуры = Новый СписокЗначений;
СписокНоменклатуры.Добавить(Параметры.Номенклатура);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(
КомпоновщикНастроекОтбор.Настройки.Отбор,
"Номенклатура",
ВидСравненияКомпоновкиДанных.ВСписке,
СписокНоменклатуры,
Неопределено,
Истина,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ);
УстановкаЦенСервер.НастроитьЗаголовокОтбора(ЭтотОбъект);
ПрименитьНастройки();
ИначеЕсли ЗначениеЗаполнено(ВидыЦен) Тогда
СохранятьВсеНастройки = Ложь;
КомпоновщикНастроекОтбор.Настройки.Отбор.Элементы.Очистить();
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(
КомпоновщикНастроекОтбор.Настройки.Отбор,
"ЦенаУстановлена",
ВидСравненияКомпоновкиДанных.Равно,
Истина,
Неопределено,
Истина,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ);
УстановкаЦенСервер.НастроитьЗаголовокОтбора(ЭтотОбъект);
ПрименитьНастройки();
ИначеЕсли Параметры.Свойство("ДанныеРедактированияПрайсЛиста") Тогда
ПрименитьНастройки(Неопределено, Параметры.ДанныеРедактированияПрайсЛиста);
Иначе
СохранятьВсеНастройки = Истина;
ПрименитьНастройки();
КонецЕсли;
ИзменениеУстановкиЦенНоменклатуры = ПравоДоступа("Изменение", Метаданные.Документы.УстановкаЦенНоменклатуры);
ИсторияЦенНоменклатуры = ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.ЦеныНоменклатурыПоставщиков)
Или ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.ЦеныНоменклатуры);
Элементы.ДеревоЦен.ТолькоПросмотр = Не ИзменениеУстановкиЦенНоменклатуры;
Элементы.ПечатьПереоценкаВРозницеПросмотр.Видимость = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ПечатьУстановкаЦенНоменклатурыПросмотр.Видимость = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ПечатьЦенникиПросмотр.Видимость = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ПечатьЭтикеткиПросмотр.Видимость = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ДеревоЦенКонтекстноеМенюИсторияИзмененияЦенКонтекст.Видимость = ИсторияЦенНоменклатуры;
Элементы.ЗагрузитьДействующиеЦеныРедактирование.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ФормаЗагрузитьИзДокументовРедактирование.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.РассчитатьРедактирование.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ИзменитьЦеныРедактирование.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ЗакончитьИзменениеЦен.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ОтменитьИзменениеЦен.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ГруппаИзменитьЦеныПросмотр.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ДеревоЦен.КонтекстноеМеню.ПодчиненныеЭлементы.ИзменитьЦены.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ЗагрузитьИзExcelПросмотр.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ЗагрузитьИзExcelРедактирование.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ГруппаБыстрогоРедактирования.Доступность = ИзменениеУстановкиЦенНоменклатуры;
Элементы.ЗагрузитьИзЯндексМаркет.Видимость = ИспользоватьИнтеграциюСЯндексМаркет;
Элементы.ЗагрузитьИзOzon.Видимость = ИспользоватьИнтеграциюСOzon;
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
УстановитьВидимостьБыстрогоРедактирования(ЭтотОбъект);
УстанавливатьВременныеЦеныПриИзмененииНаСервере(ЭтотОбъект);
НастроитьКолонкиКлючаЦен();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтотОбъект, "СканерШтрихкода");
ОткрытьОкноОжиданияПрименитьНастройкиВФоне();
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Модифицированность И НЕ РазрешитьЗакрытие И ОтображаетсяВопрос <> Истина И НЕ ЗавершениеРаботы Тогда
ОтображаетсяВопрос = Истина;
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаРезультатаВопросПередЗакрытием", ЭтотОбъект);
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("ЗаписатьИЗакрыть", НСтр("ru = 'Применить'"));
Кнопки.Добавить("ЗакрытьБезСохранения", НСтр("ru = 'Отменить изменения цен'"));
Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Применить измененные цены?'");
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки);
СтандартнаяОбработка = Ложь;
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если Не ЗавершениеРаботы Тогда
СохранитьНастройкиФормыНаСервере();
КонецЕсли;
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если Источник = "ПодключаемоеОборудование"
И ИмяСобытия = "НеизвестныеШтрихкоды"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ДанныеШтрихкодов = Новый Массив;
Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
ОбработатьШтрихкоды(ДанныеШтрихкодов);
КонецЕсли;
Если ИмяСобытия = "ЗагрузитьИзExcel"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
РезультатЗагрузки = ЗагрузитьИзExcelНаСервере(Параметр);
Если Не РезультатЗагрузки.Выполнено Тогда
ПоказатьПредупреждение(,РезультатЗагрузки.ОписаниеОшибки);
КонецЕсли;
Модифицированность = Истина;
КонецЕсли;
Если ИмяСобытия = "ИзменениеВидаЦен" Тогда
ОбновитьНастройкиВидовЦен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Обработка.ПрайсЛист.Форма.ФормаНастройки" Тогда
ДействуетСессияИзмененияЦен = Ложь;
ОчиститьСохраненныеДокументыИПрименитьНастройки(ВыбранноеЗначение);
ОткрытьОкноОжиданияПрименитьНастройкиВФоне();
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПрайсЛист.Форма.ФормаПоиска" Тогда
Для Каждого СтрокаДерева Из ДеревоЦен.ПолучитьЭлементы() Цикл
Если СтрокаДерева.Номенклатура = ВыбранноеЗначение Тогда
Элементы.ДеревоЦен.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор();
Возврат;
КонецЕсли;
КонецЦикла;
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Номенклатура на найдена'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
Заголовок = ТекстЗаголовка(ЭтотОбъект);
Если ДеревоЦен.ПолучитьЭлементы().Количество() = 0 Тогда
Возврат;
КонецЕсли;
Дата = КонецДня(Дата);
Если Элементы.СтраницыКоманднойПанели.ТекущаяСтраница = Элементы.СтраницыКоманднойПанели.ПодчиненныеЭлементы.СтраницаПросмотр Тогда
ПрименитьНастройки();
ОткрытьОкноОжиданияПрименитьНастройкиВФоне();
Возврат;
КонецЕсли;
ОбновитьСтарыеЦеныНоменклатурыНаСервере();
НужноПересчитывать = Ложь;
Для Каждого ТекСтрока Из ВыбранныеЦены Цикл
Если ТекСтрока.Выбрана И
ТекСтрока.СпособЗаданияЦены <> ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.Вручную") Тогда
Для Каждого ВлияющаяЦена Из ТекСтрока.ВлияющиеЦены Цикл
НайденнаяСтрока = Неопределено;
Для Каждого ВыбраннаяЦена Из ВыбранныеЦены Цикл
Если ВыбраннаяЦена.Ссылка = ВлияющаяЦена.Значение Тогда
НайденнаяСтрока = ВыбраннаяЦена;
КонецЕсли;
КонецЦикла;
Если НайденнаяСтрока = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТекСтрока.Валюта <> НайденнаяСтрока.Валюта Тогда
НужноПересчитывать = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НужноПересчитывать Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не НужноПересчитывать Тогда
Возврат;
КонецЕсли;
ОтветНаВопрос = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ДатаПриИзмененииЗавершение", ЭтотОбъект),
НСтр("ru = 'В документе выбраны виды цены с валютой, отличной от влияющих видов цен. Пересчитать цены?'"),
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ВариантИзмененияЦеныПриИзменении(Элемент)
УстановитьВидимостьБыстрогоРедактирования(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ПереформироватьТаблицуЦен(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаУстановленОтборНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьФормуНастройкиПрайсЛиста(Не ИспользоватьНесколькоВидовЦен);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоЦен
&НаКлиенте
Процедура ДеревоЦенПриАктивизацииЯчейки(Элемент)
ОбновитьИнформационнуюСтроку();
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ОбновитьИнформационнуюСтроку();
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ДеревоЦен" + "Номенклатура" Или Поле.Имя = "ДеревоЦен" + "ВидНоменклатуры" Тогда
Если ЗначениеЗаполнено(Элементы.ДеревоЦен.ТекущиеДанные.Характеристика)
Или ЗначениеЗаполнено(Элементы.ДеревоЦен.ТекущиеДанные.ХарактеристикаЦО)
Или ЗначениеЗаполнено(Элементы.ДеревоЦен.ТекущиеДанные.СерияЦО)
Или ЗначениеЗаполнено(Элементы.ДеревоЦен.ТекущиеДанные.УпаковкаЦО) Тогда
Возврат
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Элементы.ДеревоЦен.ТекущиеДанные.Номенклатура) Тогда
ПоказатьЗначение(Неопределено, Элементы.ДеревоЦен.ТекущиеДанные.Номенклатура);
ИначеЕсли ЗначениеЗаполнено(Элементы.ДеревоЦен.ТекущиеДанные.ВидНоменклатуры) Тогда
ПоказатьЗначение(Неопределено, Элементы.ДеревоЦен.ТекущиеДанные.ВидНоменклатуры);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ИзмененаЦена = Ложь;
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенУпаковкаПриИзмененииНаСервере(Идентификатор, ИмяТекущейКолонки)
УстановкаЦенСервер.ДеревоЦенУпаковкаВалютаПриИзменении(ЭтотОбъект, Идентификатор, ИмяТекущейКолонки);
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенВалютаПриИзмененииНаСервере(Идентификатор, ИмяТекущейКолонки)
УстановкаЦенСервер.ДеревоЦенУпаковкаВалютаПриИзменении(ЭтотОбъект, Идентификатор, ИмяТекущейКолонки, "Валюта");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьДанныеИсторииЦены(СтруктураПараметров)
Если СтруктураПараметров.ИспользуетсяЦенообразование25 Тогда
Запрос = новый Запрос();
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 6
| ЦеныНоменклатуры25.Период КАК Период,
| ЦеныНоменклатуры25.Цена КАК Цена,
| ЦеныНоменклатуры25.Валюта КАК Валюта,
| ЦеныНоменклатуры25.МаркетинговоеМероприятие КАК МаркетинговоеМероприятие
|ИЗ
| РегистрСведений.ЦеныНоменклатуры25 КАК ЦеныНоменклатуры25
|Где
| ЦеныНоменклатуры25.Номенклатура = &Номенклатура
| И ЦеныНоменклатуры25.ХарактеристикаЦО = &ХарактеристикаЦО
| И ЦеныНоменклатуры25.СерияЦО = &СерияЦО
| И ЦеныНоменклатуры25.УпаковкаЦО = &УпаковкаЦО
| И ЦеныНоменклатуры25.ВидЦены = &ВидЦены
|УПОРЯДОЧИТЬ ПО
| ЦеныНоменклатуры25.Период УБЫВ";
Запрос.Параметры.Вставить("Номенклатура", СтруктураПараметров.Номенклатура);
Запрос.Параметры.Вставить("ХарактеристикаЦО", СтруктураПараметров.ХарактеристикаЦО);
Запрос.Параметры.Вставить("УпаковкаЦО", СтруктураПараметров.УпаковкаЦО);
Запрос.Параметры.Вставить("СерияЦО", СтруктураПараметров.СерияЦО);
Запрос.Параметры.Вставить("ВидЦены", СтруктураПараметров.ВидЦены);
Иначе
Запрос = новый Запрос();
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 6
| ЦеныНоменклатуры.Период КАК Период,
| ЦеныНоменклатуры.Цена КАК Цена,
| ЦеныНоменклатуры.Валюта КАК Валюта,
| ЦеныНоменклатуры.МаркетинговоеМероприятие КАК МаркетинговоеМероприятие
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|Где
|ЦеныНоменклатуры.Номенклатура = &Номенклатура И
|ЦеныНоменклатуры.Характеристика = &Характеристика И
|ЦеныНоменклатуры.ВидЦены = &ВидЦены
|УПОРЯДОЧИТЬ ПО ЦеныНоменклатуры.Период УБЫВ";
Запрос.Параметры.Вставить("Номенклатура", СтруктураПараметров.Номенклатура);
Запрос.Параметры.Вставить("Характеристика", СтруктураПараметров.Характеристика);
Запрос.Параметры.Вставить("ВидЦены", СтруктураПараметров.ВидЦены);
КонецЕсли;
ИсторияЦены = Запрос.Выполнить().Выгрузить();
Возврат ИсторияЦены;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьЦенуНаДату(ДатаТекущейЦены, ВидЦены, ПараметрыЗаполнения)
Отбор = Неопределено;
Если ПараметрыЗаполнения.ИспользуетсяЦенообразование25 Тогда
Запрос = Новый Запрос();
Запрос.Параметры.Вставить("Период",ДатаТекущейЦены);
Запрос.Параметры.Вставить("ВидЦены", ВидЦены);
Запрос.Параметры.Вставить("Номенклатура", ПараметрыЗаполнения.Номенклатура);
Запрос.Параметры.Вставить("ХарактеристикаЦО", ПараметрыЗаполнения.ХарактеристикаЦО);
Запрос.Параметры.Вставить("СерияЦО", ПараметрыЗаполнения.СерияЦО);
Запрос.Параметры.Вставить("УпаковкаЦО", ПараметрыЗаполнения.УпаковкаЦО);
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатуры25СрезПоследних.Период КАК Период,
| ЦеныНоменклатуры25СрезПоследних.Цена КАК Цена,
| ЦеныНоменклатуры25СрезПоследних.Валюта КАК Валюта,
| ЦеныНоменклатуры25СрезПоследних.МаркетинговоеМероприятие КАК МаркетинговоеМероприятие
|ИЗ
| РегистрСведений.ЦеныНоменклатуры25.СрезПоследних(&Период,
| ВидЦены = &ВидЦены
| И Номенклатура = &Номенклатура
| И ХарактеристикаЦО = &ХарактеристикаЦО
| И СерияЦО = &СерияЦО
| И УпаковкаЦО = &УпаковкаЦО) КАК ЦеныНоменклатуры25СрезПоследних" ;
Иначе
Запрос = Новый Запрос();
Запрос.Параметры.Вставить("Период",ДатаТекущейЦены);
Запрос.Параметры.Вставить("ВидЦены", ВидЦены);
Запрос.Параметры.Вставить("Номенклатура", ПараметрыЗаполнения.Номенклатура);
Запрос.Параметры.Вставить("Характеристика", ПараметрыЗаполнения.Характеристика);
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Период КАК Период,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
| ЦеныНоменклатурыСрезПоследних.МаркетинговоеМероприятие КАК МаркетинговоеМероприятие
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период,
| ВидЦены = &ВидЦены
| И Номенклатура = &Номенклатура
| И Характеристика = &Характеристика) КАК ЦеныНоменклатурыСрезПоследних
| " ;
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() > 0 Тогда
Отбор = Новый Структура;
Отбор.Вставить("Период", Результат[0].Период);
Отбор.Вставить("Цена", Результат[0].Цена);
Отбор.Вставить("Валюта", Результат[0].Валюта);
Отбор.Вставить("МаркетинговоеМероприятие", Результат[0].МаркетинговоеМероприятие);
КонецЕсли;
Возврат Отбор;
КонецФункции
&НаСервереБезКонтекста
Функция ЕстьЦенаУстановленнаяБудующейДатой(ВидЦены, Номенклатура, Характеристика)
Результат = Ложь;
Запрос = Новый Запрос();
Запрос.Параметры.Вставить("ВидЦены", ВидЦены);
Запрос.Параметры.Вставить("Номенклатура", Номенклатура);
Запрос.Параметры.Вставить("Характеристика", Характеристика);
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Период КАК Период
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,
| ВидЦены = &ВидЦены
| И Номенклатура = &Номенклатура
| И Характеристика = &Характеристика) КАК ЦеныНоменклатурыСрезПоследних
| ";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Результат = (Выборка.Период > ТекущаяДата());
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьИнформационнуюСтрокуИстории(Параметры)
СтрокаЦенаНаДату = НСтр("ru = 'Цена на %1'") + " ";
СтрокаЦенаНаДату = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЦенаНаДату, Формат(Параметры.Период,"ДЛФ=D;"));
СтрокаЗначениеЦены = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = ' %2 %3'"),,Формат(Параметры.Цена,"ЧДЦ=2"), Параметры.Валюта);
ФорматированнаяСтрокаПиктограммаТренда = Новый ФорматированнаяСтрока(" ");
ФорматированнаяСтрокаОтступ = Новый ФорматированнаяСтрока(" ");
Если Параметры.ЦенаИзменена Тогда
Если Параметры.ЭтоВебКлиент Тогда
ФорматированнаяСтрокаНачалоСтроки = Новый ФорматированнаяСтрока(Новый ФорматированнаяСтрока("", " V ",""),Новый Шрифт(,,Истина),,);
Иначе
ФорматированнаяСтрокаНачалоСтроки = Новый ФорматированнаяСтрока("",БиблиотекаКартинок.Изменить, "");
КонецЕсли;
ИначеЕсли Параметры.Период > ТекущаяДата() Тогда
Если Параметры.ЭтоВебКлиент Тогда
ФорматированнаяСтрокаНачалоСтроки = Новый ФорматированнаяСтрока(Новый ФорматированнаяСтрока("", " ! ",""),,WebЦвета.Красный);
Иначе
ФорматированнаяСтрокаНачалоСтроки = Новый ФорматированнаяСтрока("", БиблиотекаКартинок.Внимание16, "");
КонецЕсли;
Иначе
ФорматированнаяСтрокаНачалоСтроки = Новый ФорматированнаяСтрока(" ");
КонецЕсли;
СтрокаЗначениеЦены = Новый ФорматированнаяСтрока(СтрокаЗначениеЦены,Новый Шрифт(,,Истина));
ФорматированнаяСтрокаЦенаНаДату = Новый ФорматированнаяСтрока(СтрокаЦенаНаДату,ФорматированнаяСтрокаОтступ,СтрокаЗначениеЦены);
Если Параметры.Свойство("ПредыдущаяЦена")
И Параметры.ПредыдущаяЦена <> 0
И Параметры.ПредыдущаяЦена <> Параметры.Цена Тогда
ИзменениеЦены = Параметры.Цена - Параметры.ПредыдущаяЦена;
ПроцентИзменения = Параметры.Цена/(Параметры.ПредыдущаяЦена/100)-100;
СтрокаИзменениеЦены = Новый ФорматированнаяСтрока("",Формат(ИзменениеЦены,"ЧДЦ=2"));
ПредыдущаяВалюта = Параметры.ПредыдущаяВалюта;
СтрокаВалютыИзмененияЦены = Новый ФорматированнаяСтрока(" ", ПредыдущаяВалюта["Наименование"], " ");
СтрокаИзмененияПроцента = Новый ФорматированнаяСтрока(" (",Формат(ПроцентИзменения,"ЧДЦ=2"),"%) ");
Если ИзменениеЦены > 0 Тогда
#Если НЕ ВебКлиент Тогда
ФорматированнаяСтрокаПиктограммаТренда = Новый ФорматированнаяСтрока("", БиблиотекаКартинок.ПиктограммаТрендаРостВДиапазоне,"");
#КонецЕсли
ИначеЕсли ИзменениеЦены < 0 Тогда
#Если НЕ ВебКлиент Тогда
ФорматированнаяСтрокаПиктограммаТренда = Новый ФорматированнаяСтрока("", БиблиотекаКартинок.ПиктограммаТрендаПадениеУлучшается,"");
#КонецЕсли
Иначе
ФорматированнаяСтрокаПиктограммаТренда = Новый ФорматированнаяСтрока("");
КонецЕсли;
ФорматированнаяСтрокаИзменение = Новый ФорматированнаяСтрока(СтрокаИзменениеЦены,СтрокаВалютыИзмененияЦены, СтрокаИзмененияПроцента);
Иначе
ФорматированнаяСтрокаИзменение = Новый ФорматированнаяСтрока(" ");
КонецЕсли;
Если Параметры.Свойство("МаркетинговоеМероприятие") И ЗначениеЗаполнено(Параметры.МаркетинговоеМероприятие) Тогда
ФорматированнаяСтрокаМаркетинговоеМероприятие = Новый ФорматированнаяСтрока("по акции",Новый Шрифт(,,Истина),WebЦвета.Коралловый,,ПолучитьНавигационнуюСсылку(Параметры.МаркетинговоеМероприятие));
Иначе
ФорматированнаяСтрокаМаркетинговоеМероприятие = " ";
КонецЕсли;
ФорматированнаяСтрокаИстории = Новый ФорматированнаяСтрока(
ФорматированнаяСтрокаОтступ,
ФорматированнаяСтрокаЦенаНаДату);
ФорматированнаяСтрокаДинамики = Новый ФорматированнаяСтрока(
ФорматированнаяСтрокаИзменение);
ФорматированнаяСтрокаДинамики = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаДинамики,Новый Шрифт(,,Истина),,);
ФорматированнаяСтрокаИстории = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаИстории,Новый Шрифт(,,Истина),,);
Если НЕ Параметры.ЭтоТекущаяЦена Тогда
ФорматированнаяСтрокаИстории = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаИстории,Новый Шрифт(,,Истина),WebЦвета.Серый);
ФорматированнаяСтрокаДинамики = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаДинамики,Новый Шрифт(,,Истина),WebЦвета.Серый);
КонецЕсли;
СтруктураСтрокиИстории = Новый Структура();
СтруктураСтрокиИстории.Вставить("ФорматированнаяСтрокаИстории",ФорматированнаяСтрокаИстории);
СтруктураСтрокиИстории.Вставить("ФорматированнаяСтрокаДинамики",ФорматированнаяСтрокаДинамики);
СтруктураСтрокиИстории.Вставить("ФорматированнаяСтрокаПиктограммаТренда",ФорматированнаяСтрокаПиктограммаТренда);
СтруктураСтрокиИстории.Вставить("ФорматированнаяСтрокаНачалоСтроки",ФорматированнаяСтрокаНачалоСтроки);
СтруктураСтрокиИстории.Вставить("ФорматированнаяСтрокаПоАкции",ФорматированнаяСтрокаМаркетинговоеМероприятие);
Возврат СтруктураСтрокиИстории;
КонецФункции
&НаСервере
Функция СформироватьСтрокуВалютИзМассива(МассивВалют)
СтрокаВалют = "";
Для Инд=0 По МассивВалют.Количество()-1 Цикл
Валюта = МассивВалют.Получить(Инд);
СтрокаВалют = СтрокаВалют + Валюта.Наименование;
Если Инд<>МассивВалют.Количество()-1 Тогда
СтрокаВалют = СтрокаВалют + НСтр("ru = ','")+ " ";
КонецЕсли;
КонецЦикла;
Возврат СтрокаВалют;
КонецФункции
&НаКлиенте
Функция ПолучитьИнформационнуюСтрокуДляВидаЦен(Элементы, ВидЦены, МассивВалют, ИмяТекущейКолонки) Экспорт
ФорматированнаяСтрокаВидЦен = "";
ФорматированнаяСтрокаПредупреждениеНесколькоВалют = "";
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
ГруппаЦен = Элементы.Найти("ДеревоЦен" + "ГруппаЦены" + ИмяТекущейКолонки);
Если ГруппаЦен <> Неопределено Тогда
Если ТекущиеДанные.свойство("Валюта" + ИмяТекущейКолонки) Тогда
НаименованиеВалюты = Новый ФорматированнаяСтрока( " " + Строка(ТекущиеДанные["Валюта" + ИмяТекущейКолонки]),Новый Шрифт(,,Истина));
Иначе
НаименованиеВалюты = Новый ФорматированнаяСтрока(Прав(ГруппаЦен.Заголовок, 4),Новый Шрифт(,,Истина));
КонецЕсли;
НаименованиеВидаЦен = Лев(ГруппаЦен.Заголовок, СтрДлина(ГруппаЦен.Заголовок) - 5);
КонецЕсли;
ФорматированнаяСтрокаВидЦен = Новый ФорматированнаяСтрока(НаименованиеВидаЦен, Новый Шрифт(,,Истина),,,ПолучитьНавигационнуюСсылку(ВидЦены));
#Если ВебКлиент Тогда
ФорматированнаяСтрокаВидЦен = Новый ФорматированнаяСтрока(" ", ФорматированнаяСтрокаВидЦен);
#Иначе
ФорматированнаяСтрокаВидЦен = Новый ФорматированнаяСтрока(" ", ГруппаЦен.КартинкаШапки, " ", ФорматированнаяСтрокаВидЦен);
#КонецЕсли
Если МассивВалют.Количество()>1 Тогда
СтрокаВалют = СформироватьСтрокуВалютИзМассива(МассивВалют);
ФорматированнаяСтрокаВалют = Новый ФорматированнаяСтрока(СтрокаВалют, Новый Шрифт(,,Истина),WebЦвета.Красный,,"СсылкаРазныеВалюты");
#Если ВебКлиент Тогда
ФорматированнаяСтрокаПредупреждениеНесколькоВалют = Новый ФорматированнаяСтрока(" ", СтрокаВалют);
#Иначе
ФорматированнаяСтрокаПредупреждениеНесколькоВалют = Новый ФорматированнаяСтрока(" ",БиблиотекаКартинок.Внимание16, " ", ФорматированнаяСтрокаВалют);
#КонецЕсли
КонецЕсли;
ФорматированнаяИнформационнаяСтрокаПоВидуЦен = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаВидЦен, ФорматированнаяСтрокаПредупреждениеНесколькоВалют);
Возврат ФорматированнаяИнформационнаяСтрокаПоВидуЦен;
КонецФункции
&НаКлиенте
Процедура ОчиститьИнформациюИстории()
ПустаяСтрока = Новый ФорматированнаяСтрока("");
Элементы.ДекорацияИстория.Заголовок = ПустаяСтрока;
Элементы.ДекорацияДинамика.Заголовок = ПустаяСтрока;
Элементы.ДекорацияТренд.Заголовок = ПустаяСтрока;
Элементы.ДекорацияНачалоСтроки.Заголовок = ПустаяСтрока;
Элементы.ДекорацияПоАкции.Заголовок = ПустаяСтрока;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьГруппуИсторииИзмененияЦены(ПараметрыЗаполнения)
ТекущиеДанные = ПараметрыЗаполнения.ТекущиеДанные;
ИмяКолонки = ПараметрыЗаполнения.ИмяКолонки;
ЦенаИзменена = ТекущиеДанные["ИзмененаВручную" + ИмяКолонки];
СтараяЦена = ТекущиеДанные["СтараяЦена" + ИмяКолонки];
НоваяЦена = ТекущиеДанные[ИмяКолонки];
Валюта = ТекущиеДанные["Валюта" + ИмяКолонки];
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Номенклатура", ПараметрыЗаполнения.Номенклатура);
СтруктураПараметров.Вставить("Характеристика", ПараметрыЗаполнения.Характеристика);
СтруктураПараметров.Вставить("ХарактеристикаЦО", ПараметрыЗаполнения.ХарактеристикаЦО);
СтруктураПараметров.Вставить("СерияЦО", ПараметрыЗаполнения.СерияЦО);
Если ПараметрыЗаполнения.УпаковкаЦО = ПараметрыЗаполнения.ЕдиницаИзмерения Тогда
СтруктураПараметров.Вставить("УпаковкаЦО", ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
Иначе
СтруктураПараметров.Вставить("УпаковкаЦО", ПараметрыЗаполнения.УпаковкаЦО);
КонецЕсли;
СтруктураПараметров.Вставить("ВидЦены", ПараметрыЗаполнения.ВидЦены);
СтруктураПараметров.Вставить("ЦенаИзменена", ЦенаИзменена);
СтруктураПараметров.Вставить("СтараяЦена", СтараяЦена);
СтруктураПараметров.Вставить("НоваяЦена", НоваяЦена);
СтруктураПараметров.Вставить("Валюта", Валюта);
СтруктураПараметров.Вставить("Отбор", ПараметрыЗаполнения.Отбор);
СтруктураПараметров.Вставить("Дата", Дата);
СтруктураПараметров.Вставить("ИспользуетсяЦенообразование25", ПараметрыЗаполнения.ИспользуетсяЦенообразование25);
#Если ВебКлиент Тогда
СтруктураПараметров.Вставить("ЭтоВебКлиент", Истина);
#Иначе
СтруктураПараметров.Вставить("ЭтоВебКлиент", Ложь);
#КонецЕсли
СтруктураМассивовСтрок = ПолучитьИнформационныеСтрокиИстории(СтруктураПараметров);
Если НЕ СтруктураМассивовСтрок.ПустаяИстория Тогда
Элементы.ДекорацияИстория.Заголовок = Новый ФорматированнаяСтрока(СтруктураМассивовСтрок.МассивФорматированныхСтрок);
Элементы.ДекорацияДинамика.Заголовок = Новый ФорматированнаяСтрока(СтруктураМассивовСтрок.МассивФорматированныхСтрокДинамики);
Элементы.ДекорацияТренд.Заголовок = Новый ФорматированнаяСтрока(СтруктураМассивовСтрок.МассивФорматированныхСтрокПиктограммТренда);
Элементы.ДекорацияНачалоСтроки.Заголовок = Новый ФорматированнаяСтрока(СтруктураМассивовСтрок.МассивФорматированныхСтрокНачалаСтроки);
Элементы.ДекорацияПоАкции.Заголовок = Новый ФорматированнаяСтрока(СтруктураМассивовСтрок.МассивФорматированныхСтрокПоАкции);
Элементы.ГруппаТаблицыИнформации.Видимость = Истина;
Элементы.ГруппаОтчетовИсторииЦен.Видимость = Истина;
Элементы.ГруппаНадписьПустаяИстория.Видимость = Ложь;
Иначе
Элементы.ГруппаТаблицыИнформации.Видимость = Ложь;
Элементы.ГруппаОтчетовИсторииЦен.Видимость = Ложь;
Элементы.ГруппаНадписьПустаяИстория.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьДатуТекущейЦены()
Если ЗначениеЗаполнено(ДатаДействующихЦен) Тогда
ДатаТекЦены = ДатаДействующихЦен;
ИначеЕсли ЗначениеЗаполнено(Дата) Тогда
ДатаТекЦены = НачалоДня(Дата)-1;
Иначе
ДатаТекЦены = НачалоДня(ТекущаяДата())-1;
КонецЕсли;
Возврат ДатаТекЦены;
КонецФункции
&НаСервере
Функция ЗаполнитьТаблицуОбходомДерева(Дерево)
ТаблицаВалютПоВидамЦен = Новый ТаблицаЗначений();
ТаблицаВалютПоВидамЦен.Колонки.Добавить("ВидЦены");
ТаблицаВалютПоВидамЦен.Колонки.Добавить("Валюта");
Для Каждого Колонка Из Дерево.Колонки Цикл
Если СтрНайти(Колонка.Имя, "ВидЦены")>0 Тогда
ПозицияПодстроки = СтрНайти(Колонка.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяКолонки = Прав(Колонка.Имя, СтрДлина(Колонка.Имя) - ПозицияПодстроки + 1);
КонецЕсли;
Если ИмяКолонки = Колонка.Имя Тогда
НайденныеВидыЦен = ВыбранныеЦены.НайтиСтроки(Новый Структура("ИмяКолонки", ИмяКолонки));
Если НайденныеВидыЦен.Количество() > 0 Тогда
ВидЦены = НайденныеВидыЦен[0].Ссылка;
ИмяКолонкиВалюты = "Валюта" + ИмяКолонки;
МассивВалют = Новый Массив();
ЗаполнитьМассивОбходомДерева(Дерево, ИмяКолонкиВалюты, МассивВалют);
Для Инд=1 По МассивВалют.Количество() Цикл
СтрокаТаблицыВалюты = ТаблицаВалютПоВидамЦен.Добавить();
СтрокаТаблицыВалюты.ВидЦены = ВидЦены;
СтрокаТаблицыВалюты.Валюта = МассивВалют[Инд-1];
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаВалютПоВидамЦен;
КонецФункции
&НаСервере
Функция ПолучитьМассивСтрокИзТаблицыЗначений(ТаблицаЗначений)
МассивСтрок = Новый Массив;
Для каждого Стр из ТаблицаЗначений Цикл
МассивСтрок.Добавить(Новый Структура("ВидЦены, Валюта",Стр.ВидЦены,Стр.Валюта));
КонецЦикла;
Возврат МассивСтрок;
КонецФункции
&НаСервере
Функция ЗаполнитьМассивВалютПоВидамЦен()
Дерево = РеквизитФормыВЗначение("ДеревоЦен");
ТаблицаВалютПоВидамЦен = Новый ТаблицаЗначений;
ТаблицаВалютПоВидамЦен.Колонки.Добавить("ВидЦены", Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"));
ТаблицаВалютПоВидамЦен.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
ТаблицаВалютПоВидамЦен = ЗаполнитьТаблицуОбходомДерева(Дерево);
МассивВалютПоВидамЦен = ПолучитьМассивСтрокИзТаблицыЗначений(ТаблицаВалютПоВидамЦен);
Возврат МассивВалютПоВидамЦен;
КонецФункции
&НаСервере
Процедура ЗаполнитьМассивОбходомДерева(Дерево, ИмяКолонкиВалюты, МассивВалют)
Для Каждого Стр Из Дерево.Строки Цикл
Если Стр.Строки.Количество() > 0 Тогда
ЗаполнитьМассивОбходомДерева(Стр, ИмяКолонкиВалюты, МассивВалют);
Иначе
ВалютаСтроки = Стр[ИмяКолонкиВалюты];
Если ЗначениеЗаполнено(ВалютаСтроки) И МассивВалют.Найти(ВалютаСтроки) = Неопределено Тогда
МассивВалют.Добавить(ВалютаСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьМассивИспользуемыхВалют(ИмяКолонкиВалюты, ТолькоВыделенныеСтроки = Ложь)
МассивВалют = Новый Массив;
Если ТолькоВыделенныеСтроки Тогда
Для Каждого ИдентификаторСтрокиДереваЦен Из Элементы.ДеревоЦен.ВыделенныеСтроки Цикл
СтрокаТЧ = ДеревоЦен.НайтиПоИдентификатору(ИдентификаторСтрокиДереваЦен);
ВалютаСтроки = СтрокаТЧ[ИмяКолонкиВалюты];
Если ЗначениеЗаполнено(ВалютаСтроки) И МассивВалют.Найти(ВалютаСтроки) = Неопределено Тогда
МассивВалют.Добавить(СтрокаТЧ[ИмяКолонкиВалюты]);
КонецЕсли;
КонецЦикла;
Иначе
Дерево = РеквизитФормыВЗначение("ДеревоЦен");
ЗаполнитьМассивОбходомДерева(Дерево, ИмяКолонкиВалюты, МассивВалют);
КонецЕсли;
Возврат МассивВалют;
КонецФункции
&НаКлиенте
Процедура ДеревоЦенУпаковкаПриИзмененииКлиент(Элемент)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "Упаковка", "ЗапретРедактирования");
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ТекущиеДанные.ПолучитьИдентификатор());
ТекущееЗначение = ТекущиеДанные[ИмяТекущейКолонки];
ПараметрыВызова = УстановкаЦенКлиент.ПараметрыИзмененияВЭлементеДереваЦен("ИзменитьУпаковкуВСтрокеДереваЦен");
ПараметрыВызова.ТекущееЗначение = ТекущееЗначение;
ПараметрыВызова.ИмяТекущейКолонки = ИмяТекущейКолонки;
ПараметрыВызова.ИмяКолонкиЗапретаРедактирования = ИмяКолонкиЗапретаРедактирования;
УстановкаЦенКлиент.ПрименитьИзмененияВДеревеЦен(ТекущаяСтрока, ПараметрыВызова);
ОбновитьИнформационнуюСтроку();
ДеревоЦенУпаковкаПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор(), ИмяТекущейКолонки);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенВалютаПриИзмененииКлиент(Элемент)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "Валюта", "ЗапретРедактирования");
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ТекущиеДанные.ПолучитьИдентификатор());
ТекущееЗначение = ТекущиеДанные[ИмяТекущейКолонки];
ПараметрыВызова = УстановкаЦенКлиент.ПараметрыИзмененияВЭлементеДереваЦен("ИзменитьВалютуВСтрокеДереваЦен");
ПараметрыВызова.ТекущееЗначение = ТекущееЗначение;
ПараметрыВызова.ИмяТекущейКолонки = ИмяТекущейКолонки;
ПараметрыВызова.ИмяКолонкиЗапретаРедактирования = ИмяКолонкиЗапретаРедактирования;
УстановкаЦенКлиент.ПрименитьИзмененияВДеревеЦен(ТекущаяСтрока, ПараметрыВызова);
ОбновитьИнформационнуюСтроку();
ДеревоЦенВалютаПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор(), ИмяТекущейКолонки);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенЦенаПриИзмененииКлиент(Элемент)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяКолонкиУпаковка = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "ВидЦены", "Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "ВидЦены", "ЗапретРедактирования" + "ВидЦены");
ИзмененПроцент = Ложь;
ИзмененаСумма = Ложь;
ИзмененаФормула = Ложь;
ПроцентИзменения = 0;
СуммаИзменения = 0;
НоваяФормула = "";
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
Если СтрНайти(ИмяТекущейКолонки, "ПроцентИзменения" + "ВидЦены") Тогда
ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "ПроцентИзменения" + "ВидЦены", "ВидЦены");
ТекущиеДанные[ИмяТекущейКолонки] = Окр(
ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * ((ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] / 100) + 1),
15,
2);
ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки];
ИзмененПроцент = Истина;
ПроцентИзменения = ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки];
ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "ПроцентИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(СтрЗаменить(Элемент.Имя, "ПроцентИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"ЗапретРедактирования" + "ВидЦены");
КонецЕсли;
Если СтрНайти(ИмяТекущейКолонки, "СуммаИзменения" + "ВидЦены") Тогда
ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "СуммаИзменения" + "ВидЦены", "ВидЦены");
ТекущиеДанные[ИмяТекущейКолонки] = ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] + ТекущиеДанные["СуммаИзменения" + ИмяТекущейКолонки];
Если ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] <> 0 Тогда
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] / ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * 100;
Иначе
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
КонецЕсли;
ИзмененаСумма = Истина;
СуммаИзменения = ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки];
ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "СуммаИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(СтрЗаменить(Элемент.Имя, "СуммаИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"ЗапретРедактирования" + "ВидЦены");
КонецЕсли;
Если СтрНайти(ИмяТекущейКолонки, "Формула" + "ВидЦены") Тогда
ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "Формула" + "ВидЦены", "ВидЦены");
ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки];
Если ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] <> 0 Тогда
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] / ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * 100;
Иначе
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
КонецЕсли;
ИзмененаФормула = Истина;
НоваяФормула = ТекущиеДанные["Формула"+ИмяТекущейКолонки];
ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "Формула" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(СтрЗаменить(Элемент.Имя, "Формула" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"ЗапретРедактирования" + "ВидЦены");
КонецЕсли;
Если ТекущиеДанные[ИмяКолонкиЗапретаРедактирования] Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ТекущиеДанные.ПолучитьИдентификатор());
ТекущиеДанные["СуммаИзменения" + ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки]
- ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки];
ТекущиеДанные["ИзмененаВручную" + ИмяТекущейКолонки] =
(ТекущиеДанные["СуммаИзменения" + ИмяТекущейКолонки] <> 0);
ТекущиеДанные["ИзмененаАвтоматически" + ИмяТекущейКолонки] = Ложь;
Если ТекущиеДанные["СтараяЦена"+ИмяТекущейКолонки] <> 0 Тогда
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = Окр(
100 * (ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена"+ИмяТекущейКолонки])
/ ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки], 5, 2);
Иначе
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
КонецЕсли;
Если ЗаполнятьАвтоматическиЦеныХарактеристикПоНоменклатуре Тогда
Номенклатура = ТекущиеДанные.Номенклатура;
МассивСтруктурУпаковокНоменклатуры = Новый Массив;
СоответствиеКоэффициентовУпаковокНоменклатуры = Неопределено;
КоэффициентУпаковкиЦеныИсточника = 1;
Если ИспользоватьУпаковкиНоменклатуры Тогда
ТекущееЗначениеУпаковки = ТекущиеДанные[ИмяКолонкиУпаковка];
Если ЗначениеЗаполнено(ТекущееЗначениеУпаковки) Тогда
Структура = УстановкаЦенКлиентСервер.ИнициализироватьОписаниеУпаковкиНоменклатуры();
Структура.Номенклатура = Номенклатура;
Структура.Упаковка = ТекущееЗначениеУпаковки;
МассивСтруктурУпаковокНоменклатуры.Добавить(Структура);
КонецЕсли;
ПараметрыВызова = УстановкаЦенКлиент.ПараметрыИзмененияВЭлементеДереваЦен("ЗаполнитьУпаковкиНоменклатуры");
ПараметрыВызова.ИмяКолонкиУпаковка = ИмяКолонкиУпаковка;
ПараметрыВызова.ИмяКолонкиЗапретаРедактирования = ИмяКолонкиЗапретаРедактирования;
ПараметрыВызова.МассивСтруктурУпаковокНоменклатуры = МассивСтруктурУпаковокНоменклатуры;
УстановкаЦенКлиент.ПрименитьИзмененияВДеревеЦен(ТекущаяСтрока, ПараметрыВызова);
Если МассивСтруктурУпаковокНоменклатуры.Количество() > 0 Тогда
СоответствиеКоэффициентовУпаковокНоменклатуры = КоэффициентыУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры);
КонецЕсли;
Если ЗначениеЗаполнено(ТекущееЗначениеУпаковки) И СоответствиеКоэффициентовУпаковокНоменклатуры <> Неопределено Тогда
РезультатПоиска = УстановкаЦенКлиентСервер.ПолучитьКоэффициентУпаковкиНоменклатуры(СоответствиеКоэффициентовУпаковокНоменклатуры,
Номенклатура,
ТекущееЗначениеУпаковки);
Если РезультатПоиска <> Неопределено Тогда
КоэффициентУпаковкиЦеныИсточника = РезультатПоиска;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ТекущееЗначение = ТекущиеДанные[ИмяТекущейКолонки];
ПараметрыВызова = УстановкаЦенКлиент.ПараметрыИзмененияВЭлементеДереваЦен("ИзменитьДанныеВСтрокеДереваЦен");
ПараметрыВызова.ИмяКолонкиУпаковка = ИмяКолонкиУпаковка;
ПараметрыВызова.ИмяКолонкиЗапретаРедактирования = ИмяКолонкиЗапретаРедактирования;
ПараметрыВызова.СоответствиеКоэффициентовУпаковокНоменклатуры = СоответствиеКоэффициентовУпаковокНоменклатуры;
ПараметрыВызова.ТекущееЗначениеУпаковки = ТекущееЗначениеУпаковки;
ПараметрыВызова.ТекущееЗначение = ТекущееЗначение;
ПараметрыВызова.КоэффициентУпаковкиЦеныИсточника = КоэффициентУпаковкиЦеныИсточника;
ПараметрыВызова.ИмяТекущейКолонки = ИмяТекущейКолонки;
ПараметрыВызова.НоваяФормула = НоваяФормула;
ПараметрыВызова.ПроцентИзменения = ПроцентИзменения;
ПараметрыВызова.СуммаИзменения = СуммаИзменения;
ПараметрыВызова.ИзмененПроцент = ИзмененПроцент;
ПараметрыВызова.ИзмененаСумма = ИзмененаСумма;
ПараметрыВызова.ИзмененаФормула = ИзмененаФормула;
ПараметрыВызова.Номенклатура = Номенклатура;
ПараметрыВызова.ИспользоватьУпаковкиНоменклатуры = ИспользоватьУпаковкиНоменклатуры;
УстановкаЦенКлиент.ПрименитьИзмененияВДеревеЦен(ТекущаяСтрока, ПараметрыВызова);
КонецЕсли;
РассчитатьЦеныПоИдентификаторуСтрокиНаСервере(ТекущиеДанные.ПолучитьИдентификатор(),ИмяТекущейКолонки);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПривязываютсяДинамически
&НаКлиенте
Процедура Подключаемый_ДеревоЦенЦенаПриИзменении(Элемент)
ИзмененаЦена = Истина;
ДеревоЦенЦенаПриИзмененииКлиент(Элемент);
Если Не ИспользоватьРежимРедактирования Тогда
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенФормулаПриИзменении(Элемент)
ИзмененаЦена = Истина;
ДеревоЦенЦенаПриИзмененииКлиент(Элемент);
МассивВидовЦен = Новый Массив();
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(Элемент.имя);
Если ВидЦены <> Неопределено Тогда
МассивВидовЦен.Добавить(ВидЦены.ссылка);
ПараметрыРасчета = Новый Структура();
ПараметрыРасчета.Вставить("ЗагрузкаСтарыхЦен", Ложь);
ПараметрыРасчета.Вставить("ОкруглениеРучныхЦен", Ложь);
ПараметрыРасчета.Вставить("ВидыЦен", МассивВидовЦен);
ПараметрыРасчета.Вставить("ТолькоВыделенныеСтроки", Истина);
ПараметрыРасчета.Вставить("ТолькоНезаполненные", Ложь);
ПараметрыРасчета.Вставить("РасчетПоФормулам", Истина);
РассчитатьЦеныНаСервере(ПараметрыРасчета);
КонецЕсли;
Если Не ИспользоватьРежимРедактирования Тогда
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенФормулаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
ДополнительныеПараметры = новый Структура("ИмяЭлементаВозврата", ИмяТекущейКолонки);
ОткрытьФорму("ОбщаяФорма.КонструкторФормул",
ПолучитьПараметрыФормыРедактированияЦены(Элемент.Имя), Элемент,,,,
Новый ОписаниеОповещения("КонструкторФормулЗавершение", ЭтотОбъект,ДополнительныеПараметры),
РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры
&НаКлиенте
Процедура КонструкторФормулЗавершение(Результат, ДополнительныеПараметры) Экспорт
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если Результат <> Неопределено Тогда
ЗначениеИзмененияСтрока = Результат;
ТекущиеДанные[ДополнительныеПараметры.ИмяЭлементаВозврата] = Результат;
Подключаемый_ДеревоЦенФормулаПриИзменении(Элементы["ДеревоЦен" + ДополнительныеПараметры.ИмяЭлементаВозврата]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонструкторФормулЗавершение_1(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
ЗначениеИзмененияСтрока = Результат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенУпаковкаПриИзменении(Элемент)
ДеревоЦенУпаковкаПриИзмененииКлиент(Элемент);
Если Не ИспользоватьРежимРедактирования Тогда
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенВалютаПриИзменении(Элемент)
ДеревоЦенВалютаПриИзмененииКлиент(Элемент);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервере
Функция ЗаполнитьМассивДляПересчета(ПараметрыЗаполнения, ВидЦены)
МассивВидовЦен = Новый Массив();
Если ВариантИзмененияЦены = 1 Тогда
МассивВидовЦен.Добавить(Новый Структура("ВидЦены, ПроцентИзменения", ВидЦены.Ссылка, ЗначениеИзмененияЧисло));
ИначеЕсли ВариантИзмененияЦены = 2 Тогда
МассивВидовЦен.Добавить(Новый Структура("ВидЦены, СуммаИзменения", ВидЦены.Ссылка, ЗначениеИзмененияЧисло));
ИначеЕсли ВариантИзмененияЦены = 3 Тогда
МассивВидовЦен.Добавить(Новый Структура("ВидЦены, Цена", ВидЦены.Ссылка, ЗначениеИзмененияЧисло));
ИначеЕсли ВариантИзмененияЦены = 4 Тогда
МассивВидовЦен.Добавить(Новый Структура("ВидЦены, Формула", ВидЦены.Ссылка, ЗначениеИзмененияСтрока));
КонецЕсли;
ТолькоВыделенные = Элементы.ДеревоЦен.ВыделенныеСтроки.Количество() > 1;
Результат = Новый Структура();
Результат.Вставить("ИзменятьПоОтношениюКСтаройЦене", ПараметрыЗаполнения.ЗагрузкаСтарыхЦен);
Результат.Вставить("ЗагрузкаСтарыхЦен", ПараметрыЗаполнения.ЗагрузкаСтарыхЦен);
Результат.Вставить("ВидыЦен", МассивВидовЦен);
Результат.Вставить("ТолькоВыделенныеСтроки", ТолькоВыделенные);
Результат.Вставить("ТолькоНеЗаполненные", Ложь);
Результат.Вставить("ОкруглениеРучныхЦен", ПараметрыЗаполнения.ОкруглениеРучныхЦен);
Результат.Вставить("ПрименятьОкругление", ПараметрыЗаполнения.ОкруглениеРучныхЦен);
Результат.Вставить("РасчетПоФормулам", ПараметрыЗаполнения.РасчетПоФормулам);
Результат.Вставить("ВариантИзмененияЦены", ВариантИзмененияЦены);
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ИзменитьЦеныНаПроцентНаКлиентеПоТипуВызова(ВызовИзПанелиБыстрогоДоступа, ВидЦены = Неопределено)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Истина);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Ложь);
ПараметрыЗаполнения.Вставить("УчитыватьРазностьВалют", Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
Если ВызовИзПанелиБыстрогоДоступа Тогда
ПараметрыРасчета = ЗаполнитьМассивДляПересчета(ПараметрыЗаполнения, ВидЦены);
ИзменитьЦеныНаПроцентНаКлиентеЗавершение(ПараметрыРасчета);
Иначе
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораПроцентаИзменения",
ПараметрыОткрытия,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ИзменитьЦеныНаПроцентНаКлиентеЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаПроцентНаКлиенте(Команда)
ИзменитьЦеныНаПроцентНаКлиентеПоТипуВызова(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦены(Команда)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Истина);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Ложь);
ПараметрыЗаполнения.Вставить("УчитыватьРазностьВалют", Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
ПараметрыРасчета = Неопределено;
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаИзмененияЦен",
ПараметрыОткрытия,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ИзменитьЦеныНаКлиентеЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаНаКлиентеПоТипуВызова(ВызовИзПанелиБыстрогоДоступа, ВидЦены = Неопределено)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен", Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен", Истина);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам", Ложь);
ПараметрыЗаполнения.Вставить("УчитыватьРазностьВалют",Истина);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
Если ВызовИзПанелиБыстрогоДоступа Тогда
ПараметрыРасчета = ЗаполнитьМассивДляПересчета(ПараметрыЗаполнения, ВидЦены);
ИзменитьЦеныНовыйВариантНаКлиентеЗавершение(ПараметрыРасчета);
Иначе
МассивВалютПоВидамЦен = ЗаполнитьМассивВалютПоВидамЦен();
Если МассивВалютПоВидамЦен.Количество()>0 Тогда
ПараметрыЗаполнения.Вставить("МассивВалютПоВидамЦен",МассивВалютПоВидамЦен);
КонецЕсли;
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаИзмененияЦенНовыйВариант",
ПараметрыОткрытия, ЭтотОбъект,,,, Новый ОписаниеОповещения("ИзменитьЦеныНовыйВариантНаКлиентеЗавершение",
ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьЦеныПоФормулеНаНаКлиентеПоТипуВызова(ВызовИзПанелиБыстрогоДоступа, ВидЦены = Неопределено)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Истина);
ПараметрыЗаполнения.Вставить("УчитыватьРазностьВалют", Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
Если ВызовИзПанелиБыстрогоДоступа Тогда
ПараметрыРасчета = ЗаполнитьМассивДляПересчета(ПараметрыЗаполнения, ВидЦены);
РассчитатьЦеныНаКлиентеЗавершение(ПараметрыРасчета);
Иначе
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаИзмененияЦенНовыйВариант",
ПараметрыОткрытия, ЭтотОбъект,,,, Новый ОписаниеОповещения("ИзменитьЦеныНовыйВариантНаКлиентеЗавершение",
ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНовыйВариант(Команда)
ИзменитьЦеныНаНаКлиентеПоТипуВызова(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаПроцентНаКлиентеЗавершение(Результат, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
Если ЗапуститьАсинхронно(ПараметрыРасчета) Тогда
РезультатРасчетаДлительнойОперации = ИзменитьЦеныНаПроцентНаСервереВФоне(ПараметрыРасчета);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИзменитьЦеныНаКлиентеЗавершениеОбщая(РезультатРасчетаДлительнойОперации);
Иначе
ОткрытьОкноОжиданияРасчетаЦенВФоне("ИзменитьЦеныНаКлиентеЗавершениеОбщая")
КонецЕсли;
Иначе
ИзменитьЦеныНаПроцентНаСервере(ПараметрыРасчета);
ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
Если ЗапуститьАсинхронно(ПараметрыРасчета) Тогда
РезультатРасчетаДлительнойОперации = ИзменитьЦеныНаСервереВФоне(ПараметрыРасчета);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИзменитьЦеныНаКлиентеЗавершениеОбщая(РезультатРасчетаДлительнойОперации);
иначе
ОткрытьОкноОжиданияРасчетаЦенВФоне("ИзменитьЦеныНаКлиентеЗавершениеОбщая")
КонецЕсли;
Иначе
ИзменитьЦеныНаСервере(ПараметрыРасчета);
ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
Если ЗапуститьАсинхронно(ПараметрыРасчета) Тогда
РезультатРасчетаДлительнойОперации = РассчитатьЦеныНаСервереВФоне(ПараметрыРасчета);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИзменитьЦеныНаКлиентеЗавершениеОбщая(РезультатРасчетаДлительнойОперации);
Иначе
ОткрытьОкноОжиданияРасчетаЦенВФоне("ИзменитьЦеныНаКлиентеЗавершениеОбщая")
КонецЕсли;
Иначе
РассчитатьЦеныНаСервере(ПараметрыРасчета);
ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНовыйВариантНаКлиентеЗавершение(Результат, ДополнительныеПараметры = Неопределено) Экспорт
Если Результат <> Неопределено Тогда
Если Результат.ВариантИзмененияЦены = 1 Тогда
ИзменитьЦеныНаПроцентНаКлиентеЗавершение(Результат, ДополнительныеПараметры);
ИначеЕсли Результат.ВариантИзмененияЦены = 2 ИЛИ Результат.ВариантИзмененияЦены = 3 Тогда
ИзменитьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры) ;
ИначеЕсли Результат.ВариантИзмененияЦены = 4 Тогда
ОкруглитьРучныеЦеныЗавершение(Результат, ДополнительныеПараметры);
ИначеЕсли Результат.ВариантИзмененияЦены = 5 Тогда
РассчитатьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ИзменитьЦеныНаСервереВФоне(Знач ПараметрыРасчета)
СтруктураФормы = ИнициализироватьСтруктуруФормы();
ПараметрыФормирования = Новый Структура;
ПараметрыФормирования.Вставить("СтруктураФормы" , СтруктураФормы);
ПараметрыФормирования.Вставить("ПараметрыРасчета" , ПараметрыРасчета);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(ПараметрыФормирования);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ПрайсЛист.ИзменитьЦеныНаСервере",
ПараметрыЗадания,
ПараметрыВыполнения);
КонецФункции
&НаСервере
Функция ЗаполнитьЦеныИзДокументовНаСервереВФоне(Знач ПараметрыРасчета)
СтруктураФормы = ИнициализироватьСтруктуруФормы();
СтруктураФормы.Вставить("ТаблицаНастройкиКомпоновкиДанных" , ПолучитьИзВременногоХранилища(АдресХранилищаНастройкиКомпоновкиДанных));
ПараметрыФормирования = Новый Структура;
ПараметрыФормирования.Вставить("СтруктураФормы" , СтруктураФормы);
ПараметрыФормирования.Вставить("ПараметрыРасчета" , ПараметрыРасчета);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(ПараметрыФормирования);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ПрайсЛист.ЗаполнитьЦеныИзДокументов",
ПараметрыЗадания,
ПараметрыВыполнения);
КонецФункции
&НаСервере
Функция РассчитатьЦеныНаСервереВФоне(Знач ПараметрыРасчета, Знач ПреобразоватьСКДДляВидовЦен = Ложь)
СтруктураФормы = ИнициализироватьСтруктуруФормы();
СтруктураФормы.Вставить("ТаблицаНастройкиКомпоновкиДанных" , ПолучитьИзВременногоХранилища(АдресХранилищаНастройкиКомпоновкиДанных));
Если ПреобразоватьСКДДляВидовЦен Тогда
СтруктураФормы.ВыбранныеЦены.Колонки.Добавить("СхемаКомпоновкиДанных");
Для каждого СтрокаВидЦены Из СтруктураФормы.ВыбранныеЦены Цикл
Схема = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СтрокаВидЦены.АдресСхемыКомпоновкиДанных));
СтрокаВидЦены.СхемаКомпоновкиДанных = Схема.Получить();
КонецЦикла;
КонецЕсли;
ПараметрыФормирования = Новый Структура;
ПараметрыФормирования.Вставить("СтруктураФормы" , СтруктураФормы);
ПараметрыФормирования.Вставить("ПараметрыРасчета" , ПараметрыРасчета);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(ПараметрыФормирования);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ПрайсЛист.РассчитатьЦеныНаСервере",
ПараметрыЗадания,
ПараметрыВыполнения);
КонецФункции
&НаСервере
Функция ИзменитьЦеныНаПроцентНаСервереВФоне(Знач ПараметрыРасчета)
СтруктураФормы = ИнициализироватьСтруктуруФормы();
ПараметрыФормирования = Новый Структура;
ПараметрыФормирования.Вставить("СтруктураФормы" , СтруктураФормы);
ПараметрыФормирования.Вставить("ПараметрыРасчета" , ПараметрыРасчета);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(ПараметрыФормирования);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ПрайсЛист.ИзменитьЦеныНаПроцентНаСервере",
ПараметрыЗадания,
ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Функция ЗапуститьАсинхронно(Знач ПараметрыРасчета)
Возврат НЕ (ПараметрыРасчета.ТолькоВыделенныеСтроки ИЛИ (ДеревоЦен.ПолучитьЭлементы().Количество() < 30));
КонецФункции
&НаКлиенте
Процедура ЗагрузитьДействующиеЦены(Команда)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен", Истина);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
Если ПараметрыОткрытия.РучныеВидыЦен.Количество() = 0 Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru='Не выбраны виды цен, назначаемые вручную.'"));
Возврат;
КонецЕсли;
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораПараметровРасчета",
ПараметрыОткрытия,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ЗагрузитьДействующиеЦеныЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДействующиеЦеныЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
Если ЗапуститьАсинхронно(ПараметрыРасчета) Тогда
РезультатРасчетаДлительнойОперации = РассчитатьЦеныНаСервереВФоне(ПараметрыРасчета);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИзменитьЦеныНаКлиентеЗавершениеОбщая(РезультатРасчетаДлительнойОперации);
иначе
ОткрытьОкноОжиданияРасчетаЦенВФоне("ИзменитьЦеныНаКлиентеЗавершениеОбщая")
КонецЕсли;
Иначе
РассчитатьЦеныНаСервере(ПараметрыРасчета);
ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзДокументов(Команда)
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораДокументов",
,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ЗагрузитьИзДокументовЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзДокументовЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Или Результат.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
МассивВидовЦен = Новый Массив();
Для Каждого ВидЦены Из ВыбранныеЦены Цикл
Если ВидЦены.Выбрана Тогда
МассивВидовЦен.Добавить(ВидЦены.Ссылка);
КонецЕсли;
КонецЦикла;
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
ПараметрыРасчета = Новый Структура();
ПараметрыРасчета.Вставить("Документы", Результат);
ПараметрыРасчета.Вставить("ВидыЦен", МассивВидовЦен);
РезультатРасчетаДлительнойОперации = ЗаполнитьЦеныИзДокументовНаСервереВФоне(ПараметрыРасчета);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИзменитьЦеныНаКлиентеЗавершениеОбщая(РезультатРасчетаДлительнойОперации);
иначе
ОткрытьОкноОжиданияРасчетаЦенВФоне("ИзменитьЦеныНаКлиентеЗавершениеОбщая")
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОкруглитьРучныеЦены(Команда)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Истина);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
Если ПараметрыОткрытия.РучныеВидыЦен.Количество() = 0 Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru='Не выбраны виды цен, назначаемые вручную.'"));
Возврат;
КонецЕсли;
ПараметрыРасчета = Неопределено;
ОткрытьФорму("Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораПараметровРасчета", ПараметрыОткрытия, ЭтотОбъект,,,, Новый ОписаниеОповещения("ОкруглитьРучныеЦеныЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ОкруглитьРучныеЦеныЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
Если ЗапуститьАсинхронно(ПараметрыРасчета) Тогда
РезультатРасчетаДлительнойОперации = РассчитатьЦеныНаСервереВФоне(ПараметрыРасчета);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИзменитьЦеныНаКлиентеЗавершениеОбщая(РезультатРасчетаДлительнойОперации);
Иначе
ОткрытьОкноОжиданияРасчетаЦенВФоне("ИзменитьЦеныНаКлиентеЗавершениеОбщая")
КонецЕсли;
Иначе
РассчитатьЦеныНаСервере(ПараметрыРасчета);
ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Рассчитать(Команда)
Если Не УстановкаЦенКлиент.ЗаполненыОбязательныеПараметрыСхемКомпоновкиДанных(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Истина);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Истина);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораПараметровРасчета",
ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения),
ЭтотОбъект,,,, Новый ОписаниеОповещения("РассчитатьЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Истина);
Если ЗапуститьАсинхронно(ПараметрыРасчета) Тогда
РезультатРасчетаДлительнойОперации = РассчитатьЦеныНаСервереВФоне(ПараметрыРасчета, Истина);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИзменитьЦеныНаКлиентеЗавершениеОбщая(РезультатРасчетаДлительнойОперации);
Иначе
ОткрытьОкноОжиданияРасчетаЦенВФоне("ИзменитьЦеныНаКлиентеЗавершениеОбщая")
КонецЕсли;
Иначе
РассчитатьЦеныНаСервере(ПараметрыРасчета);
ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьОтчетПоДинамикеЦен()
Если ИспользуетсяЦенообразование25 Тогда
СпискиДляОтбора = Новый Структура();
СпискиДляОтбора.Вставить("СписокНоменклатуры", Новый СписокЗначений);
СпискиДляОтбора.Вставить("СписокХарактеристикЦО", Новый СписокЗначений);
СпискиДляОтбора.Вставить("СписокСерийЦО", Новый СписокЗначений);
СпискиДляОтбора.Вставить("СписокУпаковокЦО", Новый СписокЗначений);
Для Каждого ИдентификаторСтрокиДереваЦен Из Элементы.ДеревоЦен.ВыделенныеСтроки Цикл
СтрокаТЧ = ДеревоЦен.НайтиПоИдентификатору(ИдентификаторСтрокиДереваЦен);
СтрокаЭтоИерархия = Ложь;
Если СтрокаТЧ.Свойство("ЭтоИерархия", СтрокаЭтоИерархия) И СтрокаЭтоИерархия Тогда
ПройтиПоИерархии(СпискиДляОтбора, СтрокаТЧ.ПолучитьЭлементы());
Иначе
УстановитьСпискиДляОтбора(СпискиДляОтбора, СтрокаТЧ);
КонецЕсли;
КонецЦикла;
СписокВидовЦен = Новый СписокЗначений;
Для Каждого СтрокаВидЦены Из УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ЭтотОбъект) Цикл
СписокВидовЦен.Добавить(СтрокаВидЦены.Ссылка, СтрокаВидЦены.Наименование);
КонецЦикла;
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", СпискиДляОтбора.СписокНоменклатуры);
Если СпискиДляОтбора.СписокХарактеристикЦО.Количество() Тогда
Отбор.Вставить("ХарактеристикаЦО", СпискиДляОтбора.СписокХарактеристикЦО);
КонецЕсли;
Если СпискиДляОтбора.СписокСерийЦО.Количество() Тогда
Отбор.Вставить("СерияЦО", СпискиДляОтбора.СписокСерийЦО);
КонецЕсли;
Если СпискиДляОтбора.СписокУпаковокЦО.Количество() Тогда
Отбор.Вставить("УпаковкаЦО", СпискиДляОтбора.СписокУпаковокЦО);
КонецЕсли;
Отбор.Вставить("ВидЦены", СписокВидовЦен);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("КлючВарианта", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ДинамикаИзмененияЦенНоменклатуры2_5.Форма",
ПараметрыФормы,
ЭтотОбъект,
Новый УникальныйИдентификатор);
Иначе
СписокНоменклатуры = Новый СписокЗначений;
СписокХарактеристик = Новый СписокЗначений;
Для Каждого ИдентификаторСтрокиДереваЦен Из Элементы.ДеревоЦен.ВыделенныеСтроки Цикл
СтрокаТЧ = ДеревоЦен.НайтиПоИдентификатору(ИдентификаторСтрокиДереваЦен);
СписокНоменклатуры.Добавить(СтрокаТЧ.Номенклатура);
Если СтрокаТЧ.ХарактеристикиИспользуются Тогда
Если СтрокаТЧ.ПолучитьРодителя() = Неопределено Тогда
Для Каждого СтрокаХарактеристика Из СтрокаТЧ.ПолучитьЭлементы() Цикл
Если СписокХарактеристик.НайтиПоЗначению(СтрокаХарактеристика.Характеристика) = Неопределено Тогда
СписокХарактеристик.Добавить(СтрокаХарактеристика.Характеристика);
КонецЕсли;
КонецЦикла;
Иначе
Если СписокХарактеристик.НайтиПоЗначению(СтрокаТЧ.Характеристика) = Неопределено Тогда
СписокХарактеристик.Добавить(СтрокаТЧ.Характеристика);
КонецЕсли;
КонецЕсли;
Иначе
Если СписокХарактеристик.НайтиПоЗначению(
ПредопределенноеЗначение("Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка")) = Неопределено Тогда
СписокХарактеристик.Добавить(ПредопределенноеЗначение("Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка"));
КонецЕсли;
КонецЕсли;
КонецЦикла;
СписокВидовЦен = Новый СписокЗначений;
Для Каждого СтрокаВидЦены Из УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ЭтотОбъект) Цикл
СписокВидовЦен.Добавить(СтрокаВидЦены.Ссылка, СтрокаВидЦены.Наименование);
КонецЦикла;
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", СписокНоменклатуры);
Отбор.Вставить("Характеристика", СписокХарактеристик);
Отбор.Вставить("ВидЦены", СписокВидовЦен);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("КлючВарианта", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ДинамикаИзмененияЦенНоменклатуры.Форма",
ПараметрыФормы,
ЭтотОбъект,
Новый УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтчетПоДинамикеЦен(Команда)
СформироватьОтчетПоДинамикеЦен();
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)
ОчиститьСообщения();
Если ДеревоЦен.ПолучитьЭлементы().Количество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'В прайс-листе отсутствуют позиции номенклатуры'"),,"ДеревоЦен");
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ВыгрузитьВExcelЗавершениеПодключенияРасширения", ЭтотОбъект);
ТекстСообщения = НСтр("ru = 'Для выгрузки в Excel необходимо установить расширение работы с файлами.'");
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения);
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcelЗавершениеПодключенияРасширения(Результат, ДополнительныеПараметры) Экспорт
Если ПодключитьРасширениеРаботыСФайлами()Тогда
АдресДанныеДляПечатиВоВременномХранилище = АдресВоВременномХранилищеДанныхДляПечати();
ПараметрыФормыНастройки = Новый Структура(
"МассивДокументов, УникальныйИдентификатор, АдресДанныеДляПечатиВоВременномХранилище",
Неопределено,
УникальныйИдентификатор,
АдресДанныеДляПечатиВоВременномХранилище);
ПараметрыПечати = Неопределено;
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаНастройкиПечатнойФормыУстановкиЦенНоменклатуры",
ПараметрыФормыНастройки,,,,, Новый ОписаниеОповещения("ВыгрузитьВExcelЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Расширение работы с файлами не подключено.'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcelЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыПечати = Результат;
Если ПараметрыПечати <> Неопределено Тогда
Если ПараметрыПечати.КоличествоВыбраныхВидовЦен = 0 Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Не выбраны виды цен для выгрузки в Excel.'"));
Возврат;
КонецЕсли;
ПараметрыПечати.ВыводитьШапку = Ложь;
#Если ВебКлиент Тогда
УстановкаЦенКлиент.ВыгрузитьВExcelБезСсылкиВЕБ(ЭтотОбъект, ПараметрыПечати);
#Иначе
УстановкаЦенКлиент.ВыгрузитьВExcelБезСсылки(ЭтотОбъект, ПараметрыПечати);
#КонецЕсли
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзExcel(Команда)
Оповещение = Новый ОписаниеОповещения("ЗагрузитьИзExcelЗавершениеПодключенияРасширения", ЭтотОбъект);
ТекстСообщения = НСтр("ru = 'Для загрузки из Excel необходимо установить расширение работы с файлами.'");
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзExcelЗавершениеПодключенияРасширения(Результат, ДополнительныеПараметры) Экспорт
Если ПодключитьРасширениеРаботыСФайлами()Тогда
#Если ВебКлиент Тогда
УстановкаЦенКлиент.ЗагрузитьИзExcelБезСсылкиВЕБ(ЭтотОбъект);
#Иначе
УстановкаЦенКлиент.ЗагрузитьИзExcelБезСсылки(ЭтотОбъект);
#КонецЕсли
Иначе
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Расширение работы с файлами не подключено.'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПечатьПрайсЛиста(Команда)
ПараметрыОткрытия = Новый Структура;
НовыеНастройки = Неопределено;
ПолучитьНастройки(НовыеНастройки);
СписокВидыЦен = Новый СписокЗначений;
СписокВидыЦен.ЗагрузитьЗначения(УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект));
Отбор = Новый Структура;
Отбор.Вставить("ВидыЦен", УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект));
Отбор.Вставить("ДатаОтчета", Дата);
ПараметрыОткрытия.Вставить("ФиксированныеНастройки", НовыеНастройки);
ПараметрыОткрытия.Вставить("КлючВарианта", "ПрайсЛистКонтекст");
ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Отбор", Отбор);
ПараметрыОткрытия.Вставить("ВидимостьКомандВариантовОтчетов", Ложь);
Если (ИспользуетсяЦенообразование25) Тогда
ОткрытьФорму(
"Отчет.ПрайсЛист2_5.ФормаОбъекта",
ПараметрыОткрытия,
ЭтотОбъект,
Истина);
Иначе
ОткрытьФорму(
"Отчет.ПрайсЛист.ФормаОбъекта",
ПараметрыОткрытия,
ЭтотОбъект,
Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсторияИзмененияЦенКонтекст(Команда)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Ключ", ТекущиеДанные.Номенклатура);
ПараметрыОткрытияФормы.Вставить("Характеристика", ТекущиеДанные.Характеристика);
ОткрытьФорму("Справочник.Номенклатура.Форма.ИсторияЦенНоменклатуры", ПараметрыОткрытияФормы);
КонецПроцедуры
&НаКлиенте
Процедура ЗакончитьИзменениеЦен(Команда)
ОчиститьСообщения();
Если ПроверитьЗаполнение() Тогда
ЗаписатьИзмененияЦен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Сформировать(Команда)
ОчиститьСообщения();
Если ПроверитьЗаполнение() Тогда
ОткрытьФормуНастройкиПрайсЛиста(Не ИспользоватьНесколькоВидовЦен);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСоСхожимиСвойствами(Команда)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ТоварыСоСхожимиСвойствами = Новый Структура;
ТоварыСоСхожимиСвойствами.Вставить("Номенклатура", ТекущиеДанные.Номенклатура);
ТоварыСоСхожимиСвойствами.Вставить("Характеристика", ТекущиеДанные.Характеристика);
ОткрытьФормуНастройкиПрайсЛиста(Не ИспользоватьНесколькоВидовЦен, ТоварыСоСхожимиСвойствами);
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьИзменениеЦен(Команда)
ПозицияПодстроки = СтрНайти(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяТекущейКолонки = Прав(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, СтрДлина(Элементы.ДеревоЦен.ТекущийЭлемент.Имя) - ПозицияПодстроки + 1);
КонецЕсли;
ОтменитьИзменениеЦенНаСервере();
ОткрытьОкноОжиданияПрименитьНастройкиВФоне();
КонецПроцедуры
&НаКлиенте
Процедура ПечатьПереоценкаВРознице(Команда)
ДействуетСессияИзмененияЦен = Ложь;
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Дата", Дата);
ОткрытьФорму(
"Обработка.ПрайсЛист.Форма.ФормаПримененияЦен",
ПараметрыФормы,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ПечатьПереоценкаВРозницеЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПечатьПереоценкаВРозницеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Новый Массив;
Если Модифицированность Тогда
МассивДокументов = ЗаписатьИзмененияЦенНаСервере(Результат.Комментарий, Результат.ВариантПримененияЦен);
Иначе
Для Каждого СтрокаТЧ Из СохраненныеДокументы Цикл
СтруктураДокументов = Новый Структура;
СтруктураДокументов.Вставить("УстановкаЦенНоменклатуры", СтрокаТЧ.Ссылка);
СтруктураДокументов.Вставить("СогласованиеЦенНоменклатуры", Неопределено);
МассивДокументов.Добавить(СтруктураДокументов);
КонецЦикла;
КонецЕсли;
Если МассивДокументов = Неопределено
ИЛИ МассивДокументов.Количество() = 0 Тогда
ОбъектыПечати = Новый Массив;
ОбъектыПечати.Добавить(ПредопределенноеЗначение("Документ.УстановкаЦенНоменклатуры.ПустаяСсылка"));
ОписаниеКоманды = Новый Структура;
ОписаниеКоманды.Вставить("ОбъектыПечати", ОбъектыПечати);
ОписаниеКоманды.Вставить("Форма", ЭтотОбъект);
УправлениеПечатьюУТКлиент.ПечатьПереоценкаВРознице(ОписаниеКоманды, АдресВоВременномХранилищеДанныхДляПечати());
Иначе
ДокументыУстановкиЦенНоменклатуры = Новый Массив;
Для Каждого СтрокаТЧ Из МассивДокументов Цикл
ДокументыУстановкиЦенНоменклатуры.Добавить(СтрокаТЧ.УстановкаЦенНоменклатуры);
КонецЦикла;
ОписаниеКоманды = Новый Структура;
ОписаниеКоманды.Вставить("ОбъектыПечати", ДокументыУстановкиЦенНоменклатуры);
ОписаниеКоманды.Вставить("Форма", ЭтотОбъект);
УправлениеПечатьюУТКлиент.ПечатьПереоценкаВРознице(ОписаниеКоманды);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПечатьУстановкаЦенНоменклатуры(Команда)
ДействуетСессияИзмененияЦен = Ложь;
Если Модифицированность Тогда
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Дата", Дата);
ОткрытьФорму(
"Обработка.ПрайсЛист.Форма.ФормаПримененияЦен",
ПараметрыФормы,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ПечатьУстановкаЦенНоменклатурыЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
Результат = Новый Структура;
ПечатьУстановкаЦенНоменклатурыЗавершение(Результат, Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПечатьУстановкаЦенНоменклатурыЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Новый Массив;
Если Модифицированность Тогда
МассивДокументов = ЗаписатьИзмененияЦенНаСервере(Результат.Комментарий, Результат.ВариантПримененияЦен);
Иначе
Для Каждого СтрокаТЧ Из СохраненныеДокументы Цикл
СтруктураДокументов = Новый Структура;
СтруктураДокументов.Вставить("УстановкаЦенНоменклатуры", СтрокаТЧ.Ссылка);
СтруктураДокументов.Вставить("СогласованиеЦенНоменклатуры", Неопределено);
МассивДокументов.Добавить(СтруктураДокументов);
КонецЦикла;
КонецЕсли;
Если МассивДокументов = Неопределено
ИЛИ МассивДокументов.Количество() = 0 Тогда
ОбъектыПечати = Новый Массив;
ОбъектыПечати.Добавить(ПредопределенноеЗначение("Документ.УстановкаЦенНоменклатуры.ПустаяСсылка"));
ОписаниеКоманды = Новый Структура;
ОписаниеКоманды.Вставить("ОбъектыПечати", ОбъектыПечати);
ОписаниеКоманды.Вставить("Форма", ЭтотОбъект);
УправлениеПечатьюУТКлиент.ПечатьУстановкаЦенНоменклатуры(ОписаниеКоманды, АдресВоВременномХранилищеДанныхДляПечати());
Иначе
ДокументыУстановкиЦенНоменклатуры = Новый Массив;
Для Каждого СтрокаТЧ Из МассивДокументов Цикл
ДокументыУстановкиЦенНоменклатуры.Добавить(СтрокаТЧ.УстановкаЦенНоменклатуры);
КонецЦикла;
ОписаниеКоманды = Новый Структура;
ОписаниеКоманды.Вставить("ОбъектыПечати", ДокументыУстановкиЦенНоменклатуры);
ОписаниеКоманды.Вставить("Форма", ЭтотОбъект);
УправлениеПечатьюУТКлиент.ПечатьУстановкаЦенНоменклатуры(ОписаниеКоманды);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПечатьЦенники(Команда)
АдресВХранилище = ДанныеДляПечатиЦенников();
ОткрытьФорму(
"Обработка.ПечатьЭтикетокИЦенников.Форма.ФормаТовары",
Новый Структура("АдресВХранилище, НазначениеШаблона", АдресВХранилище, Неопределено),
ЭтотОбъект,
Новый УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПечатьЭтикетки(Команда)
АдресВХранилище = ДанныеДляПечатиЭтикеток();
ОткрытьФорму(
"Обработка.ПечатьЭтикетокИЦенников.Форма.ФормаТовары",
Новый Структура("АдресВХранилище, НазначениеШаблона", АдресВХранилище, Неопределено),
ЭтотОбъект,
Новый УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ИсторияИзмененияЦен(Команда)
ОткрытьФорму("Документ.УстановкаЦенНоменклатуры.ФормаСписка");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура НастроитьВыводимуюИнформацию(Команда)
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ПоказыватьИзменениеЦены", ПоказыватьИзменениеЦены);
ПараметрыФормы.Вставить("ПоказыватьПроцентНаценки", ПоказыватьПроцентНаценки);
ПараметрыФормы.Вставить("ПоказыватьДействующиеЦены", ПоказыватьДействующиеЦены);
ПараметрыФормы.Вставить("ДатаДействующихЦен", ДатаДействующихЦен);
ПараметрыФормы.Вставить("ПоказыватьПанельБыстрогоРедактирования", ПоказыватьПанельБыстрогоРедактирования);
ПараметрыФормы.Вставить("ПоказыватьФормулы", ПоказыватьФормулы);
ПараметрыФормы.Вставить("ПоказыватьВалюту", ПоказыватьВалюту);
ПараметрыФормы.Вставить("ПоказыватьЕдиницыИзмерения", ПоказыватьЕдиницыИзмерения);
ПараметрыФормы.Вставить("РассчитыватьАвтоматически", РассчитыватьАвтоматически);
ПараметрыФормы.Вставить("ОтображатьВлияющиеЦены", ОтображатьВлияющиеЦены);
ПараметрыФормы.Вставить("ИспользоватьОднуКолонкуДляКлючаЦен", ИспользоватьОднуКолонкуДляКлючаЦен);
ПараметрыФормы.Вставить("ЗафиксироватьКолонкуНоменклатуры", ЗафиксироватьКолонкуНоменклатуры);
ПараметрыФормы.Вставить("ПоказыватьДату", Истина);
ОткрытьФорму(
"Обработка.ПрайсЛист.Форма.ФормаНастройкиВыводимойИнформации",
ПараметрыФормы,
ЭтотОбъект,,,, Новый ОписаниеОповещения("НастроитьВыводимуюИнформациюЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НастроитьВыводимуюИнформациюЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ПоказыватьИзменениеЦены = Результат.ПоказыватьИзменениеЦены;
ПоказыватьПроцентНаценки = Результат.ПоказыватьПроцентНаценки;
ПоказыватьДействующиеЦены = Результат.ПоказыватьДействующиеЦены;
ДатаДействующихЦен = Результат.ДатаДействующихЦен;
ПоказыватьПанельБыстрогоРедактирования = Результат.ПоказыватьПанельБыстрогоРедактирования;
ПоказыватьФормулы = Результат.ПоказыватьФормулы;
ПоказыватьВалюту = Результат.ПоказыватьВалюту;
ПоказыватьЕдиницыИзмерения = Результат.ПоказыватьЕдиницыИзмерения;
РассчитыватьАвтоматически = Результат.РассчитыватьАвтоматически;
ЗафиксироватьКолонкуНоменклатуры = Результат.ЗафиксироватьКолонкуНоменклатуры;
УстановитьРассчитыватьАвтоматическиНаКлиенте(РассчитыватьАвтоматически);
ЗафиксироватьКолонкуНоменклатуры(ЗафиксироватьКолонкуНоменклатуры);
Если ОтображатьВлияющиеЦены <> Результат.ОтображатьВлияющиеЦены Тогда
ОтображатьВлияющиеЦены = Результат.ОтображатьВлияющиеЦены;
ОтображатьВлияющиеЦеныНаКлиенте(ОтображатьВлияющиеЦены);
КонецЕсли;
УстановитьВидимостьБыстрогоРедактирования(ЭтотОбъект);
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, ИспользоватьРежимРедактирования);
Если ИспользоватьОднуКолонкуДляКлючаЦен <> Результат.ИспользоватьОднуКолонкуДляКлючаЦен Тогда
ИспользоватьОднуКолонкуДляКлючаЦен = Результат.ИспользоватьОднуКолонкуДляКлючаЦен;
НастроитьКолонкиКлючаЦен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьНастройкиВидовЦен(Команда = Неопределено)
Если Элементы.ДеревоЦен.ТекущиеДанные <> Неопределено Тогда
ТекущаяНоменклатура = Элементы.ДеревоЦен.ТекущиеДанные.Номенклатура;
Иначе
ТекущаяНоменклатура = Неопределено;
КонецЕсли;
ОбновитьНастройкиВидовЦенНаСервере();
ВыбранныеЦеныИзменены = (ДеревоЦен.ПолучитьЭлементы().Количество() > 0);
Если ТекущаяНоменклатура <> Неопределено Тогда
Для Каждого СтрокаДерева Из ДеревоЦен.ПолучитьЭлементы() Цикл
Если СтрокаДерева.Номенклатура = ТекущаяНоменклатура Тогда
Элементы.ДеревоЦен.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзЯндексМаркет(Команда)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет",Истина);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Ложь);
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
Если ПараметрыОткрытия.РучныеВидыЦен.Количество() = 0 Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru='Не выбраны загружаемые виды цен'"));
Возврат;
КонецЕсли;
ПараметрыОткрытия.Вставить("СпособЗаданияЦены", ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяИзЯндексМаркет"));
ИмяФормыВыбора = ИмяФормыВыбора();
Если ИмяФормыВыбора<>"" Тогда
ОткрытьФорму(ИмяФормыВыбора, ПараметрыОткрытия, ЭтотОбъект,,,, Новый ОписаниеОповещения("ВыборЗагружаемыхВидовЦенЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзOzon(Команда)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам", Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзЯндексМаркет", Ложь);
ПараметрыЗаполнения.Вставить("ЗагрузкаИзOzon", Истина);
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
Если ПараметрыОткрытия.РучныеВидыЦен.Количество() = 0 Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Не выбраны загружаемые виды цен'"));
Возврат;
КонецЕсли;
ПараметрыОткрытия.Вставить("СпособЗаданияЦены", ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяСOzon"));
ИмяФормыВыбора = ИмяФормыВыбора();
Если ИмяФормыВыбора <> "" Тогда
ОткрытьФорму(ИмяФормыВыбора, ПараметрыОткрытия, ЭтотОбъект,,,, Новый ОписаниеОповещения("ВыборЗагружаемыхВидовЦенOzonЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
Возврат;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьНастройкиОтображения(СохраненныеНастройки)
ВидНастройки = СохраненныеНастройки.ВидНастройки;
ВариантНавигации = СохраненныеНастройки.ВариантНавигации;
ВидНоменклатуры = СохраненныеНастройки.ВидНоменклатуры;
СохраненныеНастройки.Свойство("ВариантНеобходимостиУстановкиЦены", ВариантНеобходимостиУстановкиЦены);
СохраненныеНастройки.Свойство("ВариантГруппировки", ВариантГруппировки);
СохраненныеНастройки.Свойство("ПоказыватьПроцентНаценки", ПоказыватьПроцентНаценки);
СохраненныеНастройки.Свойство("ПоказыватьИзменениеЦены", ПоказыватьИзменениеЦены);
СохраненныеНастройки.Свойство("ПоказыватьДействующиеЦены", ПоказыватьДействующиеЦены);
СохраненныеНастройки.Свойство("ДатаДействующихЦен", ДатаДействующихЦен);
СохраненныеНастройки.Свойство("ПоказыватьФормулы", ПоказыватьФормулы);
СохраненныеНастройки.Свойство("ПоказыватьПанельБыстрогоРедактирования", ПоказыватьПанельБыстрогоРедактирования);
СохраненныеНастройки.Свойство("ПоказыватьВалюту", ПоказыватьВалюту);
Если СохраненныеНастройки.Свойство("ПоказыватьВалюту") Тогда
ПоказыватьВалюту = СохраненныеНастройки.ПоказыватьВалюту И ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВалют");
Иначе
ПоказыватьВалюту = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВалют");
КонецЕсли;
СохраненныеНастройки.Свойство("ПоказыватьЕдиницыИзмерения", ПоказыватьЕдиницыИзмерения);
СохраненныеНастройки.Свойство("РассчитыватьАвтоматически", РассчитыватьАвтоматически);
СохраненныеНастройки.Свойство("ОтображатьВлияющиеЦены", ОтображатьВлияющиеЦены);
СохраненныеНастройки.Свойство("ИспользоватьОднуКолонкуДляКлючаЦен", ИспользоватьОднуКолонкуДляКлючаЦен);
СохраненныеНастройки.Свойство("ЗафиксироватьКолонкуНоменклатуры", ЗафиксироватьКолонкуНоменклатуры);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенХарактеристика.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ИндексКартинки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 2;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.Характеристика");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦен.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ИндексКартинки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 2;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Gray);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенВидНоменклатуры.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.Номенклатура");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьОднуКолонкуДляКлючаЦен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенНоменклатура.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьОднуКолонкуДляКлючаЦен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ХарактеристикаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.Характеристика");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.СерияЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.УпаковкаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенХарактеристикаЦО.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьОднуКолонкуДляКлючаЦен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.СерияЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.УпаковкаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенСерияЦО.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьОднуКолонкуДляКлючаЦен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.УпаковкаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
КонецПроцедуры
&НаСервере
Процедура ПолучитьНастройки(НовыеНастройки)
НовыеНастройки = КомпоновщикНастроекОтбор.ПолучитьНастройки();
СписокВидовЦен = Новый СписокЗначений;
СписокВидовЦен.ЗагрузитьЗначения(УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект));
ЭлементОтбора = НовыеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидЦены");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = СписокВидовЦен;
ЭлементОтбора.Использование = Истина;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройкиФормыНаСервере()
СтруктураДанных = УстановкаЦенКлиентСервер.НоваяСтруктураНастроекФормы();
Если СохранятьВсеНастройки Тогда
НастройкиКомпоновщика = КомпоновщикНастроекОтбор.ПолучитьНастройки();
НастройкиКомпоновщикаКолонок = КомпоновщикНастроекОтборКолонок.ПолучитьНастройки();
ВыбранныеЦеныТаблица = УстановкаЦенСервер.ВыбранныеВидыЦенВТаблицу(ЭтотОбъект);
МассивВыбранныеЦены = УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект);
СтруктураДанных.НастройкиКомпоновщика = НастройкиКомпоновщика;
СтруктураДанных.НастройкиКомпоновщикаКолонок = НастройкиКомпоновщикаКолонок;
СтруктураДанных.ВыбранныеЦены = МассивВыбранныеЦены;
СтруктураДанных.ВыбранныеЦеныТаблица = ВыбранныеЦеныТаблица;
СтруктураДанных.ТаблицаПараметровОтбора = ТаблицаПараметровОтбора.Выгрузить();
СтруктураДанных.УстановленыНастройкиОтбора = УстановленыНастройкиОтбора;
СтруктураДанных.ДатаДействующихЦен = ДатаДействующихЦен;
Иначе
СохраненныеНастройкиИзХранилища = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ПрайсЛист", "Обработка.ПрайсЛист");
Если СохраненныеНастройкиИзХранилища <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(СтруктураДанных, СохраненныеНастройкиИзХранилища);
КонецЕсли;
КонецЕсли;
СтруктураДанных.ВидНастройки = ВидНастройки;
СтруктураДанных.ВариантНавигации = ВариантНавигации;
СтруктураДанных.ВариантГруппировки = ВариантГруппировки;
СтруктураДанных.ВидНоменклатуры = ВидНоменклатуры;
СтруктураДанных.ПоказыватьДействующиеЦены = ПоказыватьДействующиеЦены;
СтруктураДанных.ПоказыватьИзменениеЦены = ПоказыватьИзменениеЦены;
СтруктураДанных.ПоказыватьПроцентНаценки = ПоказыватьПроцентНаценки;
СтруктураДанных.ПоказыватьФормулы = ПоказыватьФормулы;
СтруктураДанных.ПоказыватьВалюту = ПоказыватьВалюту;
СтруктураДанных.ПоказыватьЕдиницыИзмерения = ПоказыватьЕдиницыИзмерения;
СтруктураДанных.РассчитыватьАвтоматически = РассчитыватьАвтоматически;
СтруктураДанных.ОтображатьВлияющиеЦены = ОтображатьВлияющиеЦены;
СтруктураДанных.ИспользоватьОднуКолонкуДляКлючаЦен = ИспользоватьОднуКолонкуДляКлючаЦен;
СтруктураДанных.ВариантНеобходимостиУстановкиЦены = ВариантНеобходимостиУстановкиЦены;
СтруктураДанных.ЗафиксироватьКолонкуНоменклатуры = ЗафиксироватьКолонкуНоменклатуры;
СтруктураДанных.ПоказыватьПанельБыстрогоРедактирования = ПоказыватьПанельБыстрогоРедактирования;
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ПрайсЛист", "Обработка.ПрайсЛист", СтруктураДанных);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьПредупреждениеПоВидуЦен(ВидЦены)
ОчиститьСообщения();
Если ВидЦены = Неопределено Тогда
ИнформационнаяСтрока = "";
СтрокаПредупреждения = Нстр(" ru = 'Для применения опций панели быстрого редактирования необходимо выбрать вид цен выделением ячейки в колонке вида редактируемых цен.'");
Иначе
СтрокаПредупреждения = Нстр(" ru = 'Выбранный вид цен не редактируется.'");
КонецЕсли;
ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаПредупреждения);
КонецПроцедуры
&НаСервереБезКонтекста
Функция РазрешитьИзменятьФормулы(СпособЗаданияЦены)
Возврат Справочники.ВидыЦен.РазрешитьИзменятьФормулы(СпособЗаданияЦены);
КонецФункции
&НаКлиенте
Процедура Применить(Команда)
ПозицияПодстроки = СтрНайти(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяТекущейКолонки = Прав(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, СтрДлина(Элементы.ДеревоЦен.ТекущийЭлемент.Имя) - ПозицияПодстроки + 1);
КонецЕсли;
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяТекущейКолонки);
Если ВидЦены <> Неопределено И ВидЦены.Редактировать Тогда
Если ВариантИзмененияЦены = 1 Тогда
ИзменитьЦеныНаПроцентНаКлиентеПоТипуВызова(Истина, ВидЦены.Ссылка);
ИначеЕсли ВариантИзмененияЦены = 2 Тогда
ИзменитьЦеныНаНаКлиентеПоТипуВызова(Истина, ВидЦены.Ссылка);
ИначеЕсли ВариантИзмененияЦены = 3 Тогда
ИзменитьЦеныНаНаКлиентеПоТипуВызова(Истина, ВидЦены.Ссылка);
ИначеЕсли ВариантИзмененияЦены = 4 Тогда
Если РазрешитьИзменятьФормулы(ВидЦены.СпособЗаданияЦены) Тогда
РассчитатьЦеныПоФормулеНаНаКлиентеПоТипуВызова(Истина, ВидЦены.Ссылка);
УстановитьПометкуИзмененныхФормулСервер(ВидЦены.Ссылка);
Иначе
СообщениеПользователю = НСтр(" ru = 'Для видов цен со способом задания цены [%1] не предусмотрен расчет по формулам.
|Для расчета по формулам доступны виды цен со следующими спобами задания цены:'");
СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеПользователю, ВидЦены.СпособЗаданияЦены);
МассивДоступныхВидовЦен = новый Массив;
МассивДоступныхВидовЦен.Добавить(ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.РассчитыватьПоФормуламОтДругихВидовЦен"));
МассивДоступныхВидовЦен.Добавить(ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаДругойВидЦен"));
Для каждого Эл Из МассивДоступныхВидовЦен Цикл
СтрокаСпособаЗаданияЦены = НСтр(" ru = '
|[%1]'");
СтрокаСпособаЗаданияЦены = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСпособаЗаданияЦены, Эл);
СообщениеПользователю = СообщениеПользователю + СтрокаСпособаЗаданияЦены;
КонецЦикла;
ОчиститьСообщения();
ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеПользователю);
КонецЕсли;
КонецЕсли;
Иначе
ПоказатьПредупреждениеПоВидуЦен(ВидЦены);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗначениеИзмененияСтрокаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОткрытьФорму("ОбщаяФорма.КонструкторФормул",
ПолучитьПараметрыФормыРедактированияЦены_1(ЗначениеИзмененияСтрока),
Элементы.ЗначениеИзмененияСтрока,,,,
Новый ОписаниеОповещения("КонструкторФормулЗавершение_1", ЭтотОбъект),
РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры
&НаСервере
Процедура ОтменитьИзменениеЦенНаСервере(ВыполняетсяЗакрытиеФормы = Ложь)
УстановитьПривилегированныйРежим(Истина);
УстановкаЦенСервер.ОчиститьСохраненныеДокументы(СохраненныеДокументы, УникальныйИдентификатор, Истина);
Если Не ВыполняетсяЗакрытиеФормы Тогда
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Ложь);
ПрименитьНастройки();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьСтрокиИсключенийПоНоменклатуреИздереваЦен(Дерево, ОтборПоЗначениюЗапрета, МассивИменКолонок, УдалитьРодителя = Ложь)
Индекс = Дерево.Строки.Количество() - 1;
Пока Индекс >= 0 Цикл
Стр = Дерево.Строки.Получить(Индекс);
Если Стр.Строки.Количество() > 0 Тогда
УдалитьСтрокиИсключенийПоНоменклатуреИздереваЦен(Стр, ОтборПоЗначениюЗапрета, МассивИменКолонок, УдалитьРодителя);
Если УдалитьРодителя Тогда
Дерево.Строки.Удалить(Стр);
КонецЕсли;
Иначе
НайденоОтличноеЗначение = Ложь;
Для Каждого Колонка Из МассивИменКолонок Цикл
Если Стр[Колонка] <> ОтборПоЗначениюЗапрета Тогда
НайденоОтличноеЗначение = Истина;
Продолжить;
КонецЕсли
КонецЦикла;
Если НайденоОтличноеЗначение Тогда
Дерево.Строки.Удалить(Стр);
КонецЕсли;
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
УдалитьРодителя = (Дерево.Строки.Количество() = 0);
КонецПроцедуры
&НаСервере
Процедура ДобавитьОтборПоВариантуНеобходимостиУстановкиЦены(Дерево)
Если ВариантНеобходимостиУстановкиЦены = 1 Тогда
ОтборПоЗначениюЗапрета = Ложь;
ИначеЕсли ВариантНеобходимостиУстановкиЦены = 2 Тогда
ОтборПоЗначениюЗапрета = Истина;
КонецЕсли;
Если ОтборПоЗначениюЗапрета <> Неопределено Тогда
МассивИменКолонок = Новый Массив;
Для Каждого Колонка Из Дерево.Колонки Цикл
Если СтрНайти(Колонка.Имя,"ЗапретРедактирования")>0 Тогда
МассивИменКолонок.Добавить(Колонка.Имя);
КонецЕсли
КонецЦикла;
УдалитьСтрокиИсключенийПоНоменклатуреИздереваЦен(Дерево, ОтборПоЗначениюЗапрета, МассивИменКолонок);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрименитьНастройки(АдресВоВременномХранилище = Неопределено, ДанныеРедактированияПрайсЛиста = Неопределено)
АдресХранилищаКэшаДанных = "";
Если АдресВоВременномХранилище <> Неопределено Тогда
СтруктураДанных = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
КомпоновщикНастроекОтбор.ЗагрузитьНастройки(СтруктураДанных.НастройкиКомпоновщика);
УстановкаЦенСервер.НастроитьЗаголовокОтбора(ЭтотОбъект);
Если СтруктураДанных.Свойство("НастройкиКомпоновщикаКолонок") И ЗначениеЗаполнено(СтруктураДанных.НастройкиКомпоновщикаКолонок) Тогда
КомпоновщикНастроекОтборКолонок.ЗагрузитьНастройки(СтруктураДанных.НастройкиКомпоновщикаКолонок);
КонецЕсли;
Для Каждого СтрокаТЧ Из СтруктураДанных.ВыбранныеЦены Цикл
СтрокаДанныхФормы = УстановкаЦенКлиентСервер.НайтиСтрокуВидаЦен(ВыбранныеЦены, СтрокаТЧ[0]);
Если СтрокаДанныхФормы <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(СтрокаДанныхФормы, СтрокаТЧ,, "АдресСхемыКомпоновкиДанных, АдресНастроекСхемыКомпоновкиДанных, АдресНастроекСхемыКомпоновкиДанныхОтбораПоНоменклатуре");
КонецЕсли;
КонецЦикла;
ВыбранныеЦены.Сортировать("РеквизитДопУпорядочивания,Наименование");
СтруктураДанных.Свойство("ВариантГруппировки",ВариантГруппировки);
ВыбранныеЦены.Сортировать("РеквизитДопУпорядочивания");
Дата = СтруктураДанных.Дата;
ВидНастройки = СтруктураДанных.ВидНастройки;
ТаблицаПараметровОтбора.Загрузить(СтруктураДанных.ТаблицаПараметровОтбора);
ВариантНавигации = СтруктураДанных.ВариантНавигации;
ВидНоменклатуры = СтруктураДанных.ВидНоменклатуры;
ВариантНеобходимостиУстановкиЦены = СтруктураДанных.ВариантНеобходимостиУстановкиЦены;
УстановленыНастройкиОтбора = КомпоновщикНастроекОтбор.Настройки.Отбор.Элементы.Количество() > 0;
КонецЕсли;
Элементы.ДеревоЦенВидНоменклатуры.Видимость = Ложь;
ДобавляемыеКолонки = Новый Структура;
Если ВариантГруппировки = Перечисления.ВариантыНавигацииВФормахНоменклатуры.ПоИерархии Тогда
ДобавляемыеКолонки.Вставить("ИерархияЭтоГруппа",Новый ОписаниеТипов("Булево"));
ДобавляемыеКолонки.Вставить("ЭтоИерархия",Новый ОписаниеТипов("Булево"));
ИНачеЕсли ВариантГруппировки = Перечисления.ВариантыНавигацииВФормахНоменклатуры.ПоВидам Тогда
ДобавляемыеКолонки.Вставить("ИерархияЭтоГруппа",Новый ОписаниеТипов("Булево"));
ДобавляемыеКолонки.Вставить("ЭтоИерархия",Новый ОписаниеТипов("Булево"));
ДобавляемыеКолонки.Вставить("ВидНоменклатуры",Новый ОписаниеТипов("СправочникСсылка.ВидыНоменклатуры"));
Элементы.ДеревоЦенНоменклатура.АвтоОтметкаНезаполненного = Ложь;
Элементы.ДеревоЦенВидНоменклатуры.Видимость = Истина;
Иначе
Элементы.ДеревоЦенНоменклатура.АвтоОтметкаНезаполненного = Истина;
КонецЕсли;
РеквизитыДерева = ПолучитьРеквизиты("ДеревоЦен");
Если ДобавляемыеКолонки.Количество() Тогда
Для каждого РеквизитДерева Из РеквизитыДерева Цикл
Если ДобавляемыеКолонки.Свойство(РеквизитДерева.Имя) Тогда
ДобавляемыеКолонки.Удалить(РеквизитДерева.Имя);
КонецЕсли;
КонецЦикла;
Для каждого КолонкаДерева Из ДобавляемыеКолонки Цикл
Массив = Новый Массив;
Массив.Добавить(Новый РеквизитФормы(КолонкаДерева.Ключ,КолонкаДерева.Значение,"ДеревоЦен"));
ИзменитьРеквизиты(Массив);
КонецЦикла;
Конецесли;
Если ЗначениеЗаполнено(ДанныеРедактированияПрайсЛиста) Тогда
ТорговыеПредложенияВызовСервераУТ.НастройкиПрайсЛиста(ЭтотОбъект, ДанныеРедактированияПрайсЛиста)
КонецЕсли;
Объект.Товары.Очистить();
ВариантыРасчетаЦеныНабора = Новый Массив;
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка"));
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоДолям"));
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоЦенам"));
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("ОбязательныеПоля" , Новый Массив);
СтруктураНастроек.Вставить("ПараметрыДанных" , Новый Структура);
СтруктураНастроек.Вставить("КомпоновщикНастроек", Неопределено);
СтруктураНастроек.Вставить("ИмяМакетаСхемыКомпоновкиДанных" , Неопределено);
СтруктураНастроек.Вставить("ВестиУчетСертификатовНоменклатуры" , Ложь);
СтруктураНастроек.Вставить("ЦеныНаДату", КонецДня(Дата));
СтруктураНастроек.Вставить("ОтборПоВариантуРасчетаЦенНаборов", ВариантыРасчетаЦеныНабора);
ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
ИспользоватьСерииНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(Дата);
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура");
Если ИспользуетсяЦенообразование25 Тогда
Если ИспользоватьХарактеристикиНоменклатуры Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Характеристика");
СтруктураНастроек.ОбязательныеПоля.Добавить("ХарактеристикаЦО");
КонецЕсли;
Если ИспользоватьСерииНоменклатуры Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Серия");
СтруктураНастроек.ОбязательныеПоля.Добавить("СерияЦО");
КонецЕсли;
Если ИспользоватьУпаковкиНоменклатуры Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("УпаковкаЦО");
КонецЕсли;
Иначе
Если ИспользоватьХарактеристикиНоменклатуры Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Характеристика");
КонецЕсли;
КонецЕсли;
СтруктураНастроек.КомпоновщикНастроек = Новый Структура("Настройки" , КомпоновщикНастроекОтбор.Настройки);
Если ИспользуетсяЦенообразование25 Тогда
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "Макет2_5";
Иначе
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "Макет";
КонецЕсли;
ВыбранныеЦены.Сортировать("РеквизитДопУпорядочивания");
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, ИспользоватьРежимРедактирования);
СтруктураФормы = ИнициализироватьСтруктуруФормы();
ПараметрыФормирования = Новый Структура;
ПараметрыФормирования.Вставить("СтруктураФормы" , СтруктураФормы);
ПараметрыФормирования.Вставить("СтруктураНастроек" , СтруктураНастроек);
ПараметрыФормирования.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(ПараметрыФормирования);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
РезультатРасчетаДлительнойОперации = ДлительныеОперации.ВыполнитьВФоне("Обработки.ПрайсЛист.ПрименитьНастройкиВФоне",
ПараметрыЗадания,
ПараметрыВыполнения);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
АдресХранилищаРезультатаВыполненияЗадания = РезультатРасчетаДлительнойОперации.АдресРезультата;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ПрименитьНастройкиВФонеЗавершение();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ИнициализироватьСтруктуруФормы()
СтруктураФормы = Новый Структура();
СтруктураФормы.Вставить("Дата" , Дата);
СтруктураФормы.Вставить("ДатаДействующихЦен" , ДатаДействующихЦен);
СтруктураФормы.Вставить("Модифицированность" , Модифицированность);
СтруктураФормы.Вставить("Объект" , Новый Структура());
СтруктураФормы.Вставить("КодФормы" , КодФормы);
СтруктураФормы.Вставить("ВыбранныеЦены" , РеквизитФормыВЗначение("ВыбранныеЦены"));
СтруктураФормы.Вставить("ДеревоЦен" , РеквизитФормыВЗначение("ДеревоЦен"));
СтруктураФормы.Вставить("РассчитыватьАвтоматически" , РассчитыватьАвтоматически);
СтруктураФормы.Вставить("ИспользоватьУпаковкиНоменклатуры" , ИспользоватьУпаковкиНоменклатуры);
СтруктураФормы.Вставить("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
СтруктураФормы.Вставить("ИспользоватьСерииНоменклатуры" , ИспользоватьСерииНоменклатуры);
СтруктураФормы.Вставить("КоличествоСтрокДереваЦен" , КоличествоСтрокДереваЦен);
СтруктураФормы.Вставить("ВариантГруппировки" , ВариантГруппировки);
СтруктураФормы.Вставить("ИспользуетсяЦенообразование25" , ИспользуетсяЦенообразование25);
СтруктураФормы.Вставить("АдресХранилищаКэшаДанных" , "");
СтруктураФормы.Вставить("УникальныйИдентификатор" , УникальныйИдентификатор);
Возврат СтруктураФормы;
КонецФункции
&НаСервере
Функция ЗаписатьИзмененияЦенНаСервере(Комментарий = "", ВариантПримененияЦен = 0)
Данные = Документы.УстановкаЦенНоменклатуры.ЗаписатьИзмененияЦенНаСервере(ЭтотОбъект, Комментарий, ВариантПримененияЦен);
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Ложь);
Возврат Данные;
КонецФункции
&НаКлиенте
Процедура ЗаписатьИзмененияЦен()
ДействуетСессияИзмененияЦен = Ложь;
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ДатаНачалаДействияЦен", Дата);
ПараметрыФормы.Вставить("МаркетинговоеМероприятие", МаркетинговоеМероприятие);
ПараметрыФормы.Вставить("ЭтоЦеныСПериодомДействия", УстанавливатьВременныеЦены);
ПараметрыФормы.Вставить("ДатаЗавершенияПериодаДействияЦен", ДатаЗавершенияПериодаДействияЦен);
ПараметрыФормы.Вставить("СписокВариантовУстановкиЦен", Элементы.УстанавливатьВременныеЦены.СписокВыбора.Скопировать());
ОткрытьФорму(
"Обработка.ПрайсЛист.Форма.ФормаПримененияЦен",
ПараметрыФормы,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ЗаписатьИзмененияЦенЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьИзмененияЦенЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если УстанавливатьВременныеЦены <> Результат.ЭтоЦеныСПериодомДействия Тогда
УстанавливатьВременныеЦены = Результат.ЭтоЦеныСПериодомДействия;
КонецЕсли;
Дата = Результат.ДатаНачалаДействияЦен;
ДатаЗавершенияПериодаДействияЦен = Результат.ДатаЗавершенияДействияЦен;
МаркетинговоеМероприятие = Результат.МаркетинговоеМероприятие;
УстанавливатьВременныеЦеныПриИзмененииНаСервере(ЭтотОбъект);
Если УстанавливатьВременныеЦены И ДатаЗавершенияПериодаДействияЦен <= Дата Тогда
ТекстСообщения = НСтр("ru = 'Дата завершения периода действия цен должна быть больше начала периода.
|Документы не записаны.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,"ДатаДействияЦен1");
Возврат;
КонецЕсли;
Данные = ЗаписатьИзмененияЦенНаСервере(Результат.Комментарий, Результат.ВариантПримененияЦен);
Если Данные <> Неопределено Тогда
Для Каждого СтрокаТЧ Из Данные Цикл
ТекстОповещения = НСтр("ru = 'Создан новый документ'");
ПараметрыОповещения = Неопределено;
Оповестить("Запись_УстановкаЦенНоменклатуры", ПараметрыОповещения, СтрокаТЧ.УстановкаЦенНоменклатуры);
ПоказатьОповещениеПользователя(ТекстОповещения,
ПолучитьНавигационнуюСсылку(СтрокаТЧ.УстановкаЦенНоменклатуры),
Строка(СтрокаТЧ.УстановкаЦенНоменклатуры),
БиблиотекаКартинок.Информация32);
Если ЗначениеЗаполнено(СтрокаТЧ.СогласованиеЦенНоменклатуры) Тогда
ТекстОповещения = НСтр("ru = 'Запущен бизнес-процесс согласования новых цен'");
ПараметрыОповещения = Неопределено;
Оповестить("Запись_СогласованиеЦенНоменклатуры", ПараметрыОповещения, СтрокаТЧ.СогласованиеЦенНоменклатуры);
ПоказатьОповещениеПользователя(ТекстОповещения,
ПолучитьНавигационнуюСсылку(СтрокаТЧ.СогласованиеЦенНоменклатуры),
Строка(СтрокаТЧ.СогласованиеЦенНоменклатуры),
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Открыта() И РазрешитьЗакрытие Тогда
Закрыть(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаРезультатаВопросПередЗакрытием(Результат, Параметры) Экспорт
ОтображаетсяВопрос = Ложь;
Если Результат = "ЗакрытьБезСохранения" Тогда
ОтменитьИзменениеЦенНаСервере(Истина);
ОткрытьОкноОжиданияПрименитьНастройкиВФоне();
РазрешитьЗакрытие = Истина;
Если Открыта() Тогда
Закрыть(Неопределено);
КонецЕсли;
КонецЕсли;
Если Результат = "ЗаписатьИЗакрыть" Тогда
ЗаписатьИзмененияЦен();
РазрешитьЗакрытие = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьКолонокРедактирования(Форма, ИспользоватьРежимРедактирования)
Для Каждого ТекЭлемент Из Форма.Элементы.ДеревоЦен.ПодчиненныеЭлементы Цикл
Если СтрНайти(ТекЭлемент.Имя, "ГруппаЦены" + "ВидЦены") Тогда
ПозицияПодстроки = СтрНайти(ТекЭлемент.Имя, "ВидЦены");
ИмяКолонки = Прав(ТекЭлемент.Имя, СтрДлина(ТекЭлемент.Имя)
- ПозицияПодстроки + 1);
Для Каждого ВложенныйЭлемент Из ТекЭлемент.ПодчиненныеЭлементы Цикл
Если СтрНайти(ВложенныйЭлемент.Имя, "ГруппаТехническая") Тогда
Для Каждого ВложенныйЭлементПоТехническойГруппе Из ВложенныйЭлемент.ПодчиненныеЭлементы Цикл
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "СтараяЦена") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = Форма.ПоказыватьДействующиеЦены;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "Формула") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = Форма.ПоказыватьФормулы;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "ПроцентИзменения") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = Форма.ПоказыватьПроцентНаценки;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "СуммаИзменения") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = Форма.ПоказыватьИзменениеЦены;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "Валюта") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = Форма.ПоказыватьВалюту;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если СтрНайти(ВложенныйЭлемент.Имя, "ГруппаУпаковки") Тогда
ВложенныйЭлемент.Видимость = Форма.ПоказыватьЕдиницыИзмерения;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если Форма.ИспользуетсяЦенообразование25 Тогда
Форма.Элементы.ДеревоЦенХарактеристика.Видимость = Ложь;
Иначе
Форма.Элементы.ДеревоЦенХарактеристика.Видимость = Истина;
КонецЕсли;
Если ИспользоватьРежимРедактирования Тогда
Форма.Элементы.СтраницыКоманднойПанели.ТекущаяСтраница = Форма.Элементы.СтраницыКоманднойПанели.ПодчиненныеЭлементы.СтраницаРедактирование;
Форма.Элементы.ЗакончитьИзменениеЦен.КнопкаПоУмолчанию = Истина;
Иначе
Форма.Элементы.СтраницыКоманднойПанели.ТекущаяСтраница = Форма.Элементы.СтраницыКоманднойПанели.ПодчиненныеЭлементы.СтраницаПросмотр;
Форма.Элементы.Сформировать.КнопкаПоУмолчанию = Истина;
Форма.Модифицированность = Ложь;
КонецЕсли;
Форма.ИспользоватьРежимРедактирования = ИспользоватьРежимРедактирования;
КонецПроцедуры
&НаСервере
Процедура НастроитьКолонкиКлючаЦен()
Если (ИспользоватьОднуКолонкуДляКлючаЦен) Тогда
Элементы.ДеревоЦенГруппаНоменклатура.Группировка = ГруппировкаКолонок.ВЯчейке;
Иначе
Элементы.ДеревоЦенГруппаНоменклатура.Группировка = ГруппировкаКолонок.Горизонтальная;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьИзExcelНаСервере(Параметр)
Возврат УстановкаЦенСервер.ЗагрузитьИзExcel(ЭтотОбъект, Параметр.ВидыЦен, Параметр.Товары);
КонецФункции
&НаСервере
Процедура РассчитатьЦеныНаСервере(ПараметрыРасчета)
УстановкаЦенСервер.РассчитатьЦены(ЭтотОбъект, ПараметрыРасчета);
КонецПроцедуры
&НаСервере
Функция АдресНастроекПрайсЛистаВоВременномХранилище()
НастройкиКомпоновщика = КомпоновщикНастроекОтбор.ПолучитьНастройки();
НастройкиКомпоновщикаКолонок = КомпоновщикНастроекОтборКолонок.ПолучитьНастройки();
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("НастройкиКомпоновщика", НастройкиКомпоновщика);
СтруктураДанных.Вставить("НастройкиКомпоновщикаКолонок", НастройкиКомпоновщикаКолонок);
СтруктураДанных.Вставить("АдресХранилищаПараметровСхемКомпоновкиПоВидамЦен", АдресХранилищаПараметровСхемКомпоновкиПоВидамЦен);
СтруктураДанных.Вставить("АдресХранилищаНастройкиКомпоновкиДанных", АдресХранилищаНастройкиКомпоновкиДанных);
СтруктураДанных.Вставить("ВыбранныеЦены", ВыбранныеЦены.Выгрузить());
СтруктураДанных.Вставить("Дата", Дата);
СтруктураДанных.Вставить("ТаблицаПараметровОтбора", ТаблицаПараметровОтбора.Выгрузить());
СтруктураДанных.Вставить("ВидНастройки", ВидНастройки);
СтруктураДанных.Вставить("ВариантНавигации", ВариантНавигации);
СтруктураДанных.Вставить("ВидНоменклатуры", ВидНоменклатуры);
СтруктураДанных.Вставить("ВариантГруппировки", ВариантГруппировки);
СтруктураДанных.Вставить("ВариантНеобходимостиУстановкиЦены", ВариантНеобходимостиУстановкиЦены);
Возврат ПоместитьВоВременноеХранилище(СтруктураДанных, УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ОткрытьФормуНастройкиПрайсЛиста(ТолькоОтбор = Ложь, ТоварыСоСхожимиСвойствами = Неопределено)
АдресВоВременномХранилище = АдресНастроекПрайсЛистаВоВременномХранилище();
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыФормы.Вставить("НастройкиПрайсЛиста", АдресВоВременномХранилище);
ПараметрыФормы.Вставить("Дата", Дата);
ПараметрыФормы.Вставить("ТолькоОтбор", ТолькоОтбор);
ПараметрыФормы.Вставить("ТоварыСоСхожимиСвойствами", ТоварыСоСхожимиСвойствами);
ОткрытьФорму("Обработка.ПрайсЛист.Форма.ФормаНастройки", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПереформироватьТаблицуЦен(ПересчитатьЦены)
УстановкаЦенСервер.ПереформироватьТаблицуЦен(ЭтотОбъект, ПересчитатьЦены);
КонецПроцедуры
&НаСервере
Процедура ОбновитьСтарыеЦеныНоменклатурыНаСервере()
УстановкаЦенСервер.ОбновитьСтарыеЦеныНоменклатуры(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Функция ДанныеДляПечатиЦенников()
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьОрганизацию", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьСклад", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьВидЦены", ?(ВыбранныеЦены.Количество() = 1, ВыбранныеЦены[0].Ссылка, Неопределено));
СтруктураДействий.Вставить("ПоказыватьКолонкуКоличествоВДокументе", Ложь);
СтруктураДействий.Вставить("УстановитьРежимПечатиИзДокумента");
СтруктураДействий.Вставить("УстановитьРежим", "ПечатьЦенников");
СтруктураДействий.Вставить("ЗаполнитьКоличествоЦенниковПоДокументу");
СтруктураДействий.Вставить("ЗаполнитьТаблицуТоваров");
КэшДанных = УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных();
ТаблицаТовары = УстановкаЦенСервер.ТаблицаТовары(ЭтотОбъект, КэшДанных, Новый Структура("ТолькоИзмененные, ПоИзменениямЗаДень", Истина, Истина));
Если ИспользуетсяЦенообразование25 Тогда
ТаблицаТовары = УстановкаЦенСервер.ДополнитьТаблицуТоваров(ТаблицаТовары);
КонецЕсли;
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("Товары", ТаблицаТовары);
СтруктураРезультат.Вставить("СтруктураДействий", СтруктураДействий);
Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
КонецФункции
&НаСервере
Функция ДанныеДляПечатиЭтикеток()
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьОрганизацию", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьСклад", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьВидЦены", ?(ВыбранныеЦены.Количество() = 1, ВыбранныеЦены[0].Ссылка, Неопределено));
СтруктураДействий.Вставить("ПоказыватьКолонкуКоличествоВДокументе", Ложь);
СтруктураДействий.Вставить("УстановитьРежимПечатиИзДокумента");
СтруктураДействий.Вставить("УстановитьРежим", "ПечатьЭтикеток");
СтруктураДействий.Вставить("ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе");
СтруктураДействий.Вставить("ЗаполнитьТаблицуТоваров");
КэшДанных = УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных();
ТаблицаТовары = УстановкаЦенСервер.ТаблицаТовары(ЭтотОбъект, КэшДанных, Новый Структура("ТолькоИзмененные, ПоИзменениямЗаДень", Истина, Истина));
Если ИспользуетсяЦенообразование25 Тогда
ТаблицаТовары = УстановкаЦенСервер.ДополнитьТаблицуТоваров(ТаблицаТовары);
КонецЕсли;
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("Товары", ТаблицаТовары);
СтруктураРезультат.Вставить("СтруктураДействий", СтруктураДействий);
Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
КонецФункции
&НаКлиенте
Процедура УстановитьСпискиДляОтбора(СпискиДляОтбора, СтрокаТЧ)
СпискиДляОтбора.СписокНоменклатуры.Добавить(СтрокаТЧ.Номенклатура);
Если ЗначениеЗаполнено(СтрокаТЧ.ХарактеристикаЦО) Тогда
Если СпискиДляОтбора.СписокХарактеристикЦО.НайтиПоЗначению(СтрокаТЧ.ХарактеристикаЦО) = Неопределено Тогда
СпискиДляОтбора.СписокХарактеристикЦО.Добавить(СтрокаТЧ.ХарактеристикаЦО);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.СерияЦО) Тогда
Если СпискиДляОтбора.СписокСерийЦО.НайтиПоЗначению(СтрокаТЧ.СерияЦО) = Неопределено Тогда
СпискиДляОтбора.СписокСерийЦО.Добавить(СтрокаТЧ.СерияЦО);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.УпаковкаЦО) Тогда
Если СпискиДляОтбора.СписокСерийЦО.НайтиПоЗначению(СтрокаТЧ.УпаковкаЦО) = Неопределено Тогда
СпискиДляОтбора.СписокУпаковокЦО.Добавить(СтрокаТЧ.УпаковкаЦО);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПройтиПоИерархии(СпискиДляОтбора, СтрокиТЧ)
Для Каждого СтрокаТЧ Из СтрокиТЧ Цикл
Если СтрокаТЧ.ЭтоИерархия Тогда
ПройтиПоИерархии(СпискиДляОтбора, СтрокаТЧ.ПолучитьЭлементы());
Иначе
УстановитьСпискиДляОтбора(СпискиДляОтбора, СтрокаТЧ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьПометкуИзмененныхФормулСервер(ВидЦен = Неопределено)
УстановкаЦенСервер.УстановитьПометкуИзмененныхФормул(ЭтотОбъект,,ВидЦен);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИнформационнуюСтроку()
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Элемент = Элементы.ДеревоЦен;
Если Элементы.ДеревоЦен.ТекущийЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
ПозицияПодстроки = СтрНайти(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяКолонки = Прав(Элемент.ТекущийЭлемент.Имя, СтрДлина(Элемент.ТекущийЭлемент.Имя) - ПозицияПодстроки + 1);
Если ТекущееИмяКолонки <> ИмяКолонки или ИдентификаторТекущейСтроки <> Элементы.ДеревоЦен.ТекущаяСтрока Тогда
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяКолонки);
ТекущееИмяКолонки = ИмяКолонки;
ИдентификаторТекущейСтроки = Элементы.ДеревоЦен.ТекущаяСтрока;
Если ВидЦены <> Неопределено Тогда
ИдентификаторТекущегоВидаЦен = ВидЦены.ПолучитьИдентификатор();
Если Элементы.ДеревоЦен.ВыделенныеСтроки.Количество() > 1 Тогда
МассивВалют = ПолучитьМассивИспользуемыхВалют("Валюта" + ИмяКолонки, Истина);
ИнформационнаяСтрока = ПолучитьИнформационнуюСтрокуДляВидаЦен(Элементы,ВидЦены.Ссылка, МассивВалют, ИмяКолонки);
Иначе
ЕстьЦенаУстановленнаяБудующейДатой = ЕстьЦенаУстановленнаяБудующейДатой(ВидЦены.Ссылка,ТекущиеДанные.Номенклатура, ТекущиеДанные.Характеристика);
ИнформационнаяСтрока = УстановкаЦенКлиент.ПолучитьИнформационнуюСтрокуДляЯчейки(
Элементы,
ВыбранныеЦены,
ДатаДействующихЦен,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры,
ЕстьЦенаУстановленнаяБудующейДатой,
ВидЦены);
КонецЕсли;
ЗначениеИзмененияСтрока = ПолучитьФормулуВидаЦен(ИмяКолонки, ВидЦены);
Иначе
ТекущееИмяКолонки = "";
ИдентификаторТекущегоВидаЦен= 0;
ИдентификаторТекущейСтроки = 0;
ИнформационнаяСтрока = "";
КонецЕсли;
КонецЕсли;
Иначе
Если ИдентификаторТекущейСтроки <> Элементы.ДеревоЦен.ТекущаяСтрока Тогда
ТекущееИмяКолонки = "";
ИдентификаторТекущегоВидаЦен= 0;
ИдентификаторТекущейСтроки = Элементы.ДеревоЦен.ТекущаяСтрока;
ИнформационнаяСтрока = "";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДанныеПоИсторииИзменения()
ОчиститьИнформациюИстории();
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Элемент = Элементы.ДеревоЦен;
ПозицияПодстроки = СтрНайти(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяКолонки = Прав(Элемент.ТекущийЭлемент.Имя, СтрДлина(Элемент.ТекущийЭлемент.Имя) - ПозицияПодстроки + 1);
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяКолонки);
ДатаТекущейЦены = ПолучитьДатуТекущейЦены();
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
ПараметрыЗаполнения.Вставить("Номенклатура", ТекущиеДанные.Номенклатура);
ПараметрыЗаполнения.Вставить("Характеристика", ТекущиеДанные.Характеристика);
ПараметрыЗаполнения.Вставить("ХарактеристикаЦО", ТекущиеДанные.ХарактеристикаЦО);
ПараметрыЗаполнения.Вставить("СерияЦО", ТекущиеДанные.СерияЦО);
ПараметрыЗаполнения.Вставить("ЕдиницаИзмерения", ТекущиеДанные.ЕдиницаИзмерения);
Если ТекущиеДанные.УпаковкаЦО = ТекущиеДанные.ЕдиницаИзмерения Тогда
ПараметрыЗаполнения.Вставить("УпаковкаЦО", ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
Иначе
ПараметрыЗаполнения.Вставить("УпаковкаЦО", ТекущиеДанные.УпаковкаЦО);
КонецЕсли;
Отбор = ПолучитьЦенуНаДату(ДатаТекущейЦены, ВидЦены.Ссылка, ПараметрыЗаполнения);
ПараметрыЗаполнения.Вставить("ВидЦены",ВидЦены.Ссылка);
ПараметрыЗаполнения.Вставить("ТекущиеДанные",ТекущиеДанные);
ПараметрыЗаполнения.Вставить("ИмяКолонки",ИмяКолонки);
ПараметрыЗаполнения.Вставить("Отбор",Отбор);
ЗаполнитьГруппуИсторииИзмененияЦены(ПараметрыЗаполнения);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьИнформационныеСтрокиИстории(СтруктураПараметров)
ИсторияЦены = ПолучитьДанныеИсторииЦены(СтруктураПараметров);
Если ИсторияЦены.Количество() =0 Тогда
ПустаяИстория = Истина;
Иначе
ПустаяИстория = Ложь;
КонецЕсли;
ФорматированнаяСтрокаИстории = "";
ФорматированнаяСтрокаДинамики = "";
МассивФорматированныхСтрок = Новый Массив;
МассивФорматированныхСтрокДинамики = Новый Массив;
МассивФорматированныхСтрокПиктограммТренда = Новый Массив;
МассивФорматированныхСтрокНачалаСтроки = Новый Массив;
МассивФорматированныхСтрокПоАкции = Новый Массив;
ИсторияЦены.Колонки.Добавить("ЭтоТекущаяЦена", Новый ОписаниеТипов("Булево"));
ИсторияЦены.Колонки.Добавить("ЦенаИзменена", Новый ОписаниеТипов("Булево"));
Если СтруктураПараметров.СтараяЦена <> СтруктураПараметров.НоваяЦена Тогда
СтрНов = ИсторияЦены.Добавить();
СтрНов.Цена = СтруктураПараметров.НоваяЦена;
СтрНов.Период = СтруктураПараметров.Дата;
СтрНов.Валюта = СтруктураПараметров.Валюта;
СтрНов.ЭтоТекущаяЦена = Истина;
СтрНов.ЦенаИзменена = СтруктураПараметров.ЦенаИзменена;
Иначе
Если СтруктураПараметров.Отбор <> Неопределено Тогда
СтрТекущейЦены = ИсторияЦены.НайтиСтроки(СтруктураПараметров.Отбор);
Если СтрТекущейЦены.Количество()>0 Тогда
СтрТекущейЦены[0].ЭтоТекущаяЦена = Истина;
СтрТекущейЦены[0].ЦенаИзменена = СтруктураПараметров.ЦенаИзменена;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИсторияЦены.Сортировать("Период Возр");
Для Инд = 0 По ИсторияЦены.Количество()-1 Цикл
ПараметрыСтроки = новый Структура;
Стр = ИсторияЦены.Получить(Инд);
Если Инд=0 И ИсторияЦены.Количество()<6 Тогда
ПараметрыСтроки.Вставить("Цена",Стр.Цена);
ПараметрыСтроки.Вставить("Период",Стр.Период);
ПараметрыСтроки.Вставить("Валюта",Стр.Валюта);
ПараметрыСтроки.Вставить("ЭтоТекущаяЦена",Стр.ЭтоТекущаяЦена);
ПараметрыСтроки.Вставить("ЦенаИзменена",Стр.ЦенаИзменена);
ПараметрыСтроки.Вставить("ЭтоВебКлиент",СтруктураПараметров.ЭтоВебКлиент);
ИначеЕсли Инд>0 Тогда
Стр = ИсторияЦены.Получить(Инд);
СтрПредыдущая = ИсторияЦены.Получить(Инд-1);
ПараметрыСтроки.Вставить("Цена",Стр.Цена);
ПараметрыСтроки.Вставить("Период",Стр.Период);
ПараметрыСтроки.Вставить("Валюта",Стр.Валюта);
ПараметрыСтроки.Вставить("ЭтоТекущаяЦена",Стр.ЭтоТекущаяЦена);
ПараметрыСтроки.Вставить("ЦенаИзменена",Стр.ЦенаИзменена);
ПараметрыСтроки.Вставить("МаркетинговоеМероприятие",Стр.МаркетинговоеМероприятие);
ПараметрыСтроки.Вставить("ПредыдущаяЦена",СтрПредыдущая.Цена);
ПараметрыСтроки.Вставить("ПредыдущаяПериод",СтрПредыдущая.Период);
ПараметрыСтроки.Вставить("ПредыдущаяВалюта",СтрПредыдущая.Валюта);
ПараметрыСтроки.Вставить("ЭтоВебКлиент",СтруктураПараметров.ЭтоВебКлиент);
КонецЕсли;
Если ПараметрыСтроки.Количество()>0 Тогда
СтрокиИстории = ПолучитьИнформационнуюСтрокуИстории(ПараметрыСтроки);
ФорматированнаяСтрокаИстории = СтрокиИстории.ФорматированнаяСтрокаИстории;
ФорматированнаяСтрокаДинамики = СтрокиИстории.ФорматированнаяСтрокаДинамики;
ФорматированнаяСтрокаПиктограммаТренда = СтрокиИстории.ФорматированнаяСтрокаПиктограммаТренда;
ФорматированнаяСтрокаНачалоСтроки = СтрокиИстории.ФорматированнаяСтрокаНачалоСтроки;
ФорматированнаяСтрокаПоАкции = СтрокиИстории.ФорматированнаяСтрокаПоАкции;
Если Инд<>ИсторияЦены.Количество()-1 Тогда
ФорматированнаяСтрокаИстории = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаИстории,Новый ФорматированнаяСтрока("
|
|"));
ФорматированнаяСтрокаДинамики = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаДинамики,Новый ФорматированнаяСтрока("
|
|"));
ФорматированнаяСтрокаПиктограммаТренда = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаПиктограммаТренда,Новый ФорматированнаяСтрока("
|
|"));
ФорматированнаяСтрокаНачалоСтроки = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаНачалоСтроки,Новый ФорматированнаяСтрока("
|
|"));
ФорматированнаяСтрокаПоАкции = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаПоАкции,Новый ФорматированнаяСтрока("
|
|"));
КонецЕсли;
МассивФорматированныхСтрок.Добавить(ФорматированнаяСтрокаИстории);
МассивФорматированныхСтрокДинамики.Добавить(ФорматированнаяСтрокаДинамики);
МассивФорматированныхСтрокПиктограммТренда.Добавить(ФорматированнаяСтрокаПиктограммаТренда);
МассивФорматированныхСтрокНачалаСтроки.Добавить(ФорматированнаяСтрокаНачалоСтроки);
МассивФорматированныхСтрокПоАкции.Добавить(ФорматированнаяСтрокаПоАкции);
КонецЕсли;
КонецЦикла;
СтруктураМассивовСтрок = Новый Структура();
СтруктураМассивовСтрок.Вставить("МассивФорматированныхСтрок", МассивФорматированныхСтрок);
СтруктураМассивовСтрок.Вставить("МассивФорматированныхСтрокДинамики", МассивФорматированныхСтрокДинамики);
СтруктураМассивовСтрок.Вставить("МассивФорматированныхСтрокПиктограммТренда", МассивФорматированныхСтрокПиктограммТренда);
СтруктураМассивовСтрок.Вставить("МассивФорматированныхСтрокНачалаСтроки", МассивФорматированныхСтрокНачалаСтроки);
СтруктураМассивовСтрок.Вставить("МассивФорматированныхСтрокПоАкции", МассивФорматированныхСтрокПоАкции);
СтруктураМассивовСтрок.Вставить("ПустаяИстория", ПустаяИстория);
Возврат СтруктураМассивовСтрок;
КонецФункции
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если ТипЗнч(ДанныеШтрихкодов) = Тип("Массив") Тогда
МассивШтрихкодов = ДанныеШтрихкодов;
Иначе
МассивШтрихкодов = Новый Массив;
МассивШтрихкодов.Добавить(ДанныеШтрихкодов);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Функция ПоместитьВлияющиеВидыЦенВХранилище(ВлияющиеЦены)
Дерево = РаботаСФормулами.ПолучитьПустоеДеревоОперандов();
Для Каждого Элемент Из ВлияющиеЦены Цикл
НайденныеВидыЦен = ВыбранныеЦены.НайтиСтроки(Новый Структура("Ссылка", Элемент.Значение));
Если НайденныеВидыЦен.Количество() = 1 Тогда
СтрокаВидыЦены = НайденныеВидыЦен[0];
СтрокаОперанда = РаботаСФормулами.НоваяСтрокаДереваОперанда(Дерево);
СтрокаОперанда.Идентификатор = СтрокаВидыЦены.Идентификатор;
СтрокаОперанда.Представление = Строка(СтрокаВидыЦены.Ссылка);
СтрокаОперанда.ПометкаУдаления = СтрокаВидыЦены.ПометкаУдаления;
СтрокаОперанда.ТипЗначения = Новый ОписаниеТипов("Число");
КонецЕсли;
КонецЦикла;
АдресВХранилище = ПоместитьВоВременноеХранилище(Дерево, УникальныйИдентификатор);
Возврат АдресВХранилище;
КонецФункции
&НаКлиенте
Функция ПолучитьПараметрыФормыРедактированияЦены_1(Формула)
ПозицияПодстроки = СтрНайти(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяТекущейКолонки = Прав(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, СтрДлина(Элементы.ДеревоЦен.ТекущийЭлемент.Имя) - ПозицияПодстроки + 1);
КонецЕсли;
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяТекущейКолонки);
Если ВидЦены <> Неопределено Тогда
ВлияющиеЦены = ВидЦены.ВлияющиеЦены;
Иначе
ВлияющиеЦены = новый СписокЗначений;
КонецЕсли;
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("Формула", Формула);
СтруктураВозврата.Вставить("ДеревоОперандов", ПоместитьВлияющиеВидыЦенВХранилище(ВлияющиеЦены));
СтруктураВозврата.Вставить("ОперандыЗаголовок", НСтр("ru = 'Доступные виды цен'"));
СтруктураВозврата.Вставить("Операторы", АдресХранилищаДереваОператоров);
СтруктураВозврата.Вставить("ТипРезультата", Новый ОписаниеТипов("Число"));
Возврат СтруктураВозврата;
КонецФункции
&НаКлиенте
Функция ПолучитьПараметрыФормыРедактированияЦены(ИмяЭлемента)
ИмяТекущейКолонки = СтрЗаменить(ИмяЭлемента, "ДеревоЦен", "");
ФормулаВидаЦен = ПолучитьФормулуВидаЦен(ИмяЭлемента);
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяТекущейКолонки);
Если ВидЦены <> Неопределено Тогда
ВлияющиеЦены = ВидЦены.ВлияющиеЦены;
Иначе
ВлияющиеЦены = новый СписокЗначений;
КонецЕсли;
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("ИмяЭлементаВозврата", ИмяТекущейКолонки);
СтруктураВозврата.Вставить("Формула", ФормулаВидаЦен);
СтруктураВозврата.Вставить("ДеревоОперандов", ПоместитьВлияющиеВидыЦенВХранилище(ВлияющиеЦены));
СтруктураВозврата.Вставить("ОперандыЗаголовок", НСтр("ru = 'Доступные виды цен'"));
СтруктураВозврата.Вставить("Операторы", АдресХранилищаДереваОператоров);
СтруктураВозврата.Вставить("ТипРезультата", Новый ОписаниеТипов("Число"));
Возврат СтруктураВозврата;
КонецФункции
&НаКлиенте
Функция ПолучитьФормулуВидаЦен(ИмяЭлемента, ВидЦены = Неопределено)
ФормулаВидаЦен = "";
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат "";
КонецЕсли;
ПозицияПодстроки = СтрНайти(ИмяЭлемента, "ВидЦены");
ИмяКолонки = Прав(ИмяЭлемента, СтрДлина(ИмяЭлемента) - ПозицияПодстроки + 1);
ФормулаВидаЦен = ТекущиеДанные["Формула" + ИмяКолонки];
СтруктураЦеноваяГруппа = Новый Структура("ЦеноваяГруппа", ТекущиеДанные.ЦеноваяГруппа);
ФормулыИспользуются = Истина;
Если НЕ ЗначениеЗаполнено(ФормулаВидаЦен) Тогда
ФормулыИспользуются = Ложь;
Если ВидЦены = Неопределено Тогда
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяЭлемента);
КонецЕсли;
Если Не ВидЦены = Неопределено Тогда
Если ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.РассчитыватьПоФормуламОтДругихВидовЦен")
Или ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаДругойВидЦен") Тогда
ФормулыИспользуются = Истина;
ФормулаВидаЦен = ВидЦены.Формула;
ЦеновыеГруппыАлгоритмов = ВидЦены.ЦеновыеГруппы.НайтиСтроки(СтруктураЦеноваяГруппа);
Если ЦеновыеГруппыАлгоритмов.Количество() > 0 Тогда
ФормулаВидаЦен = ЦеновыеГруппыАлгоритмов[0].Формула;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Элементы.ЗначениеИзмененияСтрока.ТолькоПросмотр = Не ФормулыИспользуются;
Если ФормулыИспользуются Тогда
Элементы.ЗначениеИзмененияСтрока.ПодсказкаВвода = НСтр("ru = '<формула по виду цен>'");
Иначе
Элементы.ЗначениеИзмененияСтрока.ПодсказкаВвода = НСтр("ru = '<формулы не используются>'");
КонецЕсли;
Возврат ФормулаВидаЦен;
КонецФункции
&НаКлиенте
Функция ПолучитьВидЦеныПоИмениКолонки(ИмяЭлемента)
ВидЦены = Неопределено;
ПозицияПодстроки = СтрНайти(ИмяЭлемента, "ВидЦены");
ИмяКолонки = Прав(ИмяЭлемента, СтрДлина(ИмяЭлемента) - ПозицияПодстроки + 1);
Если ТекущееИмяКолонки = ИмяКолонки и ИдентификаторТекущегоВидаЦен <> 0 Тогда
ВидЦены = ВыбранныеЦены.НайтиПоИдентификатору(ИдентификаторТекущегоВидаЦен);
Иначе
НайденныеВидыЦен = ВыбранныеЦены.НайтиСтроки(Новый Структура("ИмяКолонки", ИмяКолонки));
Если НайденныеВидыЦен.Количество() = 1 Тогда
ВидЦены = НайденныеВидыЦен[0];
КонецЕсли;
КонецЕсли;
Возврат ВидЦены;
КонецФункции
&НаСервере
Процедура ЗафиксироватьКолонкуНоменклатуры(НовоеЗначение)
Если НовоеЗначение = Неопределено Тогда
НовоеЗначение = Истина;
КонецЕсли;
ЗафиксироватьКолонкуНоменклатуры = НовоеЗначение;
Элементы.ДеревоЦенГруппаНоменклатура.ФиксацияВТаблице = ?(ЗафиксироватьКолонкуНоменклатуры,ФиксацияВТаблице.Лево,ФиксацияВТаблице.Нет);
КонецПроцедуры
&НаСервере
Процедура ИзменитьЦеныНаПроцентНаСервере(ПараметрыРасчета)
УстановкаЦенСервер.ИзменитьЦеныНаПроцент(ЭтотОбъект, ПараметрыРасчета);
КонецПроцедуры
&НаСервере
Процедура ИзменитьЦеныНаСервере(ПараметрыРасчета)
УстановкаЦенСервер.ИзменитьЦены(ЭтотОбъект, ПараметрыРасчета);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьРассчитыватьАвтоматическиНаКлиенте(НовоеЗначение)
РассчитыватьАвтоматически = НовоеЗначение;
КонецПроцедуры
&НаКлиенте
Функция ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения)
ВидыЦен = Новый Массив();
Для Каждого СтрокаВидыЦены ИЗ ВыбранныеЦены Цикл
Если НЕ (СтрокаВидыЦены.Выбрана И СтрокаВидыЦены.Редактировать) Тогда
Продолжить;
КонецЕсли;
Если ПараметрыЗаполнения.РасчетПоИБ
И (СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБ")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПриПоступлении")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаЦенуПоступления")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаЦенуВводаОстатков")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоКонкурентам")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоПоставщикам")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоСебестоимости")) Тогда
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
ИначеЕсли ПараметрыЗаполнения.РасчетПоФормулам
И (СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаДругойВидЦен")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.РассчитыватьПоФормуламОтДругихВидовЦен")) Тогда
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
ИначеЕсли ПараметрыЗаполнения.ЗагрузкаИзЯндексМаркет
И СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяИзЯндексМаркет") Тогда
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
ИначеЕсли ПараметрыЗаполнения.ЗагрузкаИзOzon
И СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗагружаетсяСOzon") Тогда
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
Иначе
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
КонецЕсли;
КонецЦикла;
ТолькоВыделенные = Элементы.ДеревоЦен.ВыделенныеСтроки.Количество() > 1;
СтруктураВозврата = Новый Структура();
СтруктураВозврата.Вставить("ЗагрузкаСтарыхЦен", ПараметрыЗаполнения.ЗагрузкаСтарыхЦен);
СтруктураВозврата.Вставить("ОкруглениеРучныхЦен", ПараметрыЗаполнения.ОкруглениеРучныхЦен);
СтруктураВозврата.Вставить("РучныеВидыЦен", ВидыЦен);
СтруктураВозврата.Вставить("ДатаДокумента", Дата);
СтруктураВозврата.Вставить("ТолькоВыделенные", ТолькоВыделенные);
СтруктураВозврата.Вставить("ВсеВидыЦен", УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект, Истина));
СтруктураВозврата.Вставить("АдресХранилищаДереваОператоров", АдресХранилищаДереваОператоров);
Если ПараметрыЗаполнения.Свойство("РасчетПоФормулам") Тогда
СтруктураВозврата.Вставить("РасчетПоФормулам", ПараметрыЗаполнения.РасчетПоФормулам);
КонецЕсли;
СтруктураВозврата.Вставить("ТолькоНеЗаполненные",Ложь);
Если ПараметрыЗаполнения.Свойство("МассивВалютПоВидамЦен") Тогда
СтруктураВозврата.Вставить("МассивВалютПоВидамЦен", ПараметрыЗаполнения.МассивВалютПоВидамЦен);
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
&НаСервере
Функция АдресВоВременномХранилищеДанныхДляПечати()
ДанныеДляПечати = Новый Структура;
ДанныеДляПечати.Вставить("ВидыЦен", УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект));
ДанныеДляПечати.Вставить("Товары", УстановкаЦенСервер.ТаблицаТовары(ЭтотОбъект));
ДанныеДляПечати.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
Если Не ЗначениеЗаполнено(ДатаДействующихЦен) Тогда
ДанныеДляПечати.Вставить("ДатаДействующихЦен", НачалоДня(Дата) - 1);
Иначе
ДанныеДляПечати.Вставить("ДатаДействующихЦен", ДатаДействующихЦен);
КонецЕсли;
Возврат ПоместитьВоВременноеХранилище(ДанныеДляПечати, УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура РассчитатьЦеныПоИдентификаторуСтрокиНаСервере(ИдентификаторСтроки, ИзмененноеПоле)
Если ИспользуетсяЦенообразование25 Тогда
УстановкаЦенСервер.РассчитатьЦеныПоИдентификаторуСтроки2_5(ЭтотОбъект, ИдентификаторСтроки,,ИзмененноеПоле);
Иначе
УстановкаЦенСервер.РассчитатьЦеныПоИдентификаторуСтроки(ЭтотОбъект, ИдентификаторСтроки,,ИзмененноеПоле);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция КоэффициентыУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры)
Возврат УстановкаЦенСервер.СоответствиеКоэффициентовКоллекцииУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры);
КонецФункции
&НаСервере
Процедура ОчиститьСохраненныеДокументыИПрименитьНастройки(Знач ВыбранноеЗначение)
УстановкаЦенСервер.ОчиститьСохраненныеДокументы(СохраненныеДокументы, УникальныйИдентификатор);
ПрименитьНастройки(ВыбранноеЗначение);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьМассивУстановленныхРанееВидовЦенПоНоменклатуре(ПараметрыВидовЦен)
Возврат УстановкаЦенСервер.ПолучитьМассивУстановленныхРанееВидовЦенПоНоменклатуре(ПараметрыВидовЦен);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ТекстЗаголовка(Форма)
Если Форма.УстанавливатьВременныеЦены Тогда
ТекстЗаголовка = НСтр("ru='Прайс-лист с %1 по %2'");
Иначе
ТекстЗаголовка = НСтр("ru='Прайс-лист на %1'");
КонецЕсли;
ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстЗаголовка,Формат(Форма.Дата,"ДЛФ=DD"),Формат(Форма.ДатаЗавершенияПериодаДействияЦен, "ДЛФ=DD"));
Возврат ТекстЗаголовка;
КонецФункции
#Область ДлительныеОперации
&НаКлиенте
Процедура ОткрытьОкноОжиданияПрименитьНастройкиВФоне()
Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ПараметрыОжидания.ВыводитьСообщения = Истина;
ПараметрыОжидания.ТекстСообщения = НСтр("ru='Идет заполнение цен прайс-листа'");
ОповещениеОЗавершении = Новый ОписаниеОповещения("ПрименитьНастройкиВФонеЗавершение_НаКлиенте", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатРасчетаДлительнойОперации, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОкноОжиданияРасчетаЦенВФоне(Знач ИмяПроцедуры)
Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ПараметрыОжидания.ВыводитьСообщения = Истина;
ПараметрыОжидания.ТекстСообщения = НСтр("ru='Идет расчет цен прайс-листа'");
ОповещениеОЗавершении = Новый ОписаниеОповещения(ИмяПроцедуры, ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатРасчетаДлительнойОперации, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьНастройкиВФонеЗавершение_НаКлиенте(ФоновоеЗадание, ДополнительныеПараметры) Экспорт
РезультатРасчетаДлительнойОперации = ФоновоеЗадание;
Если НЕ РезультатРасчетаДлительнойОперации = Неопределено Тогда
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ПрименитьНастройкиВФонеЗавершение();
ИначеЕсли РезультатРасчетаДлительнойОперации.Статус = "Ошибка" Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатРасчетаДлительнойОперации.КраткоеПредставлениеОшибки);
КонецЕсли;
КонецЕсли;
РезультатРасчетаДлительнойОперации = Неопределено;
ИдентификаторЗадания = Неопределено;
КонецПроцедуры
&НаСервере
Процедура ПрименитьНастройкиВФонеЗавершение()
РезультатВыполненияФоновогоЗадания = ПолучитьИзВременногоХранилища(АдресХранилищаРезультатаВыполненияЗадания);
КоличествоСтрокДереваЦен = РезультатВыполненияФоновогоЗадания.СтруктураФормы.КоличествоСтрокДереваЦен;
Дерево = РезультатВыполненияФоновогоЗадания.СтруктураФормы.ДеревоЦен;
ДобавитьОтборПоВариантуНеобходимостиУстановкиЦены(Дерево);
ЗначениеВРеквизитФормы(Дерево, "ДеревоЦен");
УстановкаЦенСервер.УстановитьПометкуИзмененныхФормул(ЭтотОбъект, Дерево);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаКлиентеЗавершениеОбщая(ФоновоеЗадание, ДополнительныеПараметры = Неопределено) Экспорт
РезультатРасчетаДлительнойОперации = ФоновоеЗадание;
Если НЕ РезультатРасчетаДлительнойОперации = Неопределено Тогда
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ИдентификаторТекущейСтроки = Элементы.ДеревоЦен.ТекущаяСтрока;
ИзменитьЦеныНаСервереЗавершениеОбщая();
Если ИдентификаторТекущейСтроки<>Неопределено Тогда
Элементы.ДеревоЦен.ТекущаяСтрока = ИдентификаторТекущейСтроки + КоличествоСтрокДереваЦен;
КонецЕсли;
ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая();
ИначеЕсли РезультатРасчетаДлительнойОперации.Статус = "Ошибка" Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатРасчетаДлительнойОперации.КраткоеПредставлениеОшибки);
КонецЕсли;
КонецЕсли;
РезультатРасчетаДлительнойОперации = Неопределено;
ИдентификаторЗадания = Неопределено;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаКлиентеЗавершениеФрагментОбщая()
ОбновитьИнформационнуюСтроку();
КонецПроцедуры
&НаСервере
Процедура ИзменитьЦеныНаСервереЗавершениеОбщая()
РезультатВыполненияФоновогоЗадания = ПолучитьИзВременногоХранилища(АдресХранилищаРезультатаВыполненияЗадания);
Дерево = РезультатВыполненияФоновогоЗадания.СтруктураФормы.ДеревоЦен;
ЗначениеВРеквизитФормы(Дерево, "ДеревоЦен");
Модифицированность = РезультатВыполненияФоновогоЗадания.СтруктураФормы.Модифицированность;
УстановкаЦенСервер.УстановитьПометкуИзмененныхФормул(ЭтотОбъект, Дерево);
КонецПроцедуры
&НаКлиенте
Процедура ОграничиватьУстановкуЦенПериодом(Команда)
Элементы.ОграничиватьУстановкуЦенПериодом.Пометка = НЕ Элементы.ОграничиватьУстановкуЦенПериодом.Пометка;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьБыстрогоРедактирования(Форма)
Форма.Элементы.ГруппаБыстрогоРедактирования.Видимость = Форма.ПоказыватьПанельБыстрогоРедактирования;
Если Форма.ВариантИзмененияЦены < 4 Тогда
Форма.Элементы.ЗначениеИзмененияЧисло.видимость = Истина;
Форма.Элементы.ЗначениеИзмененияСтрока.видимость= Ложь;
Иначе
Форма.Элементы.ЗначениеИзмененияЧисло.видимость = Ложь;
Форма.Элементы.ЗначениеИзмененияСтрока.видимость= Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановливатьВременныеЦеныПриИзменении(Элемент)
УстанавливатьВременныеЦеныПриИзмененииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстанавливатьВременныеЦеныПриИзмененииНаСервере(Форма)
Форма.Элементы.ГруппаВыборПериодаДействияЦен1.Видимость = НЕ Форма.УстанавливатьВременныеЦены;
Форма.Элементы.ГруппаВыборПериодаДействияЦен2.Видимость = Форма.УстанавливатьВременныеЦены;
Форма.Элементы.МаркетинговоеМероприятие.Видимость = Форма.УстанавливатьВременныеЦены;
Если Форма.УстанавливатьВременныеЦены Тогда
ТекстЗаголовка = НСтр("ru='Прайс-лист с %1 по %2'");
Иначе
ТекстЗаголовка = НСтр("ru='Прайс-лист на %1'");
КонецЕсли;
ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстЗаголовка,Формат(Форма.Дата,"ДЛФ=DD"),Формат(Форма.ДатаЗавершенияПериодаДействияЦен, "ДЛФ=DD"));
Форма.Заголовок = ТекстЗаголовка(Форма);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьИнформационнуюСтрокуРазныеВалюты()
ФорматированнаяСтрокаПунктМеню = Новый ФорматированнаяСтрока("Изменить цены",Новый Шрифт(,,Истина),,,"СсылкаИзменитьЦены");
#Если НЕ ВебКлиент Тогда
ФорматированнаяСтрокаПунктМеню = Новый ФорматированнаяСтрока(Новый ФорматированнаяСтрока(" ",БиблиотекаКартинок.Изменить," "), ФорматированнаяСтрокаПунктМеню);
#Иначе
ФорматированнаяСтрокаПунктМеню = "";
#КонецЕсли
ФорматированнаяСтрокаТекстПредупреждения = Новый ФорматированнаяСтрока("Значения для выбранного вида цен указаны в нескольких различных валютах. При установке цен из быстрой панели редактирования ('Изменить на заначение' и 'Установить значение') для всех указанных валют будет установлено изменение на количество, указанное в поле редактирования. Для установки различных значений в разрезе валют для каждого вида цен используйте пункт меню");
Элементы.ДекорацияПредупреждение.Заголовок = Новый ФорматированнаяСтрока(ФорматированнаяСтрокаТекстПредупреждения,ФорматированнаяСтрокаПунктМеню);
КонецПроцедуры
&НаКлиенте
Процедура ИнформационнаяСтрокаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "СсылкаГруппыИсторииИзмененияЦены" Тогда
СтандартнаяОбработка = Ложь;
ЗаполнитьДанныеПоИсторииИзменения();
Элементы.ГруппаИсторииИзмененияЦены.Доступность = Истина;
Элементы.ГруппаИсторииИзмененияЦены.Показать();
ПодключитьОбработчикОжидания("УстановитьДоступностьГруппы", 5);
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "СсылкаРазныеВалюты" Тогда
СтандартнаяОбработка = Ложь;
ЗаполнитьИнформационнуюСтрокуРазныеВалюты();
Элементы.ГруппаПредупрежденияОРазныхВалютах.Доступность = Истина;
Элементы.ГруппаПредупрежденияОРазныхВалютах.Показать();
ПодключитьОбработчикОжидания("УстановитьДоступностьГруппы", 5);
Иначе
СтандартнаяОбработка = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияПредупреждениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "СсылкаИзменитьЦены" Тогда
СтандартнаяОбработка = Ложь;
ИзменитьЦеныНаНаКлиентеПоТипуВызова(Ложь);
Иначе
СтандартнаяОбработка = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияПоказатьВсюИсториюОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "СсылкаВсяИстория" Тогда
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
ПозицияПодстроки = СтрНайти(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяТекущейКолонки = Прав(Элементы.ДеревоЦен.ТекущийЭлемент.Имя, СтрДлина(Элементы.ДеревоЦен.ТекущийЭлемент.Имя) - ПозицияПодстроки + 1);
КонецЕсли;
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяТекущейКолонки);
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Ключ", ТекущиеДанные.Номенклатура);
ПараметрыОткрытияФормы.Вставить("Характеристика", ТекущиеДанные.Характеристика);
Если ВидЦены <> Неопределено Тогда
ПараметрыОткрытияФормы.Вставить("ВидЦены",ВидЦены.Ссылка);
КонецЕсли;
ОткрытьФорму("Справочник.Номенклатура.Форма.ИсторияЦенНоменклатуры", ПараметрыОткрытияФормы);
Иначе
СтандартнаяОбработка = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияИсторияЦенИзмененияНоменклатурыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "СсылкаПоказатьДинамику" Тогда
СтандартнаяОбработка = Ложь;
СформироватьОтчетПоДинамикеЦен();
Иначе
СтандартнаяОбработка = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ОтображатьВлияющиеЦеныНаКлиенте(НовоеЗначение)
ОтображатьВлияющиеЦены = НовоеЗначение;
ПереформироватьТаблицуЦен = Ложь;
Для Каждого ВидЦены Из ВыбранныеЦены Цикл
Если Не ВидЦены.Выбрана И ВидЦены.Влияет И Не ВидЦены.ЗапрещенныйВидЦены Тогда
ПереформироватьТаблицуЦен = Истина;
КонецЕсли;
КонецЦикла;
Если ПереформироватьТаблицуЦен Тогда
ПереформироватьТаблицуЦен(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьТекущиеИзменения(Команда)
ОтменитьИзменениеЦенНаСервере();
ОткрытьОкноОжиданияПрименитьНастройкиВФоне();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьГруппы()
Если Элементы.ГруппаИсторииИзмененияЦены.Скрыта() И Элементы.ГруппаПредупрежденияОРазныхВалютах.Скрыта() Тогда
Элементы.ГруппаИсторииИзмененияЦены.Доступность = Ложь;
Элементы.ГруппаПредупрежденияОРазныхВалютах.Доступность = Ложь;
ОтключитьОбработчикОжидания("УстановитьДоступностьГруппы");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ИмяРегламентногоЗадания()
Возврат ИнтеграцияСМаркетплейсамиСерверЛокализация.ИмяРегламентногоЗадания();
КонецФункции
&НаСервере
Функция ИмяФормыВыбора()
Возврат ИнтеграцияСМаркетплейсамиСерверЛокализация.ИмяФормыВыбора();
КонецФункции
&НаСервере
Функция ПолучитьПараметрыЗадания(ПараметрыЗагрузки)
ТаблицаВидовЦен = Новый ТаблицаЗначений;
ТаблицаВидовЦен.Колонки.Добавить("ВидЦены", Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"));
Для Каждого ЭлементКоллекции Из ПараметрыЗагрузки.ВидыЦен Цикл
СтрокаТаблицы = ТаблицаВидовЦен.Добавить();
СтрокаТаблицы.ВидЦены = ЭлементКоллекции;
КонецЦикла;
ПараметрыЗадания = Новый Структура;
ПараметрыЗадания.Вставить("ПоРасписанию", Ложь);
ПараметрыЗадания.Вставить("ТаблицаВидовЦен", ТаблицаВидовЦен);
Возврат ПараметрыЗадания;
КонецФункции
&НаСервере
Функция ВыборЗагружаемыхВидовЦенНаСервере(ПараметрыЗагрузки)
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Яндекс Маркет. Загрузка рекомендованных цен товаров с торговой площадки.'");
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.ПрерватьВыполнениеЕслиОшибка = Истина;
ИмяМетода = ИмяРегламентногоЗадания();
ДополнительныеПараметры = ПолучитьПараметрыЗадания(ПараметрыЗагрузки);
Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения,
ИмяМетода,
Неопределено,
ДополнительныеПараметры);
КонецФункции
&НаКлиенте
Процедура ОткрытьОкноОжиданияЗагрузкиРекомендованныхЦенВФоне(Знач ИмяПроцедуры)
Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ПараметрыОжидания.ВыводитьСообщения = Истина;
ПараметрыОжидания.ТекстСообщения = НСтр("ru='Идет загрузка рекомендуемых цен'");
ОповещениеОЗавершении = Новый ОписаниеОповещения(ИмяПроцедуры, ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатРасчетаДлительнойОперации, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьЦеныНаКлиентеЗавершение(ФоновоеЗадание, ДополнительныеПараметры = Неопределено) Экспорт
РезультатРасчетаДлительнойОперации = ФоновоеЗадание;
Если НЕ РезультатРасчетаДлительнойОперации = Неопределено Тогда
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ПрименитьНастройки();
ОткрытьОкноОжиданияПрименитьНастройкиВФоне();
ИначеЕсли РезультатРасчетаДлительнойОперации.Статус = "Ошибка" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатРасчетаДлительнойОперации.КраткоеПредставлениеОшибки);
КонецЕсли;
КонецЕсли;
РезультатРасчетаДлительнойОперации = Неопределено;
ИдентификаторЗадания = Неопределено;
КонецПроцедуры
&НаКлиенте
Процедура ВыборЗагружаемыхВидовЦенЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыЗагрузки = Результат;
Если ПараметрыЗагрузки <> Неопределено Тогда
ОчиститьСообщения();
Если ИмяРегламентногоЗадания() <> "" Тогда
РезультатРасчетаДлительнойОперации = ВыборЗагружаемыхВидовЦенНаСервере(ПараметрыЗагрузки);
ИдентификаторЗадания = РезультатРасчетаДлительнойОперации.ИдентификаторЗадания;
Если РезультатРасчетаДлительнойОперации.Статус = "Выполнено" Тогда
ЗагрузитьЦеныНаКлиентеЗавершение(РезультатРасчетаДлительнойОперации);
Иначе
ОткрытьОкноОжиданияЗагрузкиРекомендованныхЦенВФоне("ЗагрузитьЦеныНаКлиентеЗавершение")
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыборЗагружаемыхВидовЦенOzonЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыЗагрузки = Результат;
Если ПараметрыЗагрузки <> Неопределено Тогда
ОчиститьСообщения();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
Если ПараметрыЗагрузки.ТолькоВыделенныеСтроки Тогда
ВыделенныеСтроки = Элементы.ДеревоЦен.ВыделенныеСтроки;
Иначе
ВыделенныеСтроки = Новый Массив;
КонецЕсли;
ДлительнаяОперация = ЗагрузитьЦеныНаСервере(ВыделенныеСтроки, ПараметрыЗагрузки.ВидыЦен);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Неопределено, ПараметрыОжидания);
Состояние(НСтр("ru = 'Загрузка остатков'"),, НСтр("ru = 'Запущена фоновая загрузка цен товаров с маркетплейса.'"));
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗагрузитьЦеныНаСервере(ЗНАЧ ВыделенныеСтроки, ВидыЦен)
ТаблицаТоваров = ИнтеграцияСМаркетплейсамиСерверЛокализация.СведенияОВыгруженныхДанных();
Для каждого КлючЗаписи Из ВыделенныеСтроки Цикл
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.Номенклатура = КлючЗаписи.Номенклатура;
НоваяСтрока.Характеристика = КлючЗаписи.Характеристика;
НоваяСтрока.Упаковка = КлючЗаписи.Упаковка;
КонецЦикла;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияПроцедуры();
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Ozon. Загрузить цены товаров.'");
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ИмяМетода = "ИнтеграцияСМаркетплейсамиСерверЛокализация.ЗагрузитьЦеныТоваров";
Возврат ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, ИмяМетода, Неопределено, ТаблицаТоваров, ВидыЦен);
КонецФункции
&НаСервере
Процедура ОбновитьНастройкиВидовЦенНаСервере()
ВыбранныеСтроки = Новый Соответствие;
Для Каждого СтрокаВидовЦен Из ВыбранныеЦены Цикл
Если СтрокаВидовЦен.Выбрана
Или СтрокаВидовЦен.Редактировать Тогда
ВыбранныеСтроки.Вставить(СтрокаВидовЦен.Ссылка,
Новый Структура("Выбрана, Редактировать",
СтрокаВидовЦен.Выбрана, СтрокаВидовЦен.Редактировать)
);
КонецЕсли;
КонецЦикла;
УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(ЭтотОбъект);
Для Каждого СтрокаВидовЦен Из ВыбранныеЦены Цикл
ЗначенияКолонок = ВыбранныеСтроки.Получить(СтрокаВидовЦен.Ссылка);
Если ЗначенияКолонок <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(СтрокаВидовЦен, ЗначенияКолонок);
КонецЕсли;
КонецЦикла;
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановитьВидимостьКолонокРедактирования(ЭтотОбъект, Ложь);
КонецПроцедуры
#КонецОбласти
#КонецОбласти