Подбор товаров в документ закупки / Форма / Модуль формы

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

&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СтрокаПоискаНоменклатураПартнераАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
	
	СпискиВыбораКлиентСервер.АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка);
	
КонецПроцедуры

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

&НаКлиенте
Процедура НайтиНоменклатуруПоТочномуСоответствиюПриИзменении(Элемент)
	
	ВыполнитьПоискНоменклатуры();
	
КонецПроцедуры

&НаКлиенте
Процедура НайтиХарактеристикиПоТочномуСоответствиюПриИзменении(Элемент)
	
	ВыполнитьПоискХарактеристик();
	
КонецПроцедуры

&НаКлиенте
Процедура НайтиНоменклатуруПартнераПоТочномуСоответствиюПриИзменении(Элемент)
	
	ВыполнитьПоискНоменклатурыПартнера()
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ИнформационнаяНадписьНажатие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПодборТоваровКлиент.ПриНажатииНаИнформационнуюНадпись(ЭтаФорма, Объект);
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ОтборЦенаОтПоставщикаПриИзменении(Элемент)
	
	ПриИзмененииДиапазонаЦенПоставщикаНаСервере();

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

&НаКлиенте
Процедура ОтборЦенаДоПоставщикаПриИзменении(Элемент)
	
	ПриИзмененииДиапазонаЦенПоставщикаНаСервере();

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДеревоОтборовПередНачаломИзменения(Элемент, Отказ)
	
	ПодборТоваровКлиент.ДеревоОтборовПередНачаломИзменения(ЭтаФорма, Отказ);
	
КонецПроцедуры

&НаКлиенте
Процедура ДеревоОтборовОтборПриИзменении(Элемент)
	
	ПодборТоваровКлиент.ДеревоОтборовОтборПриИзменении(ЭтаФорма, Новый ОписаниеОповещения("ДеревоОтборовПриИзмененииЗавершение", ЭтотОбъект));
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыИерархияНоменклатуры

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

&НаКлиенте
Процедура ИерархияНоменклатурыПриАктивизацииСтроки(Элемент)
	
	ПодборТоваровКлиент.ПриАктивизацииСтрокиИерархииНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыИерархияНоменклатурыПартнера

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

