#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем СтараяНоменклатура;
&НаКлиенте
Перем СтараяХарактеристика;
&НаКлиенте
Перем ИзмененаЦена;
&НаКлиенте
Перем СтрокаДобавлена;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
ФлагОткрытияФормы = Истина;
КодФормы = "УстановкаЦенНоменклатуры";
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
НомерВПределахДня = Объект.Дата - НачалоДня(Объект.Дата) + 1;
ИначеЕсли Не ЗначениеЗаполнено(Объект.Дата) Тогда
НомерВПределахДня = УстановкаЦенВызовСервера.РассчитатьНомерВПределахДня(ТекущаяДатаСеанса(), Объект.Ссылка);
Объект.Дата = УстановкаЦенКлиентСервер.РассчитатьДатуДокумента(ТекущаяДатаСеанса(), НомерВПределахДня);
Иначе
НомерВПределахДня = УстановкаЦенВызовСервера.РассчитатьНомерВПределахДня(Объект.Дата, Объект.Ссылка);
Объект.Дата = УстановкаЦенКлиентСервер.РассчитатьДатуДокумента(Объект.Дата, НомерВПределахДня);
КонецЕсли;
ТекущаяДата = ТекущаяДатаСеанса();
Элементы.НомерВПределахДня.Видимость = НомерВПределахДня <> 1;
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(Объект.Дата);
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Если Объект.Товары.Количество() = 0 И Объект.Товары2_5.Количество() <> 0 Тогда
ИспользуетсяЦенообразование25 = Истина;
ИначеЕсли Объект.Товары.Количество() <> 0 И Объект.Товары2_5.Количество() = 0 Тогда
ИспользуетсяЦенообразование25 = Ложь;
КонецЕсли;
КонецЕсли;
ИспользоватьЦеновыеГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьЦеновыеГруппы");
ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
ИспользоватьУпаковкиНоменклатуры = Истина;
ИспользоватьНесколькоВидовЦен = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен");
ИспользоватьСерииНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
ВариантГруппировки = Перечисления.ВариантыНавигацииВФормахНоменклатуры.ПоНоменклатуре;
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтотОбъект);
ПравоРегистрацииШтрихкодовНоменклатурыДоступно = ШтрихкодированиеНоменклатурыСервер.ПравоРегистрацииШтрихкодовНоменклатурыДоступно();
УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(ЭтотОбъект);
ЗаполнитьДокумент();
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
УстановитьДоступностьЭлементовПоСтатусуСервер();
КонецЕсли;
СохраненныеНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Документ.УстановкаЦенНоменклатуры", "Документ.УстановкаЦенНоменклатуры");
Если СохраненныеНастройки <> Неопределено Тогда
СохраненныеНастройки.Свойство("ПоказыватьПроцентНаценки", ПоказыватьПроцентНаценки);
СохраненныеНастройки.Свойство("ПоказыватьИзменениеЦены", ПоказыватьИзменениеЦены);
СохраненныеНастройки.Свойство("ПоказыватьДействующиеЦены", ПоказыватьДействующиеЦены);
СохраненныеНастройки.Свойство("ПоказыватьВалюту", ПоказыватьВалюту);
СохраненныеНастройки.Свойство("ПоказыватьЕдиницыИзмерения", ПоказыватьЕдиницыИзмерения);
СохраненныеНастройки.Свойство("ПоказыватьФормулы", ПоказыватьФормулы);
СохраненныеНастройки.Свойство("ИспользоватьОднуКолонкуДляКлючаЦен", ИспользоватьОднуКолонкуДляКлючаЦен);
СохраненныеНастройки.Свойство("ЗафиксироватьКолонкуНоменклатуры", ЗафиксироватьКолонкуНоменклатуры);
СохраненныеНастройки.Свойство("ОтображатьВлияющиеЦены", ОтображатьВлияющиеЦены);
СохраненныеНастройки.Свойство("РассчитыватьАвтоматически", РассчитыватьАвтоматически);
КонецЕсли;
ПоказыватьВалюту = ПоказыватьВалюту И ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВалют");
ЗафиксироватьКолонкуНоменклатуры(ЗафиксироватьКолонкуНоменклатуры);
НастроитьКолонкиКлючаЦен();
УстановитьВидимостьКолонокРедактирования(Истина);
УстановитьСостояние();
Если Не ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
Элементы.Основание.Видимость = Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.МаркетинговоеМероприятие) Тогда
Элементы.МаркетинговоеМероприятие.Видимость = Ложь;
КонецЕсли;
Если ВыбранныеЦены.Количество() = 1 Тогда
Элементы.ВидыЦенКомандаДалее.Видимость = Ложь;
Элементы.ВидыЦенКомандаНазад.Видимость = Ложь;
Элементы.ГруппаВидыЦен.Видимость = Ложь;
КонецЕсли;
ИмяДополнительнойКолонки = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов().ИмяКолонки;
УстановитьДоступностьКомандБуфераОбмена();
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
Элементы.ДеревоЦенИзменитьЦены.Видимость = ПравоДоступа("Изменение",Метаданные.Документы.УстановкаЦенНоменклатуры);
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтотОбъект, "СканерШтрихкода");
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
ПроверитьВерсиюЦенообразования(Объект.Ссылка, Объект.Товары.Количество(), Объект.Товары2_5.Количество());
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если НЕ ЗавершениеРаботы Тогда
СохранитьНастройкиФормыНаСервере();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если Источник = "ПодключаемоеОборудование"
И ИмяСобытия = "НеизвестныеШтрихкоды"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ДанныеШтрихкодов = Новый Массив;
Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
ОбработатьШтрихкоды(ДанныеШтрихкодов);
КонецЕсли;
Если ИмяСобытия = "ИзмененРеквизитЗависящийОтСтатуса"
И Параметр.УникальныйИдентификатор = УникальныйИдентификатор Тогда
Если Объект.Согласован Тогда
Объект.Согласован = Ложь;
КонецЕсли;
ПодключитьОбработчикОжидания("Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса", 0.1, Истина);
КонецЕсли;
Если ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда
УстановитьДоступностьКомандБуфераОбменаНаКлиенте();
КонецЕсли;
Если ИмяСобытия = "ЗагрузитьИзExcel"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
РезультатЗагрузки = ЗагрузитьИзExcelНаСервере(Параметр);
Если Не РезультатЗагрузки.Выполнено Тогда
ПоказатьПредупреждение(,РезультатЗагрузки.ОписаниеОшибки);
КонецЕсли;
КонецЕсли;
Если ИмяСобытия = "ИзменениеВидаЦен"
И Источник = ЭтотОбъект Тогда
ОбновитьНастройкиВидовЦенФрагмент(КодВозвратаДиалога.Да);
КонецЕсли;
РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ФлагОткрытияФормы = Истина Тогда
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
НомерВПределахДня = Объект.Дата - НачалоДня(Объект.Дата) + 1;
Иначе
НомерВПределахДня = УстановкаЦенВызовСервера.РассчитатьНомерВПределахДня(Объект.Дата, Объект.Ссылка);
Объект.Дата = УстановкаЦенКлиентСервер.РассчитатьДатуДокумента(Объект.Дата, НомерВПределахДня);
КонецЕсли;
АдресХранилищаКэшаДанных = "";
УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(ЭтотОбъект);
ЗаполнитьДокумент();
КонецЕсли;
УстановитьДоступностьЭлементовПоСтатусуСервер();
УстановитьВидимостьКолонокРедактирования(Истина);
МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ВыбранныеЦеныИзменены И ДеревоЦен.ПолучитьЭлементы().Количество() > 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Состав цен изменился. Необходимо перейти к установке цен.'"));
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Запись
Или ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
УстановкаЦенСервер.ПроверитьКорректностьЗаполненияДокумента(ЭтотОбъект, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если Модифицированность ИЛИ Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
УстановкаЦенСервер.ПоместитьВидыЦенВТабличнуюЧасть(ЭтотОбъект, ТекущийОбъект.ВидыЦен, Истина);
Данные = Новый Структура;
Данные.Вставить("Форма", ЭтотОбъект);
Данные.Вставить("Документы", Новый Массив);
Данные.Вставить("СохранятьБазовые", Ложь);
Данные.Документы.Добавить(ТекущийОбъект);
УстановкаЦенСервер.ПоместитьЦеныВТабличнуюЧасть(Данные);
КонецЕсли;
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
УстановитьДоступностьЭлементовПоСтатусуСервер();
УстановитьСостояние();
МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
Если ДеревоЦен.ПолучитьЭлементы().Количество() = 0 Тогда
ТекстОшибки = НСтр("ru='Не введено ни одной строки в список ""Товары"".'");
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
Объект.Ссылка,
"ДеревоЦен",
,
Отказ);
Иначе
Если Объект.Проведен Тогда
УстановкаЦенСервер.ПроверитьКорректностьЗаполненияДокумента(ЭтотОбъект, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
Если Настройки.Получить("ОтображениеТаблицыЦен") <> Неопределено Тогда
ОтображениеТаблицыЦен = Строка(Элементы.ДеревоЦен.Отображение);
Настройки["ОтображениеТаблицыЦен"] = ОтображениеТаблицыЦен;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
ОтображениеТаблицыЦен = Настройки.Получить("ОтображениеТаблицыЦен");
Если ЗначениеЗаполнено(ОтображениеТаблицыЦен) Тогда
Если ОтображениеТаблицыЦен = "Дерево" Тогда
Элементы.ДеревоЦен.Отображение = ОтображениеТаблицы.Дерево;
ИначеЕсли ОтображениеТаблицыЦен = "ИерархическийСписок" Тогда
Элементы.ДеревоЦен.Отображение = ОтображениеТаблицы.ИерархическийСписок;
ИначеЕсли ОтображениеТаблицыЦен = "Список" Тогда
Элементы.ДеревоЦен.Отображение = ОтображениеТаблицы.Список;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
НомерВПределахДня = УстановкаЦенВызовСервера.РассчитатьНомерВПределахДня(Объект.Дата, Объект.Ссылка);
Объект.Дата = УстановкаЦенКлиентСервер.РассчитатьДатуДокумента(Объект.Дата, НомерВПределахДня);
Элементы.НомерВПределахДня.Видимость = НомерВПределахДня <> 1;
ОбновитьСтарыеЦеныНоменклатурыНаСервере();
Если ДеревоЦен.ПолучитьЭлементы().Количество() = 0 Тогда
Возврат;
КонецЕсли;
НужноПересчитывать = Ложь;
Для Каждого ТекСтрока Из ВыбранныеЦены Цикл
Если ТекСтрока.Выбрана И
ТекСтрока.СпособЗаданияЦены <> ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.Вручную") Тогда
Для Каждого ВлияющаяЦена Из ТекСтрока.ВлияющиеЦены Цикл
НайденнаяСтрока = Неопределено;
Для Каждого ВыбраннаяЦена Из ВыбранныеЦены Цикл
Если ВыбраннаяЦена.Ссылка = ВлияющаяЦена.Значение Тогда
НайденнаяСтрока = ВыбраннаяЦена;
КонецЕсли;
КонецЦикла;
Если НайденнаяСтрока = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТекСтрока.Валюта <> НайденнаяСтрока.Валюта Тогда
НужноПересчитывать = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НужноПересчитывать Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не НужноПересчитывать Тогда
Возврат;
КонецЕсли;
ОтветНаВопрос = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ДатаПриИзмененииЗавершение", ЭтотОбъект),
НСтр("ru = 'В документе выбраны виды цены с валютой, отличной от влияющих видов цен. Пересчитать цены?'"),
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ПереформироватьТаблицуЦен(Истина);
КонецПроцедуры
&НаКлиенте
Процедура НомерВПределахДняПриИзменении(Элемент)
Объект.Дата = УстановкаЦенКлиентСервер.РассчитатьДатуДокумента(Объект.Дата, НомерВПределахДня);
ОбновитьСтарыеЦеныНоменклатурыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ТекущаяСтраница = Элементы.ГруппаУстановкаЦен Тогда
ПриПереходеКУстановкеЦен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(
Элемент.ТекстРедактирования,
ЭтотОбъект,
"Объект.Комментарий");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВыбранныеЦены
&НаКлиенте
Процедура ВыбранныеЦеныВыбранаПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВыбранныеЦены.ТекущиеДанные;
Если ТекущиеДанные.ЗапрещенныйВидЦены Тогда
ТекущиеДанные.Выбрана = Ложь;
ПодключитьОбработчикОжидания("СообщитьОНевозможностиВыбора", 0.2, Истина);
Возврат;
КонецЕсли;
УстановкаЦенКлиентСервер.ПроставитьФлагиВлияетЗависитНаКлиенте(ЭтотОбъект);
ВыбранныеЦеныИзменены = Истина;
ТекущиеДанные.Редактировать = ТекущиеДанные.Выбрана;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеЦеныСсылкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеЦеныРедактироватьПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВыбранныеЦены.ТекущиеДанные;
Если ТекущиеДанные.ЗапрещенныйВидЦены Тогда
ТекущиеДанные.Редактировать = Ложь;
ПодключитьОбработчикОжидания("СообщитьОНевозможностиВыбора", 0.2, Истина);
Возврат;
КонецЕсли;
ВыбранныеЦеныИзменены = Истина;
Если ТекущиеДанные.Редактировать И НЕ ТекущиеДанные.Выбрана = ТекущиеДанные.Редактировать Тогда
ТекущиеДанные.Выбрана = ТекущиеДанные.Редактировать;
ВыбранныеЦеныВыбранаПриИзменении(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеЦеныСсылкаОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеЦеныВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Если Поле = Элементы.ВыбранныеЦеныВлияющиеЦены Тогда
Если ТекущиеДанные.ВлияющиеЦены.Количество() > 0 Тогда
ПоказатьЗначение(Неопределено, ТекущиеДанные.ВлияющиеЦены);
КонецЕсли;
ИначеЕсли Поле = Элементы.ВыбранныеЦеныЗависимыеЦены Тогда
Если ТекущиеДанные.ЗависимыеЦены.Количество() > 0 Тогда
ПоказатьЗначение(Неопределено, ТекущиеДанные.ЗависимыеЦены);
КонецЕсли;
ИначеЕсли Поле = Элементы.ВыбранныеЦеныПараметры Тогда
РедактироватьНастройки(Команды["РедактироватьНастройки"]);
Иначе
ПараметрыОткрытияФормы = Новый Структура("Ключ", ТекущиеДанные.Ссылка);
ОткрытьФорму("Справочник.ВидыЦен.Форма.ФормаЭлемента", ПараметрыОткрытияФормы, ЭтотОбъект)
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоЦен
&НаКлиенте
Процедура ДеревоЦенПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
Если Не Копирование Тогда
ДобавитьНоменклатуру(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПередУдалением(Элемент, Отказ)
Если Элемент.ТекущиеДанные = Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПослеУдаления(Элемент)
ДеревоЦенПослеУдаленияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПриАктивизацииЯчейки(Элемент)
Если Элемент.ТекущиеДанные = Неопределено
Или Элемент.ТекущийЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
Если Элемент.ТекущийЭлемент.Имя = "ДеревоЦен" + "Характеристика" Тогда
Если Элемент.ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
Элемент.ТекущийЭлемент.ТолькоПросмотр = Истина;
Иначе
Элемент.ТекущийЭлемент.ТолькоПросмотр = Ложь;
КонецЕсли;
ИначеЕсли Элемент.ТекущийЭлемент.Имя = "ДеревоЦен" + "Номенклатура" Тогда
Если Элемент.ТекущиеДанные.ПолучитьРодителя() <> Неопределено Тогда
Элемент.ТекущийЭлемент.ТолькоПросмотр = Истина;
Иначе
Элемент.ТекущийЭлемент.ТолькоПросмотр = Ложь;
КонецЕсли;
КонецЕсли;
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенУпаковкаПриИзмененииКлиент(Элемент)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "Упаковка" + "ВидЦены", "ЗапретРедактирования" + "ВидЦены");
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ТекущиеДанные.ПолучитьИдентификатор());
Если ТекущаяСтрока[ИмяКолонкиЗапретаРедактирования] Тогда
Возврат;
КонецЕсли;
Если ТекущаяСтрока.ПолучитьРодителя() = Неопределено Тогда
ЭлементыХарактеристики = ТекущаяСтрока.ПолучитьЭлементы();
ТекущееЗначение = ТекущиеДанные[ИмяТекущейКолонки];
Для Каждого ЭлементХарактеристика Из ЭлементыХарактеристики Цикл
Если ЭлементХарактеристика[ИмяКолонкиЗапретаРедактирования] Тогда
Продолжить;
КонецЕсли;
Если ЭлементХарактеристика[ИмяТекущейКолонки] <> ТекущееЗначение Тогда
ЭлементХарактеристика[ИмяТекущейКолонки] = ТекущееЗначение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ДеревоЦенУпаковкаПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор(), ИмяТекущейКолонки);
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенУпаковкаПриИзмененииНаСервере(Идентификатор, ИмяТекущейКолонки)
УстановкаЦенСервер.ДеревоЦенУпаковкаВалютаПриИзменении(ЭтотОбъект, Идентификатор, ИмяТекущейКолонки);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенВалютаПриИзмененииКлиент(Элемент)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "Валюта" + "ВидЦены", "ЗапретРедактирования" + "ВидЦены");
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ТекущиеДанные.ПолучитьИдентификатор());
Если ТекущаяСтрока[ИмяКолонкиЗапретаРедактирования] Тогда
Возврат;
КонецЕсли;
Если ТекущаяСтрока.ПолучитьРодителя() = Неопределено Тогда
ЭлементыХарактеристики = ТекущаяСтрока.ПолучитьЭлементы();
ТекущееЗначение = ТекущиеДанные[ИмяТекущейКолонки];
Для Каждого ЭлементХарактеристика Из ЭлементыХарактеристики Цикл
Если ЭлементХарактеристика[ИмяКолонкиЗапретаРедактирования] Тогда
Продолжить;
КонецЕсли;
Если ЭлементХарактеристика[ИмяТекущейКолонки] <> ТекущееЗначение Тогда
ЭлементХарактеристика[ИмяТекущейКолонки] = ТекущееЗначение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ДеревоЦенВалютаПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор(), ИмяТекущейКолонки);
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенВалютаПриИзмененииНаСервере(Идентификатор, ИмяТекущейКолонки)
УстановкаЦенСервер.ДеревоЦенУпаковкаВалютаПриИзменении(ЭтотОбъект, Идентификатор, ИмяТекущейКолонки, "Валюта");
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ДеревоЦенНоменклатураПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор());
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенНоменклатураПриИзмененииНаСервере(ИдентификаторСтроки)
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ЗначениеЗаполнено(ТекущаяСтрока.Номенклатура) Тогда
ТекущаяСтрока.ЦеноваяГруппа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока.Номенклатура, "ЦеноваяГруппа");
КонецЕсли;
УстановитьВалютыВидовЦен(ТекущаяСтрока, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПривязываютсяДинамически
&НаКлиенте
Процедура Подключаемый_ДеревоЦенЦенаПриИзменении(Элемент)
ИзмененаЦена = Истина;
ДеревоЦенЦенаПриИзмененииКлиент(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенУпаковкаПриИзменении(Элемент)
ДеревоЦенУпаковкаПриИзмененииКлиент(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенВалютаПриИзменении(Элемент)
ДеревоЦенВалютаПриИзмененииКлиент(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если СтрокаДобавлена И ОтменаРедактирования Тогда
ДеревоЦен.ПолучитьЭлементы().Удалить(ТекущиеДанные);
СтрокаДобавлена = Ложь;
Возврат;
КонецЕсли;
Если ТекущиеДанные.Номенклатура <> СтараяНоменклатура Тогда
ЭлементыНоменклатура = ДеревоЦен.ПолучитьЭлементы();
Для Каждого ЭлементНоменклатура Из ЭлементыНоменклатура Цикл
Если ЭлементНоменклатура.Номенклатура = ТекущиеДанные.Номенклатура Тогда
Если ТекущиеДанные.ПолучитьИдентификатор() <> ЭлементНоменклатура.ПолучитьИдентификатор() Тогда
Если Не ОтменаРедактирования Тогда
Отказ = Истина;
ОчиститьСообщения();
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Такая номенклатура уже введена.'"),
Объект.Ссылка,
"ДеревоЦен");
Иначе
ТекущиеДанные.Номенклатура = СтараяНоменклатура;
ТекущиеДанные.Характеристика = СтараяХарактеристика;
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ДеревоЦенНоменклатураПриИзмененииСервер(
Элементы.ДеревоЦен.ТекущиеДанные.ПолучитьИдентификатор(),
Не ИзмененаЦена);
СтараяНоменклатура = ТекущиеДанные.Номенклатура;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущиеДанные.Номенклатура) Тогда
Если Не ОтменаРедактирования Тогда
Отказ = Истина;
ОчиститьСообщения();
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Номенклатура не выбрана.'"),
Объект.Ссылка,
"ДеревоЦен");
Иначе
ТекущиеДанные.Номенклатура = СтараяНоменклатура;
ТекущиеДанные.Характеристика = СтараяХарактеристика;
КонецЕсли;
КонецЕсли;
Если ТекущиеДанные.Характеристика <> СтараяХарактеристика Тогда
ЭлементыХарактеристики = ДеревоЦен.НайтиПоИдентификатору(Элементы.ДеревоЦен.ТекущаяСтрока);
Если ЭлементыХарактеристики.ПолучитьРодителя() = Неопределено Тогда
ЭлементыХарактеристики = ЭлементыХарактеристики.ПолучитьЭлементы();
Иначе
ЭлементыХарактеристики = ЭлементыХарактеристики.ПолучитьРодителя().ПолучитьЭлементы();
КонецЕсли;
Для Каждого ЭлементХарактеристика Из ЭлементыХарактеристики Цикл
Если ЭлементХарактеристика.Характеристика = ТекущиеДанные.Характеристика Тогда
Если ТекущиеДанные.ПолучитьИдентификатор() <> ЭлементХарактеристика.ПолучитьИдентификатор() Тогда
Если Не ОтменаРедактирования Тогда
Отказ = Истина;
ОчиститьСообщения();
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Такая номенклатура уже введена.'"),
Объект.Ссылка,
"ДеревоЦен");
Иначе
ТекущиеДанные.Номенклатура = СтараяНоменклатура;
ТекущиеДанные.Характеристика = СтараяХарактеристика;
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ДеревоЦенХарактеристикаПриИзмененииСервер(
Элементы.ДеревоЦен.ТекущиеДанные.ПолучитьИдентификатор(),
Не ИзмененаЦена);
КонецЕсли;
Если Элементы.ДеревоЦен.ТекущийЭлемент.Имя = Элементы.ДеревоЦенНоменклатура.Имя Тогда
УстановитьПометкуИзмененныхФормулСервер();
КонецЕсли;
СтрокаДобавлена = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
СтараяНоменклатура = ТекущиеДанные.Номенклатура;
СтараяХарактеристика = ТекущиеДанные.Характеристика;
ИзмененаЦена = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.УстановкаЦенНоменклатурыПрисоединенныеФайлы") Тогда
УстановкаЦенКлиент.ЗагрузитьИзExcel(ЭтотОбъект, ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенФормулаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
ДополнительныеПараметры = новый Структура("ИмяЭлементаВозврата", ИмяТекущейКолонки);
ОткрытьФорму("ОбщаяФорма.КонструкторФормул", ПолучитьПараметрыФормыРедактированияЦены(Элемент.Имя), Элемент,,,, Новый ОписаниеОповещения("КонструкторФормулЗавершение", ЭтотОбъект,ДополнительныеПараметры), РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры
&НаКлиенте
Процедура КонструкторФормулЗавершение(Результат, ДополнительныеПараметры) Экспорт
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если Результат <> Неопределено Тогда
ЗначениеИзмененияСтрока = Результат;
ТекущиеДанные[ДополнительныеПараметры.ИмяЭлементаВозврата] = Результат;
Подключаемый_ДеревоЦенФормулаПриИзменении(Элементы["ДеревоЦен" + ДополнительныеПараметры.ИмяЭлементаВозврата]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДеревоЦенФормулаПриИзменении(Элемент)
ОчиститьСообщения();
ИмяКолонкиФормула = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
ТекстФормулы = Элементы.ДеревоЦен.ТекущиеДанные[ИмяКолонкиФормула];
Операнды = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ТекстФормулы);
ТипРезультата = Новый ОписаниеТипов("Число");
ПараметрыПроверкиФормулы = РаботаСФормуламиКлиент.ПараметрыПроверкиФормулы();
Если РаботаСФормуламиКлиент.ПроверитьФормулу(ТекстФормулы,
Операнды,
ТипРезультата,
ПараметрыПроверкиФормулы) Тогда
ИзмененаЦена = Истина;
ДеревоЦенЦенаПриИзмененииКлиент(Элемент);
МассивВидовЦен = Новый Массив();
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(Элемент.имя);
Если ВидЦены <> Неопределено Тогда
МассивВидовЦен.Добавить(ВидЦены.ссылка);
ПараметрыРасчета = Новый Структура();
ПараметрыРасчета.Вставить("ЗагрузкаСтарыхЦен", Ложь);
ПараметрыРасчета.Вставить("ОкруглениеРучныхЦен", Ложь);
ПараметрыРасчета.Вставить("ВидыЦен", МассивВидовЦен);
ПараметрыРасчета.Вставить("ТолькоВыделенныеСтроки", Истина);
ПараметрыРасчета.Вставить("ТолькоНезаполненные", Ложь);
ПараметрыРасчета.Вставить("РасчетПоФормулам", Истина);
РассчитатьЦеныНаСервере(ПараметрыРасчета);
КонецЕсли;
УстановитьВидимостьКолонокРедактирования(Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаПроцентНаКлиентеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
ИзменитьЦеныНаПроцентНаСервере(ПараметрыРасчета);
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
ОбщегоНазначенияУТКлиент.Записать(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНовыйВариант(Команда)
ИзменитьЦеныНаНаКлиентеПоТипуВызова();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаНаКлиентеПоТипуВызова(ВидЦены = Неопределено)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен", Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен", Истина);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам", Ложь);
ПараметрыЗаполнения.Вставить("УчитыватьРазностьВалют",Истина);
МассивВалютПоВидамЦен = ЗаполнитьМассивВалютПоВидамЦен();
Если МассивВалютПоВидамЦен.Количество()>0 Тогда
ПараметрыЗаполнения.Вставить("МассивВалютПоВидамЦен",МассивВалютПоВидамЦен);
КонецЕсли;
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаИзмененияЦенНовыйВариант",
ПараметрыОткрытия, ЭтотОбъект,,,, Новый ОписаниеОповещения("ИзменитьЦеныНовыйВариантНаКлиентеЗавершение",
ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
ИзменитьЦеныНаСервере(ПараметрыРасчета);
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьТоварыПоЦеновойГруппе(Команда)
ВыбранноеЗначение = Неопределено;
ОткрытьФорму(
"Справочник.ЦеновыеГруппы.ФормаВыбора",
Новый Структура("МножественныйВыбор", Истина),
ЭтотОбъект,,,, Новый ОписаниеОповещения("ДобавитьТоварыПоЦеновойГруппеЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьТоварыПоЦеновойГруппеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыбранноеЗначение = Результат;
Если ВыбранноеЗначение <> Неопределено Тогда
ДобавитьНоменклатуруЦеновойГруппыНаСервере(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьТоварыПоОтбору(Команда)
ВариантыРасчетаЦеныНабора = Новый Массив;
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка"));
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоДолям"));
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоЦенам"));
ПараметрыФормы = Новый Структура("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыФормы.Вставить("ВариантыРасчетаЦеныНабора", ВариантыРасчетаЦеныНабора);
ПараметрыФормы.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
АдресВоВременномХранилище = Неопределено;
ОткрытьФорму(
"Обработка.ПодборТоваровПоОтбору.Форма.Форма",
ПараметрыФормы, ЭтотОбъект,,,,
Новый ОписаниеОповещения("ДобавитьТоварыПоОтборуЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьТоварыПоОтборуЗавершение(Результат, ДополнительныеПараметры) Экспорт
АдресВоВременномХранилище = Результат;
Если ЗначениеЗаполнено(АдресВоВременномХранилище) Тогда
ДобавитьТоварыПоОтборуНаСервере(АдресВоВременномХранилище);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьТоварыБезИзмененныхЦен(Команда)
УдалитьТоварыБезИзмененныхЦенНаСервере();
КонецПроцедуры
&НаСервере
Процедура УдалитьТоварыБезИзмененныхЦенНаСервере()
УстановкаЦенСервер.УдалитьТоварыБезИзмененныхЦен(ЭтотОбъект, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДействующиеЦены(Команда)
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен", Истина);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Ложь);
ПараметрыОткрытия = ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения);
Если ПараметрыОткрытия.РучныеВидыЦен.Количество() = 0 Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru='Не выбраны виды цен, назначаемые вручную.'"));
Возврат;
КонецЕсли;
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораПараметровРасчета",
ПараметрыОткрытия,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ЗагрузитьДействующиеЦеныЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДействующиеЦеныЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
РассчитатьЦеныНаСервере(ПараметрыРасчета);
КонецЕсли;
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецПроцедуры
&НаКлиенте
Процедура ОкруглитьРучныеЦеныЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
РассчитатьЦеныНаСервере(ПараметрыРасчета);
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКРедактированиюСпискаВидовЦен(Команда)
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаВидыЦен;
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКУстановкеЦен(Команда)
ОчиститьСообщения();
Если Не ЭтотОбъект.ТолькоПросмотр
И УстановкаЦенКлиентСервер.НеВыбраныЗависимыеЦены(ЭтотОбъект) Тогда
Ответ = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ПерейтиКУстановкеЦенЗавершение", ЭтотОбъект), НСтр("ru = 'Найдены зависимые от выбранных виды цен. Выбрать все зависимые цены?'"), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ПерейтиКУстановкеЦенФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКУстановкеЦенЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Да Тогда
УстановкаЦенКлиентСервер.ВыбратьВсеЗависимыеЦены(ЭтотОбъект);
УстановкаЦенКлиентСервер.ВыбратьВсеВлияющиеЦены(ЭтотОбъект);
КонецЕсли;
ПерейтиКУстановкеЦенФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКУстановкеЦенФрагмент()
Если Не ЭтотОбъект.ТолькоПросмотр
И Не УстановкаЦенКлиент.ЗаполненыОбязательныеПараметрыСхемКомпоновкиДанных(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаУстановкаЦен;
ПриПереходеКУстановкеЦен();
КонецПроцедуры
&НаКлиенте
Процедура ПровестиДокумент(Команда)
ОбщегоНазначенияУТКлиент.Провести(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Рассчитать(Команда)
Если Не УстановкаЦенКлиент.ЗаполненыОбязательныеПараметрыСхемКомпоновкиДанных(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
ПараметрыРасчета = Неопределено;
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЗагрузкаСтарыхЦен",Ложь);
ПараметрыЗаполнения.Вставить("ОкруглениеРучныхЦен",Ложь);
ПараметрыЗаполнения.Вставить("РасчетПоИБ", Истина);
ПараметрыЗаполнения.Вставить("РасчетПоФормулам",Истина);
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораПараметровРасчета",
ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения),
ЭтотОбъект,,,, Новый ОписаниеОповещения("РассчитатьЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
РассчитатьЦеныНаСервере(ПараметрыРасчета);
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВсеВидыЦен(Команда)
Для Каждого СтрокаТаблицы Из ВыбранныеЦены Цикл
Если Не СтрокаТаблицы.Выбрана И Не СтрокаТаблицы.ЗапрещенныйВидЦены Тогда
СтрокаТаблицы.Выбрана = Истина;
СтрокаТаблицы.Редактировать = Истина;
КонецЕсли;
КонецЦикла;
ВыбранныеЦеныИзменены = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьВсеВидыЦен(Команда)
Для Каждого СтрокаТаблицы Из ВыбранныеЦены Цикл
Если СтрокаТаблицы.Выбрана И Не СтрокаТаблицы.ЗапрещенныйВидЦены Тогда
СтрокаТаблицы.Выбрана = Ложь;
СтрокаТаблицы.Редактировать = Ложь;
КонецЕсли;
КонецЦикла;
ВыбранныеЦеныИзменены = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВсеЗависимые(Команда)
УстановкаЦенКлиентСервер.ВыбратьВсеЗависимыеЦены(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВсеВлияющие(Команда)
УстановкаЦенКлиентСервер.ВыбратьВсеВлияющиеЦены(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция ДополнительныеПараметрыОбработкиЗавершения()
Результат = Новый Структура;
Результат.Вставить("ТекущиеДанные");
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ДобавитьНоменклатуру(Команда)
Элементы.ДеревоЦен.ТекущийЭлемент = Элементы.ДеревоЦенНоменклатура;
НоваяСтрока = ДеревоЦен.ПолучитьЭлементы().Добавить();
Элементы.ДеревоЦен.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
Если Не Элементы.ДеревоЦен.ДанныеСтроки(Элементы.ДеревоЦен.ТекущаяСтрока) = Элементы.ДеревоЦен.ТекущиеДанные Тогда
ДеревоЦен.ПолучитьЭлементы().Удалить(ДеревоЦен.ПолучитьЭлементы().Индекс(НоваяСтрока));
ОчиститьСообщения();
ТекущиеДанные = Элементы.ВыбранныеЦены.ТекущиеДанные;
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Перед добавлением строки необходимо отменить поиск.'"),
Объект.Ссылка,
"ДеревоЦенДобавитьНоменклатуру");
Возврат;
КонецЕсли;
УстановкаЦенКлиентСервер.ЗаполнитьИндексКартинкиСтрокиДереваЦен(НоваяСтрока);
Элементы.ДеревоЦен.ИзменитьСтроку();
СтрокаДобавлена = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)
#Если ВебКлиент Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Выгрузка в Excel недоступна в Web-клиенте.'"));
#Иначе
Оповещение = Новый ОписаниеОповещения("ВыгрузитьВExcelЗавершениеПодключенияРасширения", ЭтотОбъект);
ТекстСообщения = НСтр("ru = 'Для выгрузки в Excel необходимо установить расширение работы с файлами.'");
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения);
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcelЗавершениеПодключенияРасширения(Результат, ДополнительныеПараметры) Экспорт
Если Модифицированность Тогда
ПоказатьВопрос(
Новый ОписаниеОповещения("ВыгрузитьВExcelПослеВопроса", ЭтотОбъект),
НСтр("ru = 'Перед выгрузкой документ необходимо записать. Выполнить запись документа и продолжить?'"),
РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ВыгрузитьВExcelФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcelПослеВопроса(РезультатВопроса, ДополнительныеПараметры) Экспорт
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Да Тогда
Записать();
Иначе
Возврат;
КонецЕсли;
ВыгрузитьВExcelФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcelФрагмент()
МассивДокументов = Новый Массив;
МассивДокументов.Добавить(Объект.Ссылка);
ПараметрыФормы = Новый Структура("МассивДокументов, УникальныйИдентификатор", МассивДокументов, УникальныйИдентификатор);
ПараметрыПечати = Неопределено;
ОткрытьФорму(
"Документ.УстановкаЦенНоменклатуры.Форма.ФормаНастройкиПечатнойФормыУстановкиЦенНоменклатуры",
ПараметрыФормы,,,,, Новый ОписаниеОповещения("ВыгрузитьВExcelЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВExcelЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыПечати = Результат;
Если ПараметрыПечати <> Неопределено Тогда
Если ПараметрыПечати.КоличествоВыбраныхВидовЦен = 0 Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Не выбраны виды цен для выгрузки в Excel.'"));
Возврат;
КонецЕсли;
ПараметрыПечати.ВыводитьШапку = Ложь;
УстановкаЦенКлиент.ВыгрузитьВExcel(ЭтотОбъект, ПараметрыПечати);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзExcel(Команда)
#Если ВебКлиент Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Загрузка из Excel недоступна в Web-клиенте.'"));
#Иначе
Оповещение = Новый ОписаниеОповещения("ЗагрузитьИзExcelЗавершениеПодключенияРасширения", ЭтотОбъект);
ТекстСообщения = НСтр("ru = 'Для загрузки из Excel необходимо установить расширение работы с файлами.'");
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения);
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзExcelЗавершениеПодключенияРасширения(Результат, ДополнительныеПараметры) Экспорт
РаботаСФайламиКлиент.ОткрытьФормуВыбораФайлов(Объект.Ссылка, Элементы.ДеревоЦен);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
ОчиститьСообщения();
Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект);
ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
ОбработатьШтрихкоды(ДанныхШтрихкода);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДанныеИзТСД(Команда)
ОчиститьСообщения();
МенеджерОборудованияКлиент.НачатьЗагрузкуДанныеИзТСД(
Новый ОписаниеОповещения("ЗагрузитьИзТСДЗавершение", ЭтотОбъект),
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзТСДЗавершение(Результат, Параметры) Экспорт
Если Результат.Результат Тогда
ОбработатьШтрихкоды(Результат.ТаблицаТоваров);
Иначе
МенеджерОборудованияУТКлиент.СообщитьОбОшибке(Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьТовары(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени("Документ.УстановкаЦенНоменклатуры.ФормаДокумента.Команда.ПодобратьТовары"
,
Истина);
ВариантыРасчетаЦеныНабора = Новый Массив;
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка"));
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоДолям"));
ВариантыРасчетаЦеныНабора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоЦенам"));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимПодбораДляДокументовЦенообразования", Истина);
ПараметрыФормы.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
ПараметрыФормы.Вставить("РежимПодбораБезКоличественныхПараметров", Истина);
ПараметрыФормы.Вставить("РежимПодбораБезСуммовыхПараметров", Истина);
ПараметрыФормы.Вставить("СкрыватьКолонкуВидЦены", Истина);
ПараметрыФормы.Вставить("СкрыватьКомандуЦеныНоменклатуры", Истина);
ПараметрыФормы.Вставить("СкрыватьКомандуОстаткиНаСкладах", Истина);
ПараметрыФормы.Вставить("СкрыватьКнопкуЗапрашиватьКоличество", Истина);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Подбор товаров'"));
ПараметрыФормы.Вставить("Дата", Объект.Дата);
ПараметрыФормы.Вставить("НеРазбиватьНаборыПоКомплектующим", Истина);
ПараметрыФормы.Вставить("ОтборПоВариантуРасчетаЦенНаборов", ВариантыРасчетаЦеныНабора);
ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОтчетПоДинамикеЦен(Команда)
Если ИспользуетсяЦенообразование25 Тогда
СписокНоменклатуры = Новый СписокЗначений;
СписокХарактеристикЦО = Новый СписокЗначений;
СписокСерийЦО = Новый СписокЗначений;
СписокУпаковокЦО = Новый СписокЗначений;
Для Каждого ИдентификаторСтрокиДереваЦен Из Элементы.ДеревоЦен.ВыделенныеСтроки Цикл
СтрокаТЧ = ДеревоЦен.НайтиПоИдентификатору(ИдентификаторСтрокиДереваЦен);
СписокНоменклатуры.Добавить(СтрокаТЧ.Номенклатура);
Если ЗначениеЗаполнено(СтрокаТЧ.ХарактеристикаЦО) Тогда
Если СписокХарактеристикЦО.НайтиПоЗначению(СтрокаТЧ.ХарактеристикаЦО) = Неопределено Тогда
СписокХарактеристикЦО.Добавить(СтрокаТЧ.ХарактеристикаЦО);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.СерияЦО) Тогда
Если СписокСерийЦО.НайтиПоЗначению(СтрокаТЧ.СерияЦО) = Неопределено Тогда
СписокСерийЦО.Добавить(СтрокаТЧ.СерияЦО);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.УпаковкаЦО) Тогда
Если СписокСерийЦО.НайтиПоЗначению(СтрокаТЧ.УпаковкаЦО) = Неопределено Тогда
СписокУпаковокЦО.Добавить(СтрокаТЧ.УпаковкаЦО);
КонецЕсли;
КонецЕсли;
КонецЦикла;
СписокВидовЦен = Новый СписокЗначений;
Для Каждого СтрокаВидЦены Из УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ЭтотОбъект) Цикл
СписокВидовЦен.Добавить(СтрокаВидЦены.Ссылка, СтрокаВидЦены.Наименование);
КонецЦикла;
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", СписокНоменклатуры);
Если СписокХарактеристикЦО.Количество() Тогда
Отбор.Вставить("ХарактеристикаЦО", СписокХарактеристикЦО);
КонецЕсли;
Если СписокСерийЦО.Количество() Тогда
Отбор.Вставить("СерияЦО", СписокСерийЦО);
КонецЕсли;
Если СписокУпаковокЦО.Количество() Тогда
Отбор.Вставить("УпаковкаЦО", СписокУпаковокЦО);
КонецЕсли;
Отбор.Вставить("ВидЦены", СписокВидовЦен);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("КлючВарианта", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ДинамикаИзмененияЦенНоменклатуры2_5.Форма",
ПараметрыФормы,
ЭтотОбъект,
Новый УникальныйИдентификатор);
Иначе
СписокНоменклатуры = Новый СписокЗначений;
СписокХарактеристик = Новый СписокЗначений;
Для Каждого ИдентификаторСтрокиДереваЦен Из Элементы.ДеревоЦен.ВыделенныеСтроки Цикл
СтрокаТЧ = ДеревоЦен.НайтиПоИдентификатору(ИдентификаторСтрокиДереваЦен);
СписокНоменклатуры.Добавить(СтрокаТЧ.Номенклатура);
Если СтрокаТЧ.ХарактеристикиИспользуются Тогда
Если СтрокаТЧ.ПолучитьРодителя() = Неопределено Тогда
Для Каждого СтрокаХарактеристика Из СтрокаТЧ.ПолучитьЭлементы() Цикл
Если СписокХарактеристик.НайтиПоЗначению(СтрокаХарактеристика.Характеристика) = Неопределено Тогда
СписокХарактеристик.Добавить(СтрокаХарактеристика.Характеристика);
КонецЕсли;
КонецЦикла;
Иначе
Если СписокХарактеристик.НайтиПоЗначению(СтрокаТЧ.Характеристика) = Неопределено Тогда
СписокХарактеристик.Добавить(СтрокаТЧ.Характеристика);
КонецЕсли;
КонецЕсли;
Иначе
Если СписокХарактеристик.НайтиПоЗначению(
ПредопределенноеЗначение("Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка")) = Неопределено Тогда
СписокХарактеристик.Добавить(ПредопределенноеЗначение("Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка"));
КонецЕсли;
КонецЕсли;
КонецЦикла;
СписокВидовЦен = Новый СписокЗначений;
Для Каждого СтрокаВидЦены Из УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ЭтотОбъект) Цикл
СписокВидовЦен.Добавить(СтрокаВидЦены.Ссылка, СтрокаВидЦены.Наименование);
КонецЦикла;
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", СписокНоменклатуры);
Отбор.Вставить("Характеристика", СписокХарактеристик);
Отбор.Вставить("ВидЦены", СписокВидовЦен);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("КлючВарианта", "ДинамикаИзмененияЦенПоНоменклатуреДиаграмма");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ДинамикаИзмененияЦенНоменклатуры.Форма",
ПараметрыФормы,
ЭтотОбъект,
Новый УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНастройки(Команда)
ТекущиеДанные = Элементы.ВыбранныеЦены.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Редактировать настройки невозможно. Не выбран вид цены'"));
Возврат;
КонецЕсли;
Если Объект.Согласован Тогда
Возврат;
КонецЕсли;
Если Не ТекущиеДанные.Выбрана Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Редактировать настройки схемы компоновки можно только для выбранных видов цен'"));
Возврат;
КонецЕсли;
ЗаголовокФормыНастройкиСхемыКомпоновкиДанных = НСтр("ru = 'Настройка параметров для вида цены ""%1""'");
ЗаголовокФормыНастройкиСхемыКомпоновкиДанных = СтрЗаменить(ЗаголовокФормыНастройкиСхемыКомпоновкиДанных, "%1", ТекущиеДанные.Наименование);
АдресНастроекСхемыКомпоновкиДанных = УстановкаЦенВызовСервера.АдресНастроекКомпоновкиДанныхДляВидаЦены(
ТекущиеДанные.Ссылка,
АдресХранилищаНастройкиКомпоновкиДанных,
УникальныйИдентификатор);
АдресХранилищаНастройкиКомпоновщика = Неопределено;
АдресНастроекСхемыКомпоновкиДанных = ?(АдресНастроекСхемыКомпоновкиДанных <> Неопределено,
АдресНастроекСхемыКомпоновкиДанных,
ТекущиеДанные.АдресНастроекСхемыКомпоновкиДанных);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("НеПомещатьНастройкиВСхемуКомпоновкиДанных", Истина);
ПараметрыФормы.Вставить("НеРедактироватьСхемуКомпоновкиДанных", Истина);
ПараметрыФормы.Вставить("НеНастраиватьУсловноеОформление", Истина);
ПараметрыФормы.Вставить("НеНастраиватьВыбор", Истина);
ПараметрыФормы.Вставить("НеНастраиватьПорядок", Истина);
ПараметрыФормы.Вставить("АдресСхемыКомпоновкиДанных", ТекущиеДанные.АдресСхемыКомпоновкиДанных);
ПараметрыФормы.Вставить("АдресНастроекКомпоновкиДанных", АдресНастроекСхемыКомпоновкиДанных);
ПараметрыФормы.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыФормы.Вставить("Заголовок", ЗаголовокФормыНастройкиСхемыКомпоновкиДанных);
ПараметрыФормы.Вставить("ПроцедураПроверкиСхемыКомпоновкиДанных", "Ценообразование.ПроверкаКорректностиСхемыВидовЦен");
ДополнительныеПараметры = ДополнительныеПараметрыОбработкиЗавершения();
ДополнительныеПараметры.ТекущиеДанные = ТекущиеДанные;
Оповещение = Новый ОписаниеОповещения("РедактироватьНастройкиЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РежимОткрытия = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ОткрытьФорму("ОбщаяФорма.УпрощеннаяНастройкаСхемыКомпоновкиДанных", ПараметрыФормы,,,,, Оповещение, РежимОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные;
АдресХранилищаНастройкиКомпоновщика = Результат;
Если АдресХранилищаНастройкиКомпоновщика <> Неопределено Тогда
ВыбранныеЦеныИзменены = Истина;
СтруктураДанных = УстановкаЦенВызовСервера.УстановитьНастройкиКомпоновкиДанныхДляВидаЦены(
ТекущиеДанные.Ссылка,
АдресХранилищаНастройкиКомпоновщика,
АдресХранилищаНастройкиКомпоновкиДанных,
АдресХранилищаПараметровСхемКомпоновкиПоВидамЦен);
ТекущиеДанные.Параметры = СтруктураДанных.ОписаниеПараметров;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВосстановитьНастройкиПоУмолчанию(Команда)
ТекущиеДанные = Элементы.ВыбранныеЦены.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Редактировать настройки невозможно. Не выбран вид цены'"));
Возврат;
КонецЕсли;
Если Объект.Согласован Тогда
Возврат;
КонецЕсли;
Если Не ТекущиеДанные.Выбрана Тогда
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Редактировать настройки схемы компоновки можно только для выбранных видов цен.'"));
Возврат;
КонецЕсли;
АдресХранилищаНастройкиКомпоновщика = УстановкаЦенВызовСервера.НастройкиСхемыКомпоновкиДанныхПоУмолчанию(
ТекущиеДанные.Ссылка, ТекущиеДанные.АдресСхемыКомпоновкиДанных, УникальныйИдентификатор);
Если АдресХранилищаНастройкиКомпоновщика <> Неопределено Тогда
ВыбранныеЦеныИзменены = Истина;
СтруктураДанных = УстановкаЦенВызовСервера.УстановитьНастройкиКомпоновкиДанныхДляВидаЦены(
ТекущиеДанные.Ссылка,
АдресХранилищаНастройкиКомпоновщика,
АдресХранилищаНастройкиКомпоновкиДанных,
АдресХранилищаПараметровСхемКомпоновкиПоВидамЦен);
ТекущиеДанные.Параметры = СтруктураДанных.ОписаниеПараметров;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТоварыПоОтборуВидовЦен(Команда)
ДобавитьТоварыПоОтборамСКДНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура СортироватьПоНаименованиюНоменклатуры(Команда)
СортироватьНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура СортироватьПоНаименованиюНоменклатурыСУчетомИерархииВидов(Команда)
СортироватьНаСервере("ПоНаименованиюНоменклатурыИерархияВидовНоменклатуры");
КонецПроцедуры
&НаКлиенте
Процедура СортироватьПоНаименованиюНоменклатурыСУчетомИерархииГрупп(Команда)
СортироватьНаСервере("ПоНаименованиюНоменклатурыИерархияГрупп");
КонецПроцедуры
&НаКлиенте
Процедура ВставитьСтроки(Команда)
КоличествоТоваровДоВставки = ПолучитьКоличествоСтрокДереваЦен();
ВидыЦен = УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект);
Если ВидыЦен.Количество() > 1 Тогда
ПараметрыОткрытияФормы = Новый Структура("ВидыЦен", ВидыЦен);
ЗаполняемыйВидЦены = Неопределено;
ОткрытьФорму("Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораВидаЦен",
ПараметрыОткрытияФормы, ЭтотОбъект,,,,
Новый ОписаниеОповещения("ВставитьСтрокиЗавершение", ЭтотОбъект, Новый Структура("ВидыЦен, КоличествоТоваровДоВставки", ВидыЦен, КоличествоТоваровДоВставки)),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
Иначе
ЗаполняемыйВидЦены = ВидыЦен.Получить(0);
КонецЕсли;
ВставитьСтрокиФрагмент(ЗаполняемыйВидЦены, КоличествоТоваровДоВставки);
КонецПроцедуры
&НаКлиенте
Процедура ВставитьСтрокиЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВидыЦен = ДополнительныеПараметры.ВидыЦен;
КоличествоТоваровДоВставки = ДополнительныеПараметры.КоличествоТоваровДоВставки;
ЗаполняемыйВидЦены = Результат;
ВставитьСтрокиФрагмент(ЗаполняемыйВидЦены, КоличествоТоваровДоВставки);
КонецПроцедуры
&НаКлиенте
Процедура ВставитьСтрокиФрагмент(ЗаполняемыйВидЦены, Знач КоличествоТоваровДоВставки)
ПолучитьСтрокиИзБуфераОбмена(ЗаполняемыйВидЦены);
КоличествоВставленных = ПолучитьКоличествоСтрокДереваЦен() - КоличествоТоваровДоВставки;
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
КонецПроцедуры
&НаКлиенте
Процедура НастроитьВыводимуюИнформацию(Команда)
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ПоказыватьИзменениеЦены", ПоказыватьИзменениеЦены);
ПараметрыФормы.Вставить("ПоказыватьПроцентНаценки", ПоказыватьПроцентНаценки);
ПараметрыФормы.Вставить("ПоказыватьДействующиеЦены", ПоказыватьДействующиеЦены);
ПараметрыФормы.Вставить("ДатаДействующихЦен", Неопределено);
ПараметрыФормы.Вставить("ПоказыватьФормулы", ПоказыватьФормулы);
ПараметрыФормы.Вставить("ПоказыватьВалюту", ПоказыватьВалюту);
ПараметрыФормы.Вставить("ПоказыватьЕдиницыИзмерения",ПоказыватьЕдиницыИзмерения);
ПараметрыФормы.Вставить("РассчитыватьАвтоматически", РассчитыватьАвтоматически);
ПараметрыФормы.Вставить("ОтображатьВлияющиеЦены", ОтображатьВлияющиеЦены);
ПараметрыФормы.Вставить("ЗафиксироватьКолонкуНоменклатуры", ЗафиксироватьКолонкуНоменклатуры);
ПараметрыФормы.Вставить("ИспользоватьОднуКолонкуДляКлючаЦен", ИспользоватьОднуКолонкуДляКлючаЦен);
ПараметрыФормы.Вставить("ПоказыватьДату", Ложь);
ОткрытьФорму(
"Обработка.ПрайсЛист.Форма.ФормаНастройкиВыводимойИнформации",
ПараметрыФормы,
ЭтотОбъект,,,, Новый ОписаниеОповещения("НастроитьВыводимуюИнформациюЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НастроитьВыводимуюИнформациюЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ПоказыватьИзменениеЦены = Результат.ПоказыватьИзменениеЦены;
ПоказыватьПроцентНаценки = Результат.ПоказыватьПроцентНаценки;
ПоказыватьДействующиеЦены = Результат.ПоказыватьДействующиеЦены;
ПоказыватьФормулы = Результат.ПоказыватьФормулы;
ПоказыватьВалюту = Результат.ПоказыватьВалюту;
ПоказыватьЕдиницыИзмерения= Результат.ПоказыватьЕдиницыИзмерения;
РассчитыватьАвтоматически = Результат.РассчитыватьАвтоматически;
ЗафиксироватьКолонкуНоменклатуры = Результат.ЗафиксироватьКолонкуНоменклатуры;
УстановитьРассчитыватьАвтоматическиНаКлиенте(РассчитыватьАвтоматически);
ЗафиксироватьКолонкуНоменклатуры(ЗафиксироватьКолонкуНоменклатуры);
Если ИспользоватьОднуКолонкуДляКлючаЦен <> Результат.ИспользоватьОднуКолонкуДляКлючаЦен Тогда
ИспользоватьОднуКолонкуДляКлючаЦен = Результат.ИспользоватьОднуКолонкуДляКлючаЦен;
НастроитьКолонкиКлючаЦен();
КонецЕсли;
Если ОтображатьВлияющиеЦены <> Результат.ОтображатьВлияющиеЦены Тогда
ОтображатьВлияющиеЦены = Результат.ОтображатьВлияющиеЦены;
ОтображатьВлияющиеЦеныНаКлиенте(ОтображатьВлияющиеЦены);
КонецЕсли;
УстановитьВидимостьКолонокРедактирования(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьСтроки(Команда)
Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы.ДеревоЦен) Тогда
ВидыЦен = УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект);
Если ВидыЦен.Количество() > 1 Тогда
ПараметрыОткрытияФормы = Новый Структура("ВидыЦен", ВидыЦен);
ЗаполняемыйВидЦены = Неопределено;
ОткрытьФорму("Документ.УстановкаЦенНоменклатуры.Форма.ФормаВыбораВидаЦен",
ПараметрыОткрытияФормы, ЭтотОбъект,,,,
Новый ОписаниеОповещения("СкопироватьСтрокиЗавершение", ЭтотОбъект, Новый Структура("ВидыЦен", ВидыЦен)),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
Иначе
КопируемыйВидЦены = ВидыЦен.Получить(0);
КонецЕсли;
СкопироватьСтрокиФрагмент(КопируемыйВидЦены);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьСтрокиЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВидыЦен = ДополнительныеПараметры.ВидыЦен;
Если ЗначениеЗаполнено(Результат) Тогда
КопируемыйВидЦены = Результат;
СкопироватьСтрокиФрагмент(КопируемыйВидЦены);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьСтрокиФрагмент(Знач КопируемыйВидЦены)
СкопироватьСтрокиНаСервере(КопируемыйВидЦены);
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОКопированииСтрок(Элементы.ДеревоЦен.ВыделенныеСтроки.Количество());
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенПослеУдаленияНаСервере()
УстановитьПометкуИзмененныхФормулСервер();
АдресХранилищаКэшаДанных = "";
КонецПроцедуры
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если Объект.Согласован Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ДанныеШтрихкодов) = Тип("Массив") Тогда
МассивШтрихкодов = ДанныеШтрихкодов;
Иначе
МассивШтрихкодов = Новый Массив;
МассивШтрихкодов.Добавить(ДанныеШтрихкодов);
КонецЕсли;
ВозвращаемыеДанные = ДобавитьНоменклатуруПоШтрихкодамВДеревоЦен(МассивШтрихкодов);
СтруктураПараметровДействия = Новый Структура;
СтруктураПараметровДействия.Вставить("НеизвестныеШтрихкоды", ВозвращаемыеДанные.НеизвестныеШтрихкоды);
Если ПравоРегистрацииШтрихкодовНоменклатурыДоступно
И СтруктураПараметровДействия.НеизвестныеШтрихкоды.Количество() > 0 Тогда
ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураПараметровДействия, КэшированныеЗначения, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Функция ДобавитьНоменклатуруПоШтрихкодамВДеревоЦен(ДанныеШтрихкодов)
ЭтотОбъект.ЗаблокироватьДанныеФормыДляРедактирования();
ТаблицаШтрихкоды = Новый ТаблицаЗначений;
ТаблицаШтрихкоды.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка"));
Для Каждого ЭлементМассива Из ДанныеШтрихкодов Цикл
НоваяСтрока = ТаблицаШтрихкоды.Добавить();
НоваяСтрока.Штрихкод = ЭлементМассива.Штрихкод;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(ТаблицаШтрихкоды.Штрихкод КАК Строка(200)) КАК Штрихкод
|ПОМЕСТИТЬ ТаблицаШтрихкоды
|ИЗ
| &ТаблицаШтрихкоды КАК ТаблицаШтрихкоды
|ИНДЕКСИРОВАТЬ ПО Штрихкод
|;
|
|ВЫБРАТЬ
| ТаблицаШтрихкоды.Штрихкод КАК Штрихкод,
| ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
| ШтрихкодыНоменклатуры.Характеристика КАК Характеристика
|ИЗ
| ТаблицаШтрихкоды
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО ШтрихкодыНоменклатуры.Штрихкод = ТаблицаШтрихкоды.Штрихкод
|";
Запрос.УстановитьПараметр("ТаблицаШтрихкоды", ТаблицаШтрихкоды);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
НеизвестныеШтрихкоды = Новый Массив;
ТаблицаНоменклатура = УстановкаЦенСервер.СоздатьТаблицуНоменклатуры(ЭтотОбъект);
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.Номенклатура) Тогда
НоваяСтрока = ТаблицаНоменклатура.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.Характеристика = Выборка.Характеристика;
Иначе
НеизвестныеШтрихкоды.Добавить(Новый Структура("Штрихкод, Количество", Выборка.Штрихкод, 1));
КонецЕсли;
КонецЦикла;
Если ИспользуетсяЦенообразование25 Тогда
КэшДанных = УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных();
ТаблицаНоменклатуры = УстановкаЦенСервер.СоздатьТаблицуНоменклатуры(ЭтотОбъект);
НастройкиОтбора = УстановкаЦенСервер.ПолучитьСтруктуруОтбораДанныхПоНоменклатуре();
ЗначенияОтбора = Новый Структура();
ЗначенияОтбора.Вставить("ПоМассивуНоменклатуры", ТаблицаНоменклатура.ВыгрузитьКолонку("Номенклатура"));
ЗначенияОтбора.Вставить("ПоМассивуХарактеристик", ТаблицаНоменклатура.ВыгрузитьКолонку("Характеристика"));
НастройкиОтбора.Вставить("ЗначенияОтбора", ЗначенияОтбора);
НастройкиОтбора.Вставить("Дата", Объект.Дата);
НастройкиОтбора.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
НастройкиОтбора.Вставить("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьСерииНоменклатуры", ИспользоватьСерииНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьУпаковкиНоменклатуры", ИспользоватьУпаковкиНоменклатуры);
ТаблицаНоменклатуры.Очистить();
УстановкаЦенСервер.ПолучитьДанныеПоНоменклатуре(НастройкиОтбора, ТаблицаНоменклатуры);
КонецЕсли;
УстановкаЦенСервер.ДобавитьТоварыПоОтбору(ЭтотОбъект, Неопределено, ТаблицаНоменклатура);
Возврат Новый Структура(
"НеизвестныеШтрихкоды",
НеизвестныеШтрихкоды);
КонецФункции
&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
ТаблицаНоменклатуры = УстановкаЦенСервер.СоздатьТаблицуНоменклатуры(ЭтотОбъект);
НастройкиОтбора = УстановкаЦенСервер.ПолучитьСтруктуруОтбораДанныхПоНоменклатуре();
ЗначенияОтбора = Новый Структура();
ЗначенияОтбора.Вставить("ПоМассивуНоменклатуры", ТаблицаТоваров.ВыгрузитьКолонку("Номенклатура"));
НастройкиОтбора.Вставить("ЗначенияОтбора", ЗначенияОтбора);
НастройкиОтбора.Вставить("Дата", Объект.Дата);
НастройкиОтбора.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
НастройкиОтбора.Вставить("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьСерииНоменклатуры", ИспользоватьСерииНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьУпаковкиНоменклатуры", ИспользоватьУпаковкиНоменклатуры);
УстановкаЦенСервер.ПолучитьДанныеПоНоменклатуре(НастройкиОтбора, ТаблицаНоменклатуры);
УстановкаЦенСервер.ДобавитьТоварыПоОтбору(ЭтотОбъект, ВыбранноеЗначение.АдресТоваровВХранилище, ТаблицаНоменклатуры);
ОбновитьСтарыеЦеныНоменклатурыНаСервере();
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовПоСтатусуСервер()
УстановитьПодписку = Объект.Согласован;
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("Ответственный");
МассивЭлементов.Добавить("Номер");
МассивЭлементов.Добавить("Дата");
МассивЭлементов.Добавить("НомерВПределахДня");
МассивЭлементов.Добавить("ВыбранныеЦены");
МассивЭлементов.Добавить("ДеревоЦен;ПередНачаломДобавления,ПередУдалением");
МассивЭлементов.Добавить("ДеревоЦенПодобратьТовары");
МассивЭлементов.Добавить("ДеревоЦенДобавитьТоварыПоЦеновойГруппе");
МассивЭлементов.Добавить("ДеревоЦенДобавитьТоварыПоОтбору");
МассивЭлементов.Добавить("ДеревоЦенДобавитьНоменклатуру");
МассивЭлементов.Добавить("ДеревоЦенЗагрузитьСтарыеЦены");
МассивЭлементов.Добавить("ДеревоЦенРассчитать");
МассивЭлементов.Добавить("ДеревоЦенОкруглитьРучныеЦены");
МассивЭлементов.Добавить("ДеревоЦенИзменитьЦеныНаПроцент");
МассивЭлементов.Добавить("ВыбранныеЦеныИсключитьВсеВидыЦен");
МассивЭлементов.Добавить("ВыбранныеЦеныВыбратьВсеВидыЦен");
МассивЭлементов.Добавить("ВыбранныеЦеныВыбратьВсеВлияющие");
МассивЭлементов.Добавить("ВыбранныеЦеныВыбратьВсеЗависимые");
МассивЭлементов.Добавить("ВыбранныеЦеныРедактироватьНастройки");
МассивЭлементов.Добавить("ВыбранныеЦеныВосстановитьНастройкиПоУмолчанию");
МассивЭлементов.Добавить("ДеревоЦенСортироватьПоНаименованиюНоменклатурыСУчетомИерархииГрупп");
МассивЭлементов.Добавить("ДеревоЦенСортироватьПоНаименованиюНоменклатурыСУчетомИерархииВидов");
МассивЭлементов.Добавить("ДеревоЦенСортироватьПоНаименованиюНоменклатуры");
МассивЭлементов.Добавить("ДеревоЦенДобавитьТоварыПоОтборуВидовЦен");
МассивЭлементов.Добавить("ДеревоЦенЗагрузитьИзExcel");
МассивЭлементов.Добавить("ТоварыПоискПоШтрихкоду");
МассивЭлементов.Добавить("ТоварыЗагрузитьДанныеИзТСД");
МассивЭлементов.Добавить("ДеревоЦенУдалитьТоварыБезИзмененныхЦен");
ОбщегоНазначенияУТ.УстановитьПодпискуНаСобытияИзмененияЭлементовФормы(ЭтотОбъект, МассивЭлементов, УстановитьПодписку);
КонецПроцедуры
&НаСервере
Процедура ЗафиксироватьКолонкуНоменклатуры(НовоеЗначение)
Если НовоеЗначение = Неопределено Тогда
НовоеЗначение = Истина;
КонецЕсли;
ЗафиксироватьКолонкуНоменклатуры = НовоеЗначение;
Элементы.ДеревоЦенГруппаНоменклатура.ФиксацияВТаблице = ?(ЗафиксироватьКолонкуНоменклатуры,ФиксацияВТаблице.Лево,ФиксацияВТаблице.Нет);
КонецПроцедуры
&НаКлиенте
Процедура ПриПереходеКУстановкеЦен()
Если НЕ УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ЭтотОбъект).Количество() > 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Для перехода к установке цен, необходимо выбрать один или несколько видов цен'"),,"ВыбранныеЦены");
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВидыЦен;
Иначе
Если ВыбранныеЦеныИзменены Тогда
ВыбранныеЦеныИзменены = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения("ПриПереходеКУстановкеЦенЗавершение", ЭтотОбъект);
Если ДеревоЦен.ПолучитьЭлементы().Количество() > 0 Тогда
ПоказатьВопрос(
ОписаниеОповещения,
НСтр("ru='Состав цен или параметры расчета изменились. Пересчитать цены?'"),
РежимДиалогаВопрос.ДаНет);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения, КодВозвратаДиалога.Нет);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриПереходеКУстановкеЦенЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ПересчитатьЦены = ?(ДеревоЦен.ПолучитьЭлементы().Количество() > 0, РезультатВопроса = КодВозвратаДиалога.Да, Истина);
ПереформироватьТаблицуЦен(ПересчитатьЦены);
УстановитьВидимостьКолонокРедактирования(Истина);
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенНоменклатураПриИзмененииСервер(ИдентификаторСтроки, РассчитатьЦены = Истина)
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ТекущаяСтрока.ПолучитьРодителя() = Неопределено Тогда
Характеристики = ТекущаяСтрока.ПолучитьЭлементы();
Если Характеристики.Количество() > 0 Тогда
Если Характеристики[0].Номенклатура <> ТекущаяСтрока.Номенклатура Тогда
ТекущаяСтрока.ПолучитьЭлементы().Очистить();
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьВалютыВидовЦен(ТекущаяСтрока, РассчитатьЦены);
АдресХранилищаКэшаДанных = "";
КэшДанных = УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных();
Если ЗначениеЗаполнено(ТекущаяСтрока.Номенклатура) Тогда
ТаблицаНоменклатуры = УстановкаЦенСервер.СоздатьТаблицуНоменклатуры(ЭтотОбъект);
НастройкиОтбора = УстановкаЦенСервер.ПолучитьСтруктуруОтбораДанныхПоНоменклатуре();
ЗначенияОтбора = Новый Структура();
ЗначенияОтбора.Вставить("ПоНоменклатуре", ТекущаяСтрока.Номенклатура);
НастройкиОтбора.Вставить("ЗначенияОтбора", ЗначенияОтбора);
НастройкиОтбора.Вставить("Дата", Объект.Дата);
НастройкиОтбора.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
НастройкиОтбора.Вставить("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьСерииНоменклатуры", ИспользоватьСерииНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьУпаковкиНоменклатуры", ИспользоватьУпаковкиНоменклатуры);
УстановкаЦенСервер.ПолучитьДанныеПоНоменклатуре(НастройкиОтбора, ТаблицаНоменклатуры);
ТаблицаНоменклатуры = УстановкаЦенСервер.ДобавитьТовары(ЭтотОбъект, ТаблицаНоменклатуры, КэшДанных);
Иначе
ТекущаяСтрока.ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
ТекущаяСтрока.ЦеноваяГруппа = Справочники.ЦеновыеГруппы.ПустаяСсылка();
КонецЕсли;
ТаблицаЗначений = УстановкаЦенСервер.СоздатьТаблицуТовары(Ложь, ИспользуетсяЦенообразование25);
Если ЗначениеЗаполнено(ТаблицаНоменклатуры) И ТаблицаНоменклатуры.Количество() > 0 Тогда
ПолучитьДанныеДляЗагрузкиЦенПоТаблицеНоменклатуры(ТаблицаЗначений, ТаблицаНоменклатуры);
Иначе
ПолучитьДанныеДляЗагрузкиЦенПоПоДеревуЦен(ТаблицаЗначений, ТекущаяСтрока);
КонецЕсли;
УстановкаЦенСервер.ЗагрузитьСтарыеЦеныНоменклатуры(ЭтотОбъект, ТаблицаЗначений, КэшДанных);
Если РассчитатьЦены Тогда
Если ИспользуетсяЦенообразование25 Тогда
УстановкаЦенСервер.РассчитатьЦеныПоИдентификаторуСтроки2_5(ЭтотОбъект, ИдентификаторСтроки, Истина,,КэшДанных);
Иначе
УстановкаЦенСервер.РассчитатьЦеныПоИдентификаторуСтроки(ЭтотОбъект, ИдентификаторСтроки, Истина,,КэшДанных);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанныеДляЗагрузкиЦенПоПоДеревуЦен(ТаблицаЗначений, ТекущаяСтрока)
СерияЦОПредопределенный = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока.СерияЦО, "Предопределенный");
Для Каждого СтрокаВидЦены Из ВыбранныеЦены Цикл
Если СтрокаВидЦены.Выбрана ИЛИ СтрокаВидЦены.Влияет Тогда
ИмяКолонки = СтрокаВидЦены.ИмяКолонки;
ИмяКолонкиУпаковка = "Упаковка" + ИмяКолонки;
ИмяКолонкиФормула = "Формула" + ИмяКолонки;
ИмяКолонкиВалюта = "Валюта" + ИмяКолонки;
НоваяСтрока = ТаблицаЗначений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущаяСтрока);
Если ИспользуетсяЦенообразование25 Тогда
НоваяСтрока.УпаковкаЦОДляСвязи = ?(ТекущаяСтрока.УпаковкаЦО = ТекущаяСтрока.ЕдиницаИзмерения, Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(), ТекущаяСтрока.УпаковкаЦО);
НоваяСтрока.СерияЦОДляСвязи = ?((ЗначениеЗаполнено(СерияЦОПредопределенный) И СерияЦОПредопределенный), Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(), ТекущаяСтрока.СерияЦО);
КонецЕсли;
НоваяСтрока.ВидЦены = СтрокаВидЦены.Ссылка;
НоваяСтрока.Цена = ТекущаяСтрока[ИмяКолонки];
Если ИспользоватьУпаковкиНоменклатуры Тогда
НоваяСтрока.Упаковка = ТекущаяСтрока[ИмяКолонкиУпаковка];
КонецЕсли;
НоваяСтрока.Формула = ТекущаяСтрока[ИмяКолонкиФормула];
НоваяСтрока.Валюта = ТекущаяСтрока[ИмяКолонкиВалюта];
Для Каждого ПодчиненнаяСтрока Из ТекущаяСтрока.ПолучитьЭлементы() Цикл
ПолучитьДанныеДляЗагрузкиЦенПоПоДеревуЦен(ТаблицаЗначений, ПодчиненнаяСтрока);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанныеДляЗагрузкиЦенПоТаблицеНоменклатуры(ТаблицаЗначений, ТаблицаНоменклатуры)
Для Каждого СтрокаВидЦены Из ВыбранныеЦены Цикл
Если СтрокаВидЦены.Выбрана
Или СтрокаВидЦены.Влияет Тогда
ИмяКолонки = СтрокаВидЦены.ИмяКолонки;
ИмяКолонкиУпаковка = "Упаковка" + ИмяКолонки;
ИмяКолонкиФормула = "Формула" + ИмяКолонки;
Для Каждого СтрокаТаблицыНоменклатуры Из ТаблицаНоменклатуры Цикл
НоваяСтрока = ТаблицаЗначений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицыНоменклатуры);
НоваяСтрока.ВидЦены = СтрокаВидЦены.Ссылка;
НоваяСтрока.Валюта = СтрокаВидЦены.Валюта;
НоваяСтрока.Цена = СтрокаТаблицыНоменклатуры.СтрокаДереваЦен[ИмяКолонки];
НоваяСтрока.Формула = СтрокаТаблицыНоменклатуры.СтрокаДереваЦен[ИмяКолонкиФормула];
Если ИспользоватьУпаковкиНоменклатуры Тогда
НоваяСтрока.Упаковка = СтрокаТаблицыНоменклатуры.СтрокаДереваЦен[ИмяКолонкиУпаковка];
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДеревоЦенХарактеристикаПриИзмененииСервер(ИдентификаторСтроки, РассчитатьЦены = Истина)
УстановкаЦенСервер.ДеревоЦенХарактеристикаПриИзменении(ЭтотОбъект, ИдентификаторСтроки, РассчитатьЦены);
Конецпроцедуры
&НаСервере
Процедура ДобавитьНоменклатуруЦеновойГруппыНаСервере(ЦеновыеГруппы)
КэшДанных = УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных();
ТаблицаНоменклатуры = УстановкаЦенСервер.СоздатьТаблицуНоменклатуры(ЭтотОбъект);
НастройкиОтбора = УстановкаЦенСервер.ПолучитьСтруктуруОтбораДанныхПоНоменклатуре();
ЗначенияОтбора = Новый Структура();
ЗначенияОтбора.Вставить("ПоЦеновымГруппам", ЦеновыеГруппы);
НастройкиОтбора.Вставить("ЗначенияОтбора", ЗначенияОтбора);
НастройкиОтбора.Вставить("Дата", Объект.Дата);
НастройкиОтбора.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
НастройкиОтбора.Вставить("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьСерииНоменклатуры", ИспользоватьСерииНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьУпаковкиНоменклатуры", ИспользоватьУпаковкиНоменклатуры);
УстановкаЦенСервер.ПолучитьДанныеПоНоменклатуре(НастройкиОтбора, ТаблицаНоменклатуры);
ТаблицаТовары = УстановкаЦенСервер.ДобавитьТовары(ЭтотОбъект, ТаблицаНоменклатуры, КэшДанных);
УстановкаЦенСервер.ОбновитьСтарыеЦеныНоменклатуры(ЭтотОбъект, КэшДанных, ТаблицаТовары);
ЗагружатьЦеныИзИБ = Истина;
Если РассчитыватьАвтоматически Тогда
Если ЗагружатьЦеныИзИБ Тогда
УстановкаЦенСервер.ЗагрузитьЗначенияБазовыхЦен(ЭтотОбъект, ТаблицаТовары, КэшДанных);
УстановкаЦенСервер.ВычислитьЦеныПоДаннымИБ(ЭтотОбъект, ТаблицаТовары,,,КэшДанных);
КонецЕсли;
УстановкаЦенСервер.РассчитатьВычисляемыеЦены(
ЭтотОбъект, ТаблицаТовары, КэшДанных);
КонецЕсли;
Если КэшДанных.ТаблицаСоответствияНоменклатурыСтрокамДереваТоваров.Количество() > 0 Тогда
Элементы.ДеревоЦен.ТекущаяСтрока = КэшДанных.ТаблицаСоответствияНоменклатурыСтрокамДереваТоваров[
КэшДанных.ТаблицаСоответствияНоменклатурыСтрокамДереваТоваров.Количество()-1].СтрокаДереваЦен.ПолучитьИдентификатор();
КонецЕсли;
УстановкаЦенСервер.УстановитьПометкуИзмененныхФормул(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьРассчитыватьАвтоматическиНаКлиенте(НовоеЗначение)
РассчитыватьАвтоматически = НовоеЗначение;
КонецПроцедуры
&НаКлиенте
Процедура ОтображатьВлияющиеЦеныНаКлиенте(НовоеЗначение)
ОтображатьВлияющиеЦены = НовоеЗначение;
ПереформироватьТаблицуЦен = Ложь;
Для Каждого ВидЦены Из ВыбранныеЦены Цикл
Если Не ВидЦены.Выбрана И ВидЦены.Влияет И Не ВидЦены.ЗапрещенныйВидЦены Тогда
ПереформироватьТаблицуЦен = Истина;
КонецЕсли;
КонецЦикла;
Если ПереформироватьТаблицуЦен Тогда
ПереформироватьТаблицуЦен(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПараметрыОткрытияФормыВыбораПараметровРасчета(ПараметрыЗаполнения)
ВидыЦен = Новый Массив();
Для Каждого СтрокаВидыЦены ИЗ ВыбранныеЦены Цикл
Если НЕ (СтрокаВидыЦены.Выбрана И СтрокаВидыЦены.Редактировать) Тогда
Продолжить;
КонецЕсли;
Если ПараметрыЗаполнения.РасчетПоИБ
И (СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБ")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПриПоступлении")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаЦенуПоступления")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаЦенуВводаОстатков")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоКонкурентам")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоПоставщикам")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоСебестоимости")) Тогда
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
ИначеЕсли ПараметрыЗаполнения.РасчетПоФормулам
И (СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаДругойВидЦен")
ИЛИ СтрокаВидыЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.РассчитыватьПоФормуламОтДругихВидовЦен")) Тогда
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
Иначе
ВидыЦен.Добавить(СтрокаВидыЦены.Ссылка);
КонецЕсли;
КонецЦикла;
ТолькоВыделенные = Элементы.ДеревоЦен.ВыделенныеСтроки.Количество() > 1;
СтруктураВозврата = Новый Структура();
СтруктураВозврата.Вставить("ЗагрузкаСтарыхЦен", ПараметрыЗаполнения.ЗагрузкаСтарыхЦен);
СтруктураВозврата.Вставить("ОкруглениеРучныхЦен", ПараметрыЗаполнения.ОкруглениеРучныхЦен);
СтруктураВозврата.Вставить("РучныеВидыЦен", ВидыЦен);
СтруктураВозврата.Вставить("ДатаДокумента", Объект.Дата);
СтруктураВозврата.Вставить("ТолькоВыделенные", ТолькоВыделенные);
СтруктураВозврата.Вставить("ВсеВидыЦен", УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект, Истина));
Если ПараметрыЗаполнения.Свойство("РасчетПоФормулам") Тогда
СтруктураВозврата.Вставить("РасчетПоФормулам", ПараметрыЗаполнения.РасчетПоФормулам);
КонецЕсли;
СтруктураВозврата.Вставить("ТолькоНеЗаполненные",Ложь);
Если ПараметрыЗаполнения.Свойство("МассивВалютПоВидамЦен") Тогда
СтруктураВозврата.Вставить("МассивВалютПоВидамЦен", ПараметрыЗаполнения.МассивВалютПоВидамЦен);
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
&НаСервере
Функция ДатаДляЗапросаЦенНоменклатуры()
Возврат Объект.Дата - 1;
КонецФункции
&НаСервере
Процедура ЗаполнитьДокумент()
КэшДанных = УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных();
Если Объект.ВидыЦен.Количество() > 0
ИЛИ Объект.Товары.Количество() > 0
ИЛИ Объект.Товары2_5.Количество() > 0
ИЛИ НЕ ИспользоватьНесколькоВидовЦен
ИЛИ ВыбранныеЦены.Количество() = 1 Тогда
Если УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ЭтотОбъект).Количество() > 0 Тогда
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановкаЦенСервер.ЗагрузитьТабличнуюЧастьТовары(ЭтотОбъект, КэшДанных);
УстановкаЦенСервер.ЗагрузитьБазовыеЦены(ЭтотОбъект, КэшДанных);
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаУстановкаЦен;
Иначе
Если НЕ ИспользоватьНесколькоВидовЦен Или ВыбранныеЦены.Количество() = 1 Тогда
Для Каждого ТекСтрока Из ВыбранныеЦены Цикл
ТекСтрока.Выбрана = Истина;
ТекСтрока.Редактировать = Истина;
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ДокументОснование)
И Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Для Каждого ТекСтрока Из ВыбранныеЦены Цикл
Если ТекСтрока.УстанавливатьЦенуПриВводеНаОсновании
И Не ТекСтрока.ЗапрещенныйВидЦены Тогда
ТекСтрока.Выбрана = Истина;
ТекСтрока.Редактировать = Истина;
НоваяСтрока = Объект.ВидыЦен.Добавить();
НоваяСтрока.ВидЦены = ТекСтрока.Ссылка;
КонецЕсли;
КонецЦикла;
УстановкаЦенКлиентСервер.ВыбратьВсеЗависимыеЦены(ЭтотОбъект);
УстановкаЦенКлиентСервер.ВыбратьВсеВлияющиеЦены(ЭтотОбъект);
ВыбранныеЦеныИзменены = Ложь;
Если УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект).Количество() > 0 Тогда
ВидыЗагружаемыхСтарыхЦен = Новый Массив();
Для Каждого ТекСтрока Из ВыбранныеЦены Цикл
Если ТекСтрока.Выбрана И (ТекСтрока.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.Вручную) Тогда
ВидыЗагружаемыхСтарыхЦен.Добавить(ТекСтрока);
КонецЕсли;
КонецЦикла;
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановкаЦенСервер.ЗагрузитьТабличнуюЧастьТовары(ЭтотОбъект, КэшДанных);
УстановкаЦенСервер.ПоместитьВидыЦенВТабличнуюЧасть(ЭтотОбъект, Объект.ВидыЦен);
Данные = Новый Структура;
Данные.Вставить("Форма", ЭтотОбъект);
Данные.Вставить("Документы", Новый Массив);
Данные.Вставить("СохранятьБазовые", Ложь);
Данные.Документы.Добавить(Объект);
УстановкаЦенСервер.ПоместитьЦеныВТабличнуюЧасть(Данные);
УстановкаЦенСервер.ОбновитьСтарыеЦеныНоменклатуры(ЭтотОбъект, КэшДанных);
ТаблицаНоменклатуры = УстановкаЦенСервер.СоздатьТаблицуНоменклатурыПоДеревуЦен(ЭтотОбъект, Ложь);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("МассивСтрокВидовЦен", ВидыЗагружаемыхСтарыхЦен);
СтруктураПараметров.Вставить("ПрименятьОкругление", Ложь);
УстановкаЦенСервер.ЗагрузитьЗначенияБазовыхЦен(
ЭтотОбъект,
ТаблицаНоменклатуры,
КэшДанных,
СтруктураПараметров);
Если УстановкаЦенСервер.ЗаполненыОбязательныеПараметрыСхемКомпоновкиДанных(ЭтотОбъект, Ложь) Тогда
УстановкаЦенСервер.ВычислитьЦеныПоДаннымИБ(ЭтотОбъект, ТаблицаНоменклатуры,,,КэшДанных);
УстановкаЦенСервер.РассчитатьВычисляемыеЦены(ЭтотОбъект, ТаблицаНоменклатуры, КэшДанных);
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаУстановкаЦен;
КонецЕсли;
КонецЕсли;
Иначе
УстановкаЦенСервер.ПостроитьДеревоЦен(ЭтотОбъект);
УстановкаЦенСервер.ЗагрузитьТабличнуюЧастьТовары(ЭтотОбъект, КэшДанных);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьСостояние()
Если Объект.Проведен И Объект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован Тогда
Состояние = Перечисления.СостоянияУстановокЦенНоменклатуры.Действует;
ИначеЕсли Объект.Проведен И Объект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.НеСогласован Тогда
Состояние = Перечисления.СостоянияУстановокЦенНоменклатуры.ОжидаетсяСогласование;
Иначе
Состояние = Перечисления.СостоянияУстановокЦенНоменклатуры.ПустаяСсылка();
КонецЕсли;
Просрочен = Объект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.НеСогласован И НачалоДня(Объект.Дата) < НачалоДня(ТекущаяДатаСеанса());
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОНевозможностиВыбора()
ОчиститьСообщения();
ТекущиеДанные = Элементы.ВыбранныеЦены.ТекущиеДанные;
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Нет прав на установку цен по данному виду цены'"), Объект.Ссылка, "ВыбранныеЦены[" + ВыбранныеЦены.Индекс(ТекущиеДанные) + "].Ссылка");
КонецПроцедуры
&НаСервере
Процедура ДобавитьТоварыПоОтборамСКДНаСервере()
УстановкаЦенСервер.ДобавитьТоварыПоОтборамСКД(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура СортироватьНаСервере(Режим = "ПоНаименованиюНоменклатуры")
УстановитьПривилегированныйРежим(Истина);
АдресХранилищаКэшаДанных = "";
КэшДанных = УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных();
Данные = Новый Структура;
Данные.Вставить("Форма", ЭтотОбъект);
Данные.Вставить("Документы", Новый Массив);
Данные.Вставить("СохранятьБазовые", Ложь);
Данные.Документы.Добавить(Объект);
УстановкаЦенСервер.ПоместитьЦеныВТабличнуюЧасть(Данные);
Если ИспользуетсяЦенообразование25 Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ВременнаяТаблицаТовары.Индекс КАК Индекс,
| ВЫРАЗИТЬ(ВременнаяТаблицаТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
| ВЫРАЗИТЬ(ВременнаяТаблицаТовары.ХарактеристикаЦО КАК Справочник.ХарактеристикиНоменклатурыДляЦенообразования) КАК ХарактеристикаЦО,
| ВЫРАЗИТЬ(ВременнаяТаблицаТовары.СерияЦО КАК Справочник.СерииНоменклатурыДляЦенообразования) КАК СерияЦО,
| ВЫРАЗИТЬ(ВременнаяТаблицаТовары.УпаковкаЦО КАК Справочник.УпаковкиЕдиницыИзмерения) КАК УпаковкаЦО
|ПОМЕСТИТЬ ВременнаяТаблицаТовары
|ИЗ
| &Товары КАК ВременнаяТаблицаТовары
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| ХарактеристикаЦО
|;
|
|
|ВЫБРАТЬ
| &ВидНоменклатуры,
| ВременнаяТаблицаТовары.Номенклатура КАК Номенклатура,
| ВременнаяТаблицаТовары.ХарактеристикаЦО КАК ХарактеристикаЦО,
| ВременнаяТаблицаТовары.СерияЦО КАК СерияЦО,
| ВременнаяТаблицаТовары.УпаковкаЦО КАК УпаковкаЦО,
| ВременнаяТаблицаТовары.Индекс
|ИЗ
| ВременнаяТаблицаТовары КАК ВременнаяТаблицаТовары
|");
Если Режим = "ПоНаименованиюНоменклатурыИерархияВидовНоменклатуры" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВидНоменклатуры,", "ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры,");
Запрос.Текст = Запрос.Текст + "
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
| ПО ВременнаяТаблицаТовары.Номенклатура.ВидНоменклатуры = ВидыНоменклатуры.Ссылка
|УПОРЯДОЧИТЬ ПО
| ВидыНоменклатуры.Наименование,
| ВременнаяТаблицаТовары.Номенклатура.Наименование,
| ВременнаяТаблицаТовары.ХарактеристикаЦО.Наименование,
| ВременнаяТаблицаТовары.СерияЦО.Наименование,
| ВременнаяТаблицаТовары.УпаковкаЦО.Наименование
|ИТОГИ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка) КАК ХарактеристикаЦО,
| ЗНАЧЕНИЕ(Справочник.СерииНоменклатурыДляЦенообразования.ПустаяСсылка) КАК СерияЦО,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК УпаковкаЦО,
| МИНИМУМ(ВидНоменклатуры),
| МИНИМУМ(Индекс)
|ПО
| Номенклатура";
ИначеЕсли Режим = "ПоНаименованиюНоменклатурыИерархияГрупп" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВидНоменклатуры,", "");
Запрос.Текст = Запрос.Текст +
"УПОРЯДОЧИТЬ ПО
| ВременнаяТаблицаТовары.Номенклатура.Наименование,
| ВременнаяТаблицаТовары.ХарактеристикаЦО.Наименование,
| ВременнаяТаблицаТовары.СерияЦО.Наименование,
| ВременнаяТаблицаТовары.УпаковкаЦО.Наименование
|ИТОГИ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка) КАК ХарактеристикаЦО,
| ЗНАЧЕНИЕ(Справочник.СерииНоменклатурыДляЦенообразования.ПустаяСсылка) КАК СерияЦО,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК УпаковкаЦО,
| МИНИМУМ(Индекс)
|ПО
| Номенклатура ИЕРАРХИЯ";
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВидНоменклатуры,", "");
Запрос.Текст = Запрос.Текст +
"УПОРЯДОЧИТЬ ПО
| ВременнаяТаблицаТовары.Номенклатура.Наименование,
| ВременнаяТаблицаТовары.ХарактеристикаЦО.Наименование,
| ВременнаяТаблицаТовары.СерияЦО.Наименование,
| ВременнаяТаблицаТовары.УпаковкаЦО.Наименование
|ИТОГИ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка) КАК ХарактеристикаЦО,
| ЗНАЧЕНИЕ(Справочник.СерииНоменклатурыДляЦенообразования.ПустаяСсылка) КАК СерияЦО,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК УпаковкаЦО,
| МИНИМУМ(Индекс)
|ПО
| Номенклатура";
КонецЕсли;
ТаблицаТоваров = Объект.Товары2_5.Выгрузить();
Иначе
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ВременнаяТаблицаТовары.Индекс КАК Индекс,
| ВЫРАЗИТЬ(ВременнаяТаблицаТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
| ВЫРАЗИТЬ(ВременнаяТаблицаТовары.Характеристика КАК Справочник.ХарактеристикиНоменклатуры) КАК Характеристика
|ПОМЕСТИТЬ ВременнаяТаблицаТовары
|ИЗ
| &Товары КАК ВременнаяТаблицаТовары
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| &ВидНоменклатуры,
| ВременнаяТаблицаТовары.Номенклатура КАК Номенклатура,
| ВременнаяТаблицаТовары.Характеристика КАК Характеристика,
| ВременнаяТаблицаТовары.Индекс
|ИЗ
| ВременнаяТаблицаТовары КАК ВременнаяТаблицаТовары
|");
Если Режим = "ПоНаименованиюНоменклатурыИерархияВидовНоменклатуры" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВидНоменклатуры,", "ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры,");
Запрос.Текст = Запрос.Текст + "
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
| ПО ВременнаяТаблицаТовары.Номенклатура.ВидНоменклатуры = ВидыНоменклатуры.Ссылка
|УПОРЯДОЧИТЬ ПО
| ВременнаяТаблицаТовары.Номенклатура.Наименование,
| ВременнаяТаблицаТовары.Характеристика.Наименование
|ИТОГИ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
| МИНИМУМ(ВидНоменклатуры),
| МИНИМУМ(Индекс)
|ПО
| Номенклатура";
ИначеЕсли Режим = "ПоНаименованиюНоменклатурыИерархияГрупп" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВидНоменклатуры,", "");
Запрос.Текст = Запрос.Текст +
"УПОРЯДОЧИТЬ ПО
| ВременнаяТаблицаТовары.Номенклатура.Наименование,
| ВременнаяТаблицаТовары.Характеристика.Наименование
|ИТОГИ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
| МИНИМУМ(Индекс)
|ПО
| Номенклатура ИЕРАРХИЯ";
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВидНоменклатуры,", "");
Запрос.Текст = Запрос.Текст +
"УПОРЯДОЧИТЬ ПО
| ВременнаяТаблицаТовары.Номенклатура.Наименование,
| ВременнаяТаблицаТовары.Характеристика.Наименование
|ИТОГИ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
| МИНИМУМ(Индекс)
|ПО
| Номенклатура";
КонецЕсли;
ТаблицаТоваров = Объект.Товары.Выгрузить();
КонецЕсли;
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ТаблицаТоваров, "Индекс");
Запрос.УстановитьПараметр("Товары", ТаблицаТоваров);
Запрос.УстановитьПараметр("Дата", ДатаДляЗапросаЦенНоменклатуры());
Индекс = 1;
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаТЧ Из РезультатЗапроса Цикл
Если Не СтрокаТЧ["Номенклатура"] = Null И Не СтрокаТЧ["Номенклатура"].ЭтоГруппа Тогда
СтрокаДерева = УстановкаЦенСервер.НайтиСтрокуДереваЦен(ЭтотОбъект, СтрокаТЧ, КэшДанных);
СтрокаДерева.РеквизитСортировки = Индекс;
Индекс = Индекс + 1;
КонецЕсли;
КонецЦикла;
ДеревоЦенЗначение = РеквизитФормыВЗначение("ДеревоЦен");
ДеревоЦенЗначение.Строки.Сортировать("РеквизитСортировки Возр", Истина);
ЗначениеВРеквизитФормы(ДеревоЦенЗначение, "ДеревоЦен");
УстановкаЦенСервер.УстановитьПометкуИзмененныхФормул(ЭтотОбъект, ДеревоЦенЗначение);
КонецПроцедуры
&НаКлиенте
Функция ПолучитьКоличествоСтрокДереваЦен()
ЭлементыНоменклатура = ДеревоЦен.ПолучитьЭлементы();
Количество = ЭлементыНоменклатура.Количество();
Для Каждого ТекЭлементНоменклатура Из ЭлементыНоменклатура Цикл
ЭлементыХарактеристики = ТекЭлементНоменклатура.ПолучитьЭлементы();
КоличествоХарактеристик = ЭлементыХарактеристики.Количество();
Количество = Количество + КоличествоХарактеристик;
КонецЦикла;
Возврат Количество
КонецФункции
#КонецОбласти
#Область КонтрольНесогласованныхИзменений
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент)
Если Элемент.Имя = "Дата" Тогда
ДатаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "НомерВПределахДня" Тогда
НомерВПределахДняПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "ВыбранныеЦеныВыбрана" Тогда
ВыбранныеЦеныВыбранаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "ВыбранныеЦеныРедактировать" Тогда
ВыбранныеЦеныРедактироватьПриИзменении(Элемент);
Иначе
Если СтрНайти(Элемент.Имя, "ДеревоЦен" + "ВидЦены") > 0
Или СтрНайти(Элемент.Имя, "ДеревоЦен" + "ПроцентИзменения" + "ВидЦены") > 0
Или СтрНайти(Элемент.Имя, "ДеревоЦен" + "СуммаИзменения" + "ВидЦены") > 0 Тогда
Подключаемый_ДеревоЦенЦенаПриИзменении(Элемент);
ИначеЕсли СтрНайти(Элемент.Имя, "ДеревоЦен" + "Упаковка" + "ВидЦены") > 0 Тогда
Подключаемый_ДеревоЦенУпаковкаПриИзменении(Элемент);
ИначеЕсли СтрНайти(Элемент.Имя, "ДеревоЦен" + "Номенклатура") > 0 Тогда
ДеревоЦенНоменклатураПриИзменении(Элемент);
ИначеЕсли СтрНайти(Элемент.Имя, "ДеревоЦен" + "Формула" + "ВидЦены") > 0 Тогда
Подключаемый_ДеревоЦенФормулаПриИзменении(Элемент);
ИначеЕсли СтрНайти(Элемент.Имя, "ДеревоЦен" + "Валюта" + "ВидЦены") > 0 Тогда
Подключаемый_ДеревоЦенВалютаПриИзменении(Элемент);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтотОбъект, Элемент);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда)
Если Команда.Имя = "ПодобратьТовары" Тогда
ПодобратьТовары(Команда);
ИначеЕсли Команда.Имя = "ДобавитьТоварыПоЦеновойГруппе" Тогда
ДобавитьТоварыПоЦеновойГруппе(Команда);
ИначеЕсли Команда.Имя = "ДобавитьТоварыПоОтбору" Тогда
ДобавитьТоварыПоОтбору(Команда);
ИначеЕсли Команда.Имя = "ДобавитьНоменклатуру" Тогда
ДобавитьНоменклатуру(Команда);
ИначеЕсли Команда.Имя = "ЗагрузитьДействующиеЦены" Тогда
ЗагрузитьДействующиеЦены(Команда);
ИначеЕсли Команда.Имя = "Рассчитать" Тогда
Рассчитать(Команда);
ИначеЕсли Команда.Имя = "ИзменитьЦены" Тогда
ИзменитьЦеныНовыйВариант(Команда);
ИначеЕсли Команда.Имя = "ИсключитьВсеВидыЦен" Тогда
ИсключитьВсеВидыЦен(Команда);
ИначеЕсли Команда.Имя = "ВыбратьВсеВидыЦен" Тогда
ВыбратьВсеВидыЦен(Команда);
ИначеЕсли Команда.Имя = "ВыбратьВсеВлияющие" Тогда
ВыбратьВсеВлияющие(Команда);
ИначеЕсли Команда.Имя = "ВыбратьВсеЗависимые" Тогда
ВыбратьВсеЗависимые(Команда);
ИначеЕсли Команда.Имя = "РедактироватьНастройки" Тогда
РедактироватьНастройки(Команда);
ИначеЕсли Команда.Имя = "ВосстановитьНастройкиПоУмолчанию" Тогда
ВосстановитьНастройкиПоУмолчанию(Команда);
ИначеЕсли Команда.Имя = "СортироватьПоНаименованиюНоменклатурыСУчетомИерархииГрупп" Тогда
СортироватьПоНаименованиюНоменклатурыСУчетомИерархииГрупп(Команда);
ИначеЕсли Команда.Имя = "СортироватьПоНаименованиюНоменклатурыСУчетомИерархииВидов" Тогда
СортироватьПоНаименованиюНоменклатурыСУчетомИерархииВидов(Команда);
ИначеЕсли Команда.Имя = "СортироватьПоНаименованиюНоменклатуры" Тогда
СортироватьПоНаименованиюНоменклатуры(Команда);
ИначеЕсли Команда.Имя = "ДобавитьТоварыПоОтборуВидовЦен" Тогда
ЗаполнитьТоварыПоОтборуВидовЦен(Команда);
ИначеЕсли Команда.Имя = "ВыгрузитьВExcel" Тогда
ВыгрузитьВExcel(Команда);
ИначеЕсли Команда.Имя = "ЗагрузитьИзExcel" Тогда
ЗагрузитьИзExcel(Команда);
ИначеЕсли Команда.Имя = "ПоискПоШтрихкоду" Тогда
ПоискПоШтрихкодуВыполнить(Команда);
ИначеЕсли Команда.Имя = "ЗагрузитьДанныеИзТСД" Тогда
ЗагрузитьДанныеИзТСД(Команда);
ИначеЕсли Команда.Имя = "УдалитьТоварыБезИзмененныхЦен" Тогда
УдалитьТоварыБезИзмененныхЦен(Команда);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтотОбъект, Команда);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ)
Если Элемент.Имя = "ДеревоЦен" Тогда
ДеревоЦенПередУдалением(Элемент, Отказ);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтотОбъект, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если Элемент.Имя = "ДеревоЦен" Тогда
ДеревоЦенПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтотОбъект, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзменении_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПриИзменении.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Нажатие_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.Нажатие.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Команда_УстановитьДоступностьЭлементовПоСтатусуСервер(Команда)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.Команды.Свойство(Команда.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередНачаломИзменения_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломИзменения.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередУдалением_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Имя = Элемент.Имя;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередУдалением.Свойство(Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередНачаломДобавления_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ, Копирование, Родитель, Группа)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Имя = Элемент.Имя;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломДобавления.Свойство(Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса()
УстановитьДоступностьЭлементовПоСтатусуСервер();
ОбщегоНазначенияУТКлиент.ПослеИзмененияРеквизитаЗависящегоОтСтатуса(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область РаботаСБуферомОбмена
&НаСервере
Процедура СкопироватьСтрокиНаСервере(КопируемыйВидЦены)
ОписаниеТиповДенежногоПоля = ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля();
КопируемыеТовары = Новый ТаблицаЗначений;
КопируемыеТовары.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Если ИспользуетсяЦенообразование25 Тогда
КопируемыеТовары.Колонки.Добавить("ХарактеристикаЦО", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатурыДляЦенообразования"));
КопируемыеТовары.Колонки.Добавить("СерияЦО", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатурыДляЦенообразования"));
КопируемыеТовары.Колонки.Добавить("УпаковкаЦО", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
КопируемыеТовары.Колонки.Добавить("Цена", ОписаниеТиповДенежногоПоля);
КопируемыеТовары.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
Иначе
КопируемыеТовары.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
КопируемыеТовары.Колонки.Добавить("Цена", ОписаниеТиповДенежногоПоля);
КопируемыеТовары.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
КонецЕсли;
Для Каждого ТекСтрока Из Элементы.ДеревоЦен.ВыделенныеСтроки Цикл
ТекЭлементНоменклатура = ДеревоЦен.НайтиПоИдентификатору(ТекСтрока);
ПоместитьСтрокуВТабличнуюЧасть(КопируемыеТовары, ТекЭлементНоменклатура, КопируемыйВидЦены);
КонецЦикла;
РаботаСТабличнымиЧастями.ПоместитьТаблицуЗначенийВБуферОбмена(КопируемыеТовары);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбмена(ЗаполняемыйВидЦен)
Если ИспользуетсяЦенообразование25 Тогда
Колонки = "Номенклатура,Характеристика,ХарактеристикаЦО,УпаковкаЦО,СерияЦО,Упаковка,Цена";
Иначе
Колонки = "Номенклатура,Характеристика,Упаковка,Цена";
КонецЕсли;
ТаблицаТоваров = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(, Колонки);
Если Не ЗначениеЗаполнено(ТаблицаТоваров) Или ТаблицаТоваров.Колонки.Найти("Номенклатура") = Неопределено Тогда
Возврат;
КонецЕсли;
Если ИспользуетсяЦенообразование25 Тогда
НеобходимоДоЗаполнитьДанные = Ложь;
Если ТаблицаТоваров.Колонки.Найти("ХарактеристикаЦО") = Неопределено Тогда
НеобходимоДоЗаполнитьДанные = Истина;
ТаблицаТоваров.Колонки.Добавить("ХарактеристикаЦО", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатурыДляЦенообразования"));
КонецЕсли;
Если ТаблицаТоваров.Колонки.Найти("СерияЦО") = Неопределено Тогда
НеобходимоДоЗаполнитьДанные = Истина;
ТаблицаТоваров.Колонки.Добавить("СерияЦО", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатурыДляЦенообразования"));
КонецЕсли;
Если ТаблицаТоваров.Колонки.Найти("УпаковкаЦО") = Неопределено Тогда
НеобходимоДоЗаполнитьДанные = Истина;
ТаблицаТоваров.Колонки.Добавить("УпаковкаЦО", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
КонецЕсли;
Если НеобходимоДоЗаполнитьДанные Тогда
НастройкиОтбора = УстановкаЦенСервер.ПолучитьСтруктуруОтбораДанныхПоНоменклатуре();
ЗначенияОтбора = Новый Структура();
ЗначенияОтбора.Вставить("ПоМассивуНоменклатуры", ТаблицаТоваров.ВыгрузитьКолонку("Номенклатура"));
Если Не ТаблицаТоваров.Колонки.Найти("Характеристика") = Неопределено Тогда
ЗначенияОтбора.Вставить("ПоМассивуХарактеристик", ТаблицаТоваров.ВыгрузитьКолонку("Характеристика"));
КонецЕсли;
Если Не ТаблицаТоваров.Колонки.Найти("Серия") = Неопределено Тогда
ЗначенияОтбора.Вставить("ПоМассивуСерий", ТаблицаТоваров.ВыгрузитьКолонку("Серия"));
КонецЕсли;
НастройкиОтбора.Вставить("ЗначенияОтбора", ЗначенияОтбора);
НастройкиОтбора.Вставить("Дата", Объект.Дата);
НастройкиОтбора.Вставить("ИспользуетсяЦенообразование25", ИспользуетсяЦенообразование25);
НастройкиОтбора.Вставить("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьСерииНоменклатуры", ИспользоватьСерииНоменклатуры);
НастройкиОтбора.Вставить("ИспользоватьУпаковкиНоменклатуры", ИспользоватьУпаковкиНоменклатуры);
ТаблицаТоваров.Очистить();
УстановкаЦенСервер.ПолучитьДанныеПоНоменклатуре(НастройкиОтбора, ТаблицаТоваров);
КонецЕсли;
Иначе
Если ТаблицаТоваров.Колонки.Найти("Характеристика") = Неопределено Тогда
ТаблицаТоваров.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
КонецЕсли;
КонецЕсли;
Если ТаблицаТоваров.Колонки.Найти("Цена") = Неопределено Тогда
ТаблицаТоваров.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
КонецЕсли;
УстановкаЦенСервер.ДобавитьТоварыПоОтбору(ЭтотОбъект, Неопределено, ТаблицаТоваров, ЗаполняемыйВидЦен);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьКомандБуфераОбмена()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("ТоварыВставитьСтроки");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
РаботаСТабличнымиЧастями.ЕстьСтрокиВБуфереОбмена());
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКомандБуфераОбменаНаКлиенте()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("ТоварыВставитьСтроки");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", Истина);
КонецПроцедуры
&НаСервере
Процедура ПоместитьСтрокуВТабличнуюЧасть(ПомещаемыеТовары, СтрокаЦен, ВидЦены)
НоваяСтрока = ПомещаемыеТовары.Добавить();
НоваяСтрока.Номенклатура = СтрокаЦен.Номенклатура;
Если ИспользуетсяЦенообразование25 Тогда
НоваяСтрока.ХарактеристикаЦО = СтрокаЦен.ХарактеристикаЦО;
НоваяСтрока.СерияЦО = СтрокаЦен.СерияЦО;
НоваяСтрока.УпаковкаЦО = СтрокаЦен.УпаковкаЦО;
Иначе
НоваяСтрока.Характеристика = СтрокаЦен.Характеристика;
КонецЕсли;
ИмяКолонки = "ВидЦены" + СтрЗаменить(ВидЦены.УникальныйИдентификатор(), "-", "");
Если СтрокаЦен.Свойство(ИмяКолонки) Тогда
НоваяСтрока.Цена = СтрокаЦен[ИмяКолонки];
КонецЕсли;
Если ИспользоватьУпаковкиНоменклатуры Тогда
ИмяКолонкиУпаковка = "Упаковка" + ИмяКолонки;
Если СтрокаЦен.Свойство(ИмяКолонки) Тогда
НоваяСтрока.Упаковка = СтрокаЦен[ИмяКолонкиУпаковка];
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьНастройкиВидовЦен(Команда)
Если ЗначениеЗаполнено(Объект.Ссылка)
И Не Модифицированность Тогда
Оповещение = Новый ОписаниеОповещения("ОбновитьНастройкиВидовЦенФрагмент", ЭтотОбъект);
ПоказатьВопрос(Оповещение,
НСтр("ru = 'Настройки видов цен будут перезаполнены! Продолжить?'"),
РежимДиалогаВопрос.ДаНет,,
КодВозвратаДиалога.Нет,
НСтр("ru = 'Обновление видов цен'"),
);
Иначе
ОбновитьНастройкиВидовЦенФрагмент(КодВозвратаДиалога.Да);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьНастройкиВидовЦенФрагмент(Значение, ДополнительныеПараметры = Неопределено) Экспорт
Если Значение <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если Элементы.ВыбранныеЦены.ТекущиеДанные <> Неопределено Тогда
ТекущийВидЦен = Элементы.ВыбранныеЦены.ТекущиеДанные.Ссылка;
Иначе
ТекущийВидЦен = Неопределено;
КонецЕсли;
ОбновитьНастройкиВидовЦенНаСервере();
ВыбранныеЦеныИзменены = (ДеревоЦен.ПолучитьЭлементы().Количество() > 0);
Если ТекущийВидЦен <> Неопределено Тогда
ПоискТекущейСтроки = ВыбранныеЦены.НайтиСтроки(Новый Структура("Ссылка", ТекущийВидЦен));
Если ПоискТекущейСтроки.Количество() > 0 Тогда
Элементы.ВыбранныеЦены.ТекущаяСтрока = ПоискТекущейСтроки.Получить(0).ПолучитьИдентификатор();
КонецЕсли;
КонецЕсли;
Модифицированность = Истина;
ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки обновлены'"),, НСтр("ru = 'Действие выполнено'"), БиблиотекаКартинок.Успешно32);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенХарактеристика.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ИндексКартинки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 2;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.Характеристика");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦен.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ИндексКартинки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 2;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Gray);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Основание.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ДокументОснование");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеЦеныСпособЗаданияЦены.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ДокументОснование");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеЦены.УстанавливатьЦенуПриВводеНаОсновании");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Заполнять по документу основанию'"));
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект,
"ДеревоЦенХарактеристика",
"ДеревоЦен.ХарактеристикиИспользуются");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенНоменклатура.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьОднуКолонкуДляКлючаЦен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ХарактеристикаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.Характеристика");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.СерияЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.УпаковкаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенХарактеристикаЦО.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьОднуКолонкуДляКлючаЦен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.СерияЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.УпаковкаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЦенСерияЦО.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьОднуКолонкуДляКлючаЦен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.УпаковкаЦО");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеЦены.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеЦены.ПометкаУдаления");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеЦены.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеЦены.ЗапрещенныйВидЦены");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Gray);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'ограничение доступа'"));
КонецПроцедуры
&НаСервере
Процедура ПереформироватьТаблицуЦен(ПересчитатьЦены)
УстановкаЦенСервер.ПереформироватьТаблицуЦен(ЭтотОбъект, ПересчитатьЦены);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоЦенЦенаПриИзмененииКлиент(Элемент)
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяКолонкиУпаковка = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "ВидЦены", "Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(Элемент.Имя, "ДеревоЦен" + "ВидЦены", "ЗапретРедактирования" + "ВидЦены");
ИзмененПроцент = Ложь;
ИзмененаСумма = Ложь;
ПроцентИзменения = 0;
СуммаИзменения = 0;
ИмяТекущейКолонки = СтрЗаменить(Элемент.Имя, "ДеревоЦен", "");
Если СтрНайти(ИмяТекущейКолонки, "ПроцентИзменения" + "ВидЦены") Тогда
ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "ПроцентИзменения" + "ВидЦены", "ВидЦены");
ТекущиеДанные[ИмяТекущейКолонки] = Окр(
ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * ((ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] / 100) + 1),
15,
2);
ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки];
ИзмененПроцент = Истина;
ПроцентИзменения = ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки];
ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "ПроцентИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(СтрЗаменить(Элемент.Имя, "ПроцентИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"ЗапретРедактирования" + "ВидЦены");
КонецЕсли;
Если СтрНайти(ИмяТекущейКолонки, "СуммаИзменения" + "ВидЦены") Тогда
ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "СуммаИзменения" + "ВидЦены", "ВидЦены");
ТекущиеДанные[ИмяТекущейКолонки] = ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] + ТекущиеДанные["СуммаИзменения" + ИмяТекущейКолонки];
Если ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] <> 0 Тогда
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] / ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * 100;
Иначе
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
КонецЕсли;
ИзмененаСумма = Истина;
СуммаИзменения = ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки];
ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "СуммаИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(СтрЗаменить(Элемент.Имя, "СуммаИзменения" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"ЗапретРедактирования" + "ВидЦены");
КонецЕсли;
Если СтрНайти(ИмяТекущейКолонки, "Формула" + "ВидЦены") Тогда
ИмяТекущейКолонки = СтрЗаменить(ИмяТекущейКолонки, "Формула" + "ВидЦены", "ВидЦены");
ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки];
Если ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] <> 0 Тогда
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки] / ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] * 100;
Иначе
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
КонецЕсли;
НоваяФормула = ТекущиеДанные["Формула"+ИмяТекущейКолонки];
ИмяКолонкиУпаковка = СтрЗаменить(СтрЗаменить(Элемент.Имя, "Формула" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"Упаковка" + "ВидЦены");
ИмяКолонкиЗапретаРедактирования = СтрЗаменить(СтрЗаменить(Элемент.Имя, "Формула" + "ВидЦены", "ВидЦены"),
"ДеревоЦен" + "ВидЦены",
"ЗапретРедактирования" + "ВидЦены");
КонецЕсли;
Если ТекущиеДанные[ИмяКолонкиЗапретаРедактирования] Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = ДеревоЦен.НайтиПоИдентификатору(ТекущиеДанные.ПолучитьИдентификатор());
ТекущиеДанные["ИзмененаВручную" + ИмяТекущейКолонки] =
(ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки] <> 0);
ТекущиеДанные["ИзмененаАвтоматически" + ИмяТекущейКолонки] = Ложь;
ТекущиеДанные["СуммаИзменения"+ИмяТекущейКолонки] = ТекущиеДанные[ИмяТекущейКолонки]
- ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки];
Если ТекущиеДанные["СтараяЦена"+ИмяТекущейКолонки] <> 0 Тогда
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = Окр(
100 * (ТекущиеДанные[ИмяТекущейКолонки] - ТекущиеДанные["СтараяЦена"+ИмяТекущейКолонки])
/ ТекущиеДанные["СтараяЦена" + ИмяТекущейКолонки], 5, 2);
Иначе
ТекущиеДанные["ПроцентИзменения"+ИмяТекущейКолонки] = 0;
КонецЕсли;
МассивСтруктурУпаковокНоменклатуры = Новый Массив;
СоответствиеКоэффициентовУпаковокНоменклатуры = Неопределено;
Если ИспользоватьУпаковкиНоменклатуры Тогда
ТекущееЗначениеУпаковки = ТекущиеДанные[ИмяКолонкиУпаковка];
Если ЗначениеЗаполнено(ТекущееЗначениеУпаковки) Тогда
Структура = УстановкаЦенКлиентСервер.ИнициализироватьОписаниеУпаковкиНоменклатуры();
Структура.Номенклатура = ТекущиеДанные.Номенклатура;
Структура.Упаковка = ТекущееЗначениеУпаковки;
МассивСтруктурУпаковокНоменклатуры.Добавить(Структура);
КонецЕсли;
ПараметрыВызова = УстановкаЦенКлиент.ПараметрыИзмененияВЭлементеДереваЦен("ЗаполнитьУпаковкиНоменклатуры");
ПараметрыВызова.ИмяКолонкиУпаковка = ИмяКолонкиУпаковка;
ПараметрыВызова.ИмяКолонкиЗапретаРедактирования = ИмяКолонкиЗапретаРедактирования;
ПараметрыВызова.МассивСтруктурУпаковокНоменклатуры = МассивСтруктурУпаковокНоменклатуры;
УстановкаЦенКлиент.ПрименитьИзмененияВДеревеЦен(ТекущаяСтрока, ПараметрыВызова);
Если МассивСтруктурУпаковокНоменклатуры.Количество() > 0 Тогда
СоответствиеКоэффициентовУпаковокНоменклатуры = КоэффициентыУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры);
КонецЕсли;
КонецЕсли;
КоэффициентУпаковкиЦеныИсточника = 1;
Если ИспользоватьУпаковкиНоменклатуры Тогда
Если ЗначениеЗаполнено(ТекущееЗначениеУпаковки) И СоответствиеКоэффициентовУпаковокНоменклатуры <> Неопределено Тогда
РезультатПоиска = УстановкаЦенКлиентСервер.ПолучитьКоэффициентУпаковкиНоменклатуры(СоответствиеКоэффициентовУпаковокНоменклатуры,
ТекущиеДанные.Номенклатура,
ТекущееЗначениеУпаковки);
Если РезультатПоиска <> Неопределено Тогда
КоэффициентУпаковкиЦеныИсточника = РезультатПоиска;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ТекущееЗначение = ТекущиеДанные[ИмяТекущейКолонки];
ПараметрыВызова = УстановкаЦенКлиент.ПараметрыИзмененияВЭлементеДереваЦен("ИзменитьДанныеВСтрокеДереваЦен");
ПараметрыВызова.ИмяКолонкиУпаковка = ИмяКолонкиУпаковка;
ПараметрыВызова.ИмяКолонкиЗапретаРедактирования = ИмяКолонкиЗапретаРедактирования;
ПараметрыВызова.СоответствиеКоэффициентовУпаковокНоменклатуры = СоответствиеКоэффициентовУпаковокНоменклатуры;
ПараметрыВызова.ТекущееЗначениеУпаковки = ТекущееЗначениеУпаковки;
ПараметрыВызова.ТекущееЗначение = ТекущееЗначение;
ПараметрыВызова.КоэффициентУпаковкиЦеныИсточника = КоэффициентУпаковкиЦеныИсточника;
ПараметрыВызова.ИмяТекущейКолонки = ИмяТекущейКолонки;
ПараметрыВызова.НоваяФормула = НоваяФормула;
ПараметрыВызова.ПроцентИзменения = ПроцентИзменения;
ПараметрыВызова.СуммаИзменения = СуммаИзменения;
ПараметрыВызова.ИзмененПроцент = ИзмененПроцент;
ПараметрыВызова.ИзмененаСумма = ИзмененаСумма;
ПараметрыВызова.ИзмененаФормула = Ложь;
ПараметрыВызова.Номенклатура = ТекущиеДанные.Номенклатура;
ПараметрыВызова.ИспользоватьУпаковкиНоменклатуры = ИспользоватьУпаковкиНоменклатуры;
УстановкаЦенКлиент.ПрименитьИзмененияВДеревеЦен(ТекущаяСтрока, ПараметрыВызова);
РассчитатьЦеныПоИдентификаторуСтрокиНаСервере(ТекущиеДанные.ПолучитьИдентификатор(),ИмяТекущейКолонки);
КонецПроцедуры
&НаСервере
Процедура ОбновитьСтарыеЦеныНоменклатурыНаСервере()
УстановкаЦенСервер.ОбновитьСтарыеЦеныНоменклатуры(ЭтотОбъект);
КонецПроцедуры
&НаСервереБезКонтекста
Функция КоэффициентыУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры)
Возврат УстановкаЦенСервер.СоответствиеКоэффициентовКоллекцииУпаковокНоменклатуры(МассивСтруктурУпаковокНоменклатуры);
КонецФункции
&НаСервере
Процедура ИзменитьЦеныНаПроцентНаСервере(ПараметрыРасчета)
УстановкаЦенСервер.ИзменитьЦеныНаПроцент(ЭтотОбъект, ПараметрыРасчета);
КонецПроцедуры
&НаСервере
Процедура ДобавитьТоварыПоОтборуНаСервере(АдресВоВременномХранилище)
УстановкаЦенСервер.ДобавитьТоварыПоОтбору(ЭтотОбъект, АдресВоВременномХранилище);
КонецПроцедуры
&НаСервере
Процедура РассчитатьЦеныНаСервере(ПараметрыРасчета)
УстановкаЦенСервер.РассчитатьЦены(ЭтотОбъект, ПараметрыРасчета);
КонецПроцедуры
&НаСервере
Процедура РассчитатьЦеныПоИдентификаторуСтрокиНаСервере(ИдентификаторСтроки, ИзмененноеПоле)
Если ИспользуетсяЦенообразование25 Тогда
УстановкаЦенСервер.РассчитатьЦеныПоИдентификаторуСтроки2_5(ЭтотОбъект, ИдентификаторСтроки,,ИзмененноеПоле);
Иначе
УстановкаЦенСервер.РассчитатьЦеныПоИдентификаторуСтроки(ЭтотОбъект, ИдентификаторСтроки,,ИзмененноеПоле);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьИзExcelНаСервере(Параметр)
Возврат УстановкаЦенСервер.ЗагрузитьИзExcel(ЭтотОбъект, Параметр.ВидыЦен, Параметр.Товары);
КонецФункции
&НаСервере
Процедура ИзменитьЦеныНаСервере(ПараметрыРасчета)
УстановкаЦенСервер.ИзменитьЦены(ЭтотОбъект, ПараметрыРасчета);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьКолонокРедактирования(ИспользоватьРежимРедактирования)
Для Каждого ТекЭлемент Из Элементы.ДеревоЦен.ПодчиненныеЭлементы Цикл
Если СтрНайти(ТекЭлемент.Имя, "ГруппаЦены" + "ВидЦены") Тогда
ПозицияПодстроки = СтрНайти(ТекЭлемент.Имя, "ВидЦены");
ИмяКолонки = Прав(ТекЭлемент.Имя, СтрДлина(ТекЭлемент.Имя)
- ПозицияПодстроки + 1);
Для Каждого ВложенныйЭлемент Из ТекЭлемент.ПодчиненныеЭлементы Цикл
Если СтрНайти(ВложенныйЭлемент.Имя, "ГруппаТехническая") Тогда
Для Каждого ВложенныйЭлементПоТехническойГруппе Из ВложенныйЭлемент.ПодчиненныеЭлементы Цикл
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "СтараяЦена") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = ПоказыватьДействующиеЦены;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "Формула") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = ПоказыватьФормулы;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "ПроцентИзменения") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = ПоказыватьПроцентНаценки;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "СуммаИзменения") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = ПоказыватьИзменениеЦены;
КонецЕсли;
Если СтрНайти(ВложенныйЭлементПоТехническойГруппе.Имя, "Валюта") Тогда
ВложенныйЭлементПоТехническойГруппе.Видимость = ПоказыватьВалюту;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если СтрНайти(ВложенныйЭлемент.Имя, "ГруппаУпаковки") Тогда
ВложенныйЭлемент.Видимость = ПоказыватьЕдиницыИзмерения;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Элементы.ДеревоЦенХарактеристика.Видимость = Не ИспользуетсяЦенообразование25;
Элементы.ДеревоЦенХарактеристикаЦО.Видимость = ИспользуетсяЦенообразование25;
Элементы.ДеревоЦенСерияЦО.Видимость = ИспользуетсяЦенообразование25;
Элементы.ДеревоЦенУпаковкаЦО.Видимость = ИспользуетсяЦенообразование25;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройкиФормыНаСервере()
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("ПоказыватьДействующиеЦены", ПоказыватьДействующиеЦены);
СтруктураДанных.Вставить("ПоказыватьИзменениеЦены", ПоказыватьИзменениеЦены);
СтруктураДанных.Вставить("ПоказыватьПроцентНаценки", ПоказыватьПроцентНаценки);
СтруктураДанных.Вставить("ПоказыватьФормулы", ПоказыватьФормулы);
СтруктураДанных.Вставить("ПоказыватьВалюту", ПоказыватьВалюту);
СтруктураДанных.Вставить("ПоказыватьЕдиницыИзмерения", ПоказыватьЕдиницыИзмерения);
СтруктураДанных.Вставить("ОтображатьВлияющиеЦены", ОтображатьВлияющиеЦены);
СтруктураДанных.Вставить("ИспользоватьОднуКолонкуДляКлючаЦен", ИспользоватьОднуКолонкуДляКлючаЦен);
СтруктураДанных.Вставить("ЗафиксироватьКолонкуНоменклатуры", ЗафиксироватьКолонкуНоменклатуры);
СтруктураДанных.Вставить("РассчитыватьАвтоматически", РассчитыватьАвтоматически);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Документ.УстановкаЦенНоменклатуры", "Документ.УстановкаЦенНоменклатуры",СтруктураДанных);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура НастроитьКолонкиКлючаЦен()
Если (ИспользоватьОднуКолонкуДляКлючаЦен) Тогда
Элементы.ДеревоЦенГруппаНоменклатура.Группировка = ГруппировкаКолонок.ВЯчейке;
Иначе
Элементы.ДеревоЦенГруппаНоменклатура.Группировка = ГруппировкаКолонок.Горизонтальная;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьВерсиюЦенообразования(Ссылка, КоличествоТовары, КоличествоТовары25)
Если Не ЗначениеЗаполнено(Ссылка) Тогда
Возврат;
КонецЕсли;
ИспользуетсяЦенообразование25Документ = Неопределено;
Если КоличествоТовары = 0 И КоличествоТовары25 <> 0 Тогда
ИспользуетсяЦенообразование25Документ = Истина;
ИначеЕсли КоличествоТовары <> 0 И КоличествоТовары25 = 0 Тогда
ИспользуетсяЦенообразование25Документ = Ложь;
КонецЕсли;
Если ИспользуетсяЦенообразование25Документ <> Неопределено Тогда
ИспользуетсяЦенообразование25ИБ = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(ТекущаяДатаСеанса());
Если ИспользуетсяЦенообразование25ИБ <> ИспользуетсяЦенообразование25Документ Тогда
ТекстСообщения = НСтр("ru = 'Версия ценообразования документа отличается от версии ценообразования, используемой в информационной базе.
|Не рекомендуется изменять этот документ, выполнять копирование/вставку строк и иные виды взаимодействия с другими документами.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьПараметрыФормыРедактированияЦены(ИмяЭлемента)
ИмяТекущейКолонки = СтрЗаменить(ИмяЭлемента, "ДеревоЦен", "");
ФормулаВидаЦен = ПолучитьФормулуВидаЦен(ИмяЭлемента);
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяТекущейКолонки);
Если ВидЦены <> Неопределено Тогда
ВлияющиеЦены = ВидЦены.ВлияющиеЦены;
Иначе
ВлияющиеЦены = новый СписокЗначений;
КонецЕсли;
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("ИмяЭлементаВозврата", ИмяТекущейКолонки);
СтруктураВозврата.Вставить("Формула", ФормулаВидаЦен);
СтруктураВозврата.Вставить("ДеревоОперандов", ПоместитьВлияющиеВидыЦенВХранилище(ВлияющиеЦены));
СтруктураВозврата.Вставить("ОперандыЗаголовок", НСтр("ru = 'Доступные виды цен'"));
СтруктураВозврата.Вставить("Операторы", АдресХранилищаДереваОператоров);
СтруктураВозврата.Вставить("ТипРезультата", Новый ОписаниеТипов("Число"));
СтруктураВозврата.Вставить("ЭтоРасчетЦен", Истина);
Возврат СтруктураВозврата;
КонецФункции
&НаСервере
Функция ПоместитьВлияющиеВидыЦенВХранилище(ВлияющиеЦены)
Дерево = РаботаСФормулами.ПолучитьПустоеДеревоОперандов();
Для Каждого Элемент Из ВлияющиеЦены Цикл
НайденныеВидыЦен = ВыбранныеЦены.НайтиСтроки(Новый Структура("Ссылка", Элемент.Значение));
Если НайденныеВидыЦен.Количество() = 1 Тогда
СтрокаВидыЦены = НайденныеВидыЦен[0];
СтрокаОперанда = РаботаСФормулами.НоваяСтрокаДереваОперанда(Дерево);
СтрокаОперанда.Идентификатор = СтрокаВидыЦены.Идентификатор;
СтрокаОперанда.Представление = Строка(СтрокаВидыЦены.Ссылка);
СтрокаОперанда.ПометкаУдаления = СтрокаВидыЦены.ПометкаУдаления;
СтрокаОперанда.ТипЗначения = Новый ОписаниеТипов("Число");
КонецЕсли;
КонецЦикла;
АдресВХранилище = ПоместитьВоВременноеХранилище(Дерево, УникальныйИдентификатор);
Возврат АдресВХранилище;
КонецФункции
&НаКлиенте
Функция ПолучитьФормулуВидаЦен(ИмяЭлемента, ВидЦены = Неопределено)
ФормулаВидаЦен = "";
ТекущиеДанные = Элементы.ДеревоЦен.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат "";
КонецЕсли;
ПозицияПодстроки = СтрНайти(ИмяЭлемента, "ВидЦены");
ИмяКолонки = Прав(ИмяЭлемента, СтрДлина(ИмяЭлемента) - ПозицияПодстроки + 1);
ФормулаВидаЦен = ТекущиеДанные["Формула" + ИмяКолонки];
СтруктураЦеноваяГруппа = Новый Структура("ЦеноваяГруппа", ТекущиеДанные.ЦеноваяГруппа);
Если НЕ ЗначениеЗаполнено(ФормулаВидаЦен) Тогда
Если ВидЦены = Неопределено Тогда
ВидЦены = ПолучитьВидЦеныПоИмениКолонки(ИмяЭлемента);
КонецЕсли;
Если Не ВидЦены = Неопределено Тогда
Если ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.РассчитыватьПоФормуламОтДругихВидовЦен") Тогда
ФормулаВидаЦен = ВидЦены.Формула;
ЦеновыеГруппыАлгоритмов = ВидЦены.ЦеновыеГруппы.НайтиСтроки(СтруктураЦеноваяГруппа);
Если ЦеновыеГруппыАлгоритмов.Количество() > 0 Тогда
ФормулаВидаЦен = ЦеновыеГруппыАлгоритмов[0].Формула;
КонецЕсли;
ИначеЕсли ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаДругойВидЦен") Тогда
ФормулаВидаЦен = "[" + ВидЦены.БазовыйВидЦены + "]*" + Формат(((ВидЦены.Наценка/100)+1),"ЧРД=.; ЧГ=0");
ЦеновыеГруппыАлгоритмов = ВидЦены.ЦеновыеГруппы.НайтиСтроки(СтруктураЦеноваяГруппа);
Если ЦеновыеГруппыАлгоритмов.Количество() > 0 Тогда
ФормулаВидаЦен = "[" + ЦеновыеГруппыАлгоритмов[0].БазовыйВидЦены + "]*" + Формат(((ЦеновыеГруппыАлгоритмов[0].Наценка/100)+1),"ЧРД=.; ЧГ=0");
КонецЕсли;
ИначеЕсли ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаЦенуПоступления")
Или ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.НаценкаНаЦенуВводаОстатков")
Или ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоКонкурентам")
Или ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоПоставщикам")
Или ВидЦены.СпособЗаданияЦены = ПредопределенноеЗначение("Перечисление.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоСебестоимости") Тогда
ФормулаВидаЦен = "[" + ВидЦены.Ссылка + "]*" + Формат(((ВидЦены.Наценка/100)+1),"ЧРД=.; ЧГ=0");
ЦеновыеГруппыАлгоритмов = ВидЦены.ЦеновыеГруппы.НайтиСтроки(СтруктураЦеноваяГруппа);
Если ЦеновыеГруппыАлгоритмов.Количество() > 0 Тогда
ФормулаВидаЦен = "[" + ВидЦены.Ссылка + "]*" + Формат(((ЦеновыеГруппыАлгоритмов[0].Наценка/100)+1),"ЧРД=.; ЧГ=0");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ФормулаВидаЦен;
КонецФункции
&НаКлиенте
Функция ПолучитьВидЦеныПоИмениКолонки(ИмяЭлемента)
ВидЦены = Неопределено;
ПозицияПодстроки = СтрНайти(ИмяЭлемента, "ВидЦены");
ИмяКолонки = Прав(ИмяЭлемента, СтрДлина(ИмяЭлемента) - ПозицияПодстроки + 1);
НайденныеВидыЦен = ВыбранныеЦены.НайтиСтроки(Новый Структура("ИмяКолонки", ИмяКолонки));
Если НайденныеВидыЦен.Количество() = 1 Тогда
ВидЦены = НайденныеВидыЦен[0];
КонецЕсли;
Возврат ВидЦены;
КонецФункции
&НаСервере
Процедура УстановитьПометкуИзмененныхФормулСервер()
УстановкаЦенСервер.УстановитьПометкуИзмененныхФормул(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбновитьНастройкиВидовЦенНаСервере()
ВыбранныеСтроки = Новый Соответствие;
Для Каждого СтрокаВидовЦен Из ВыбранныеЦены Цикл
Если СтрокаВидовЦен.Выбрана
Или СтрокаВидовЦен.Редактировать Тогда
ВыбранныеСтроки.Вставить(СтрокаВидовЦен.Ссылка,
Новый Структура("Выбрана, Редактировать",
СтрокаВидовЦен.Выбрана, СтрокаВидовЦен.Редактировать)
);
КонецЕсли;
КонецЦикла;
УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(ЭтотОбъект);
Для Каждого СтрокаВидовЦен Из ВыбранныеЦены Цикл
ЗначенияКолонок = ВыбранныеСтроки.Получить(СтрокаВидовЦен.Ссылка);
Если ЗначенияКолонок <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(СтрокаВидовЦен, ЗначенияКолонок);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьВалютыВидовЦен(ТекущаяСтрока, ОчищатьЦену)
ВидыЦен = УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ЭтотОбъект);
Для Каждого ВидЦены Из ВидыЦен Цикл
ИмяКолонки = ВидЦены.ИмяКолонки;
ИмяКолонкиУпаковка = "Упаковка" + ИмяКолонки;
ИмяКолонкиВалюта = "Валюта" + ИмяКолонки;
ЦеновыеГруппыВалют = ВидЦены.Валюты.НайтиСтроки(Новый Структура("ЦеноваяГруппа", ТекущаяСтрока.ЦеноваяГруппа));
Если ЦеновыеГруппыВалют.Количество() > 0 Тогда
ТекущаяСтрока[ИмяКолонкиВалюта] = ЦеновыеГруппыВалют[0].Валюта;
Иначе
ТекущаяСтрока[ИмяКолонкиВалюта] = ВидЦены.Валюта;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущаяСтрока[ИмяКолонки]) И ОчищатьЦену Тогда
ТекущаяСтрока[ИмяКолонки] = 0;
КонецЕсли;
Если ИспользоватьУпаковкиНоменклатуры И ЗначениеЗаполнено(ТекущаяСтрока[ИмяКолонкиУпаковка]) Тогда
ТекущаяСтрока[ИмяКолонкиУпаковка] = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ИзменитьЦеныНовыйВариантНаКлиентеЗавершение(Результат, ДополнительныеПараметры = Неопределено) Экспорт
Если Результат <> Неопределено Тогда
Если Результат.ВариантИзмененияЦены = 1 Тогда
ИзменитьЦеныНаПроцентНаКлиентеЗавершение(Результат, ДополнительныеПараметры);
ИначеЕсли Результат.ВариантИзмененияЦены = 2 ИЛИ Результат.ВариантИзмененияЦены = 3 Тогда
ИзменитьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры) ;
ИначеЕсли Результат.ВариантИзмененияЦены = 4 Тогда
ОкруглитьРучныеЦеныЗавершение(Результат, ДополнительныеПараметры);
ИначеЕсли Результат.ВариантИзмененияЦены = 5 Тогда
РассчитатьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьЦеныНаКлиентеЗавершение(Результат, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыРасчета = Результат;
Если ПараметрыРасчета <> Неопределено Тогда
ОчиститьСообщения();
УстановитьВидимостьКолонокРедактирования(Истина);
РассчитатьЦеныНаСервере(ПараметрыРасчета);
СтрокаИнформации = УстановкаЦенКлиент.ИнформацияТекущейСтроки(
Элементы,
ВыбранныеЦены,
Объект.Дата,
ТекущаяДата,
ИспользоватьХарактеристикиНоменклатуры);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьМассивВалютПоВидамЦен()
Дерево = РеквизитФормыВЗначение("ДеревоЦен");
ТаблицаВалютПоВидамЦен = Новый ТаблицаЗначений;
ТаблицаВалютПоВидамЦен.Колонки.Добавить("ВидЦены", Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"));
ТаблицаВалютПоВидамЦен.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
ТаблицаВалютПоВидамЦен = ЗаполнитьТаблицуОбходомДерева(Дерево);
МассивВалютПоВидамЦен = ПолучитьМассивСтрокИзТаблицыЗначений(ТаблицаВалютПоВидамЦен);
Возврат МассивВалютПоВидамЦен;
КонецФункции
&НаСервере
Процедура ЗаполнитьМассивОбходомДерева(Дерево, ИмяКолонкиВалюты, МассивВалют)
Для Каждого Стр Из Дерево.Строки Цикл
Если Стр.Строки.Количество()>0 Тогда
ЗаполнитьМассивОбходомДерева(Стр ,ИмяКолонкиВалюты, МассивВалют);
Иначе
ВалютаСтроки = Стр[ИмяКолонкиВалюты];
Если МассивВалют.Найти(ВалютаСтроки)= Неопределено Тогда
МассивВалют.Добавить(ВалютаСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьМассивСтрокИзТаблицыЗначений(ТаблицаЗначений)
МассивСтрок = Новый Массив;
Для каждого Стр из ТаблицаЗначений Цикл
МассивСтрок.Добавить(Новый Структура("ВидЦены, Валюта",Стр.ВидЦены,Стр.Валюта));
КонецЦикла;
Возврат МассивСтрок;
КонецФункции
&НаСервере
Функция ЗаполнитьТаблицуОбходомДерева(Дерево)
ТаблицаВалютПоВидамЦен = Новый ТаблицаЗначений();
ТаблицаВалютПоВидамЦен.Колонки.Добавить("ВидЦены");
ТаблицаВалютПоВидамЦен.Колонки.Добавить("Валюта");
Для Каждого Колонка Из Дерево.Колонки Цикл
ТаблицаВалютыВидаЦены = Новый ТаблицаЗначений();
Если СтрНайти(Колонка.Имя, "ВидЦены")>0 Тогда
ПозицияПодстроки = СтрНайти(Колонка.Имя, "ВидЦены");
Если ПозицияПодстроки <> 0 Тогда
ИмяКолонки = Прав(Колонка.Имя, СтрДлина(Колонка.Имя) - ПозицияПодстроки + 1);
КонецЕсли;
Если ИмяКолонки = Колонка.Имя Тогда
НайденныеВидыЦен = ВыбранныеЦены.НайтиСтроки(Новый Структура("ИмяКолонки", ИмяКолонки));
Если НайденныеВидыЦен.Количество() > 0 Тогда
ВидЦены = НайденныеВидыЦен[0].Ссылка;
ИмяКолонкиВалютыВидаЦены = "Валюта" + ИмяКолонки;
МассивВалютКолонки = Дерево.Строки.ВыгрузитьКолонку(ИмяКолонкиВалютыВидаЦены);
ТаблицаВалютыВидаЦены.Колонки.Добавить("ВидЦены", Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"));
ТаблицаВалютыВидаЦены.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
Для Инд=1 По МассивВалютКолонки.Количество() Цикл
ТаблицаВалютыВидаЦены.Добавить();
КонецЦикла;
ТаблицаВалютыВидаЦены.ЗаполнитьЗначения(ВидЦены,"ВидЦены");
ТаблицаВалютыВидаЦены.ЗагрузитьКолонку(МассивВалютКолонки,"Валюта");
ТаблицаВалютыВидаЦены.Свернуть("ВидЦены,Валюта",);
КонецЕсли;
Для каждого Стр Из ТаблицаВалютыВидаЦены Цикл
СтрНов = ТаблицаВалютПоВидамЦен.Добавить();
ЗаполнитьЗначенияСвойств(СтрНов,Стр);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаВалютПоВидамЦен;
КонецФункции
#КонецОбласти
СтрокаДобавлена = Ложь;