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