&НаКлиенте
Процедура ИерархияНоменклатурыПартнераПриАктивизацииСтроки(Элемент)
	
	ПодборТоваровКлиент.ПриАктивизацииСтрокиИерархииНоменклатурыПартнера(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыОстаткиТоваровПоставщика

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПодборТаблицаНоменклатурыПартнера

&НаКлиенте
Процедура ПодборТаблицаНоменклатурыПартнераПриАктивизацииСтроки(Элемент)
	
	ПодборТоваровКлиент.ПриАктивизацииСтрокиНоменклатурыПартнера(ЭтаФорма, Элемент);
	
КонецПроцедуры

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПодборТаблицаХарактеристики

&НаКлиенте
Процедура ПодборТаблицаХарактеристикиПриАктивизацииСтроки(Элемент)
	
	ПодборТоваровКлиент.ПриАктивизацииСтрокиТаблицыХарактеристик(ЭтаФорма, Элемент);
	
КонецПроцедуры

// Функция-конструктор дополнительных параметров 
// Возвращаемое значение:
// 	Структура - дополнительные параметры:
// * Элемент - ГруппаФормы, ТаблицаФормы, ПолеФормы, КнопкаФормы - Элемент формы
&НаКлиенте
Функция ДополнительныеПараметрыОбработкиЗавершения()
	
	Результат = Новый Структура;
	Результат.Вставить("Элемент");
	Возврат Результат;
	
КонецФункции

&НаКлиенте
Процедура ПодборТаблицаХарактеристикиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ДополнительныеПараметры = ДополнительныеПараметрыОбработкиЗавершения();
	ДополнительныеПараметры.Элемент = Элемент;
	
	// Проверить выбранную строку характеристик.
	Оповещение = Новый ОписаниеОповещения("ПодборТаблицаХарактеристикиВыборЗавершение", ЭтотОбъект, 
		ДополнительныеПараметры);
	ПодборТоваровКлиент.ПриВыбореСтрокиТаблицыХарактеристик(ЭтаФорма, Элемент, Оповещение);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПодборТаблицаХарактеристикиНачалоПеретаскиванияМассив(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование;
	
	ПодборТоваровКлиент.ПолучитьДанныеПеретаскивания(ЭтаФорма, Элемент, ПараметрыПеретаскивания);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПодборТаблицаНоменклатураПриАктивизацииСтроки(Элемент)
	
	ПодборТоваровКлиент.ПриАктивизацииСтрокиТаблицыНоменклатуры(ЭтаФорма, Элемент);
	
КонецПроцедуры

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


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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыКорзина

&НаКлиенте
Процедура КорзинаПриАктивизацииСтроки(Элемент)
	
	ПодключитьОбработчикОжидания("ЗаполнитьСписокВыбораНоменклатурыПартнера", 0.1, Истина);
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура КорзинаКоличествоУпаковокПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.Корзина.ТекущиеДанные;
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
	СтруктураДействий.Вставить("ПересчитатьСумму");
	
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УстановитьТекущийЭлементНавигация(Команда)
	
	ПодборТоваровКлиент.УстановитьТекущийЭлементНавигация(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьТекущийЭлементСписокТоваров(Команда)
	
	ПодборТоваровКлиент.УстановитьТекущийЭлементСписокТоваров(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьТекущийЭлементНоменклатураПартнера(Команда)
	
	ПодборТоваровКлиент.УстановитьТекущийЭлементНоменклатураПартнера(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьТекущийЭлементКорзина(Команда)
	
	ПодборТоваровКлиент.УстановитьТекущийЭлементКорзина(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьТекущийЭлементСтрокаПоиска(Команда)
	
	ПодборТоваровКлиент.УстановитьТекущийЭлементСтрокаПоиска(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьЗапрашиватьКоличество(Команда)
	
	ЗапрашиватьКоличество = Не ЗапрашиватьКоличество;
	Элементы.ЗапрашиватьКоличествоЦену.Пометка = ЗапрашиватьКоличество;
	
КонецПроцедуры

&НаКлиенте
Процедура Поиск(Команда)
	
	ТекущееСообщениеПользователю = "";
	
КонецПроцедуры

&НаКлиенте
Процедура ПеренестиВДокумент(Команда)
	
	ПеренестиВДокумент = Истина;
	Закрыть(КодВозвратаДиалога.OK);
	
КонецПроцедуры

&НаКлиенте
Процедура ПодборПерейтиКСпискуНоменклатурыРасширенныйПоиск(Команда)
	
	ПодборТоваровКлиент.ПерейтиКСпискуНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПодборПерейтиКСпискуНоменклатурыСтандартныйПоиск(Команда)
	
	ПодборТоваровКлиент.ПерейтиКСпискуНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ЦеныНоменклатуры(Команда)
	
	ПодборТоваровКлиент.ЦеныНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ТоварыДругогоКачества(Команда)
	
	ТоварыДругогоКачестваНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СброситьОтборыПоСвойствам(Команда)
	
	СброситьОтборыПоСвойствамНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура НоменклатураСАналогичнымиСвойствами(Команда)
	
	НоменклатураСАналогичнымиСвойствамиНаСервере();
	
КонецПроцедуры

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

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

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

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

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.FormBackColor);
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.MistyRose);
	
	//

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

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

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

	//
	
	ПодборТоваровСервер.УстановитьУсловноеОформлениеДинамическихСписков(ЭтаФорма, Истина);
	
	//
	
	ПодборТоваровСервер.УстановитьУсловноеОформлениеЭлементовФормПодборов(ЭтаФорма, Истина);

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

#Область ПодборыИОбработкаПроверкиКоличества

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

&НаСервере
Процедура ПеретащитьВКорзинуНаСервере(НовыеСтроки)
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
	СтруктураДействий.Вставить("ПересчитатьСумму");

	КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
	
	ОбрабатываемыеСтроки = Новый Массив;
	ОбрабатываемыеСтрокиЗаполнениеНоменклатурыПартнера = Новый Массив;
		
	НоменклатураПартнера = Справочники.НоменклатураКонтрагентов.ПустаяСсылка();

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

// Функция-конструктор дополнительных параметров 
// Возвращаемое значение:
// 	Структура - дополнительные параметры:
// * НовыеСтроки - Массив
// * ПараметрыТовара - Структура
&НаКлиенте
Функция ДополнительныеПараметрыОбработкиЗавершенияДобавленияВКорзину()
	
	Результат = Новый Структура;
	Результат.Вставить("НовыеСтроки", Новый Массив);
	Результат.Вставить("ПараметрыТовара");
	Возврат Результат;
	
КонецФункции

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

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

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

	ДобавитьВКорзинуФрагмент(ДополнительныеПараметры);
	
КонецПроцедуры

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

#Область ПодключаемыеОбработчикиОжидания

&НаКлиенте
Процедура ИерархияНоменклатурыПриАктивизацииСтрокиОбработчикОжидания()
	
	ПодборТоваровКлиент.ОбработчикАктивизацииСтрокиИерархииНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ИерархияНоменклатурыПартнераПриАктивизацииСтрокиОбработчикОжидания()
	
	ПодборТоваровКлиент.ОбработчикАктивизацииСтрокиИерархииНоменклатурыПартнера(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПодборТаблицаПриАктивизацииСтрокиОбработчикОжидания()
	
	ПодборТоваровКлиент.ПолучитьИнформациюОТовареПриЗакупке(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ОткрытьКарточкуТовара(Команда)
	
	ПодборТоваровКлиент.ОткрытьКарточкуТовара(ЭтаФорма);
	
КонецПроцедуры

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

#Область Поиск

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

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

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

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

&НаСервере
Процедура СнятьОтборПоСтрокеПоискаХарактеристикиНаСервере()
	
	ПодборТоваровКлиентСервер.СнятьОтборПоСтрокеПоискаХарактеристик(ЭтаФорма);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВыполнитьПоискХарактеристикЗавершение(Результат, ДополнительныеПараметры) Экспорт 
	
	ВыполнитьПоискХарактеристикНаСервере();
	
	ПодборТоваровКлиент.ПослеВыполненияПоискаХарактеристик(ЭтаФорма);

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

&НаСервере
Процедура ВыполнитьПоискХарактеристикНаСервере()
	
	ПодборТоваровСервер.ВыполнитьПоискХарактеристик(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

#Область УправлениеВариантомНавигации

&НаКлиенте
Процедура ВидыНоменклатурыПриАктивизацииСтроки(Элемент)
 	ПодборТоваровКлиент.ПриАктивизацииСтрокиСпискаВидыНоменклатуры(ЭтаФорма);
КонецПроцедуры

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

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

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

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

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

	Если Результат = Неопределено 
		Или ВариантНавигации = Результат.Значение Тогда
		Возврат;
	КонецЕсли;
	
	ВариантНавигации = Результат.Значение;
	ВариантНавигацииПриИзмененииНаСервере();	
	
КонецПроцедуры

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

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

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

&НаСервере
Функция АдресТоваровВХранилище()
	
	АдресВХранилище = Неопределено;
	
	Если ПеренестиВДокумент Тогда
		АдресВХранилище = ПоместитьТоварыВХранилище();
	КонецЕсли;
	
	Возврат АдресВХранилище;
	
КонецФункции

&НаКлиенте
Процедура НастроитьПоиск(Команда)
	
	ПодборТоваровКлиент.НастроитьПоиск(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьСписокВыбораНоменклатурыПартнера()
	
	ТекущиеДанные = Элементы.Корзина.ТекущиеДанные;
	
	НоменклатураПартнеровКлиент.ЗаполнитьСписокВыбораНоменклатурыПартнера(
		Партнер, ТекущиеДанные, Элементы.НоменклатураПартнера.СписокВыбора);
	
	НоменклатураПартнеровКлиент.УстановитьПараметрыВыбораУпаковки(
			Элементы.НоменклатураПартнера.ПараметрыВыбора, ТекущиеДанные);
	
КонецПроцедуры

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

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

#Область ОбработчикиСобытийНаСервере

&НаСервере
Процедура ПерейтиКСпискуХарактеристик() 
	ПодборТоваровСервер.ПерейтиКСпискуХарактеристик(ЭтаФорма);
КонецПроцедуры		

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

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

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

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

&НаСервере
Процедура ВидЦеныПоставщикаПриИзмененииНаСервере()
	
	ПодборТоваровСервер.ПриИзмененииВидаЦеныПоставщика(ЭтаФорма);
	
КонецПроцедуры

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

&НаСервере
Процедура ДеревоОтборовОтборПриИзмененииНаСервере()
	
	ПодборТоваровСервер.ДеревоОтборовОтборПриИзменении(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура НоменклатураИсходногоКачестваПриИзмененииНаСервере()
	
	ПодборТоваровСервер.НоменклатураИсходногоКачестваПриИзменении(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура СписокКачестваПометкаПриИзмененииНаСервере()
	
	ПодборТоваровСервер.СписокКачестваПометкаПриИзменении(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкиФормыНаСервере()
	
	ПодборТоваровСервер.СохранитьНастройкиФормыПодбора(ЭтаФорма);
	
КонецПроцедуры

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

&НаСервере
Процедура СброситьОтборыПоСвойствамНаСервере()
	
	ПодборТоваровСервер.СброситьОтборыПоСвойствам(ЭтаФорма);
	
КонецПроцедуры

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

&НаСервере
Процедура ПриЗаписиНовойХарактеристикиНаСервере(НовыйЭлементХарактеристик)
	
	ПодборТоваровСервер.ПриЗаписиНовойХарактеристики(ЭтаФорма, НовыйЭлементХарактеристик);
	
КонецПроцедуры

&НаСервере
Функция ПараметрыСозданияНовойНоменклатурыНаСервере()
	
	Возврат ПодборТоваровСервер.ПараметрыСозданияНовойНоменклатуры(ЭтаФорма);
	
КонецФункции

&НаСервере
Функция ПараметрыСозданияНовойХарактеристикиНаСервере()
	
	Возврат ПодборТоваровСервер.ПараметрыСозданияНовойХарактеристики(ЭтаФорма);
	
КонецФункции

&НаСервере
Функция АдресДанныхДляРасчетаРучныхСкидокДляПодбораВоВременномХранилищеНаСервере(ПараметрыТовара)
	
	Возврат ПодборТоваровСервер.АдресДанныхДляРасчетаРучныхСкидокДляПодбораВоВременномХранилище(ЭтаФорма, ПараметрыТовара);
	
КонецФункции

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

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

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

#Область Инициализация

ВыполняетсяЗакрытие = Ложь;

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

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