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

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

&НаКлиенте
Перем КэшированныеЗначения; //текущая номенклатура для передачи в обработчики ожидания

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

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбособленноРасширенныйПоискНоменклатураПриИзменении(Элемент)
	
	ОбособленноПриИзменении();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбособленноРасширенныйПоискХарактеристикиПриИзменении(Элемент)
	
	ОбособленноПриИзменении();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЦеныИСкидки

&НаКлиенте
Процедура АвтоТест_ЗаполнитьЦеныПоСоглашению(Команда) Экспорт

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

&НаКлиенте
Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен(Команда)

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

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

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

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

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

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

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

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

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

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

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


#Область ЦенообразованиеИСкидки

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

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

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

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

&НаСервере
Процедура ОтменитьРучныеСкидкиНаСервере()
	
	СкидкиНаценкиЗаполнениеСервер.ОтменитьРучныеСкидки(Объект, "Корзина", Истина, Истина);
	
КонецПроцедуры

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ДополнитьСтруктуруДействиямиРасчетаЦены(Объект, СтруктураДействий, ТекущаяСтрока)

	ОписаниеОбъекта = Новый Структура;
	ОписаниеОбъекта.Вставить("Дата", ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, Объект.ТекущаяДатаСеанса));
	ОписаниеОбъекта.Вставить("Валюта", Объект.Валюта);
	ОписаниеОбъекта.Вставить("ВидЦены", ПредопределенноеЗначение("Справочник.ВидыЦен.ПустаяСсылка"));
	Если Объект.ВидыЦен.Количество() И ЗначениеЗаполнено(Объект.ВидыЦен[0].Значение) Тогда
		ОписаниеОбъекта.ВидЦены = Объект.ВидыЦен[0].Значение;
	КонецЕсли;
	ОписаниеОбъекта.Вставить("Партнер",    Объект.Партнер);
	ОписаниеОбъекта.Вставить("Соглашение", Объект.Соглашение);
	ОписаниеОбъекта.Вставить("Ссылка",     Неопределено);

	Если Объект.ЕдинственныйВидЦенПродажи Тогда

		СтруктураЗаполненияЦены = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(ОписаниеОбъекта, Истина);
		СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", СтруктураЗаполненияЦены);

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

		СтруктураЗаполненияУсловийРозничнойПродажи = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийРозничныхПродажВСтрокеТЧ(ОписаниеОбъекта, Объект.ОбъектХраненияУсловийПродаж);
		СтруктураДействий.Вставить("ЗаполнитьУсловияРозничныхПродаж", СтруктураЗаполненияУсловийРозничнойПродажи);

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

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

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

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

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

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

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

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

	//

	ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеВидовЦен(ЭтаФорма, 
														"КорзинаВидЦены", 
														"Объект.Корзина.ВидЦены");

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
	
	//
	
	Если Не ПраваПользователяПовтИсп.ЭтоПартнер() Тогда
		
		Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<серия не указывается>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

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

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

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

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

&НаСервере
Процедура ПерейтиКСпискуХарактеристик()

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

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

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

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

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

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

			Если Не ПараметрыТовара.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор")
				И (РежимПодбораБезСуммовыхПараметров 
				Или Не ЗапрашиватьЦену
				Или ЦенообразованиеВызовСервера.НеобходимПересчетЦеныПриИзменении(ТекущаяСтрока.Номенклатура, "Серия", Неопределено)) Тогда
				
				ЦелевойМассив = ОбрабатываемыеСтрокиСЦеной;

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

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

	СтруктураДействийСПогрешностью = ОбщегоНазначения.СкопироватьРекурсивно(СтруктураДействий, Ложь);
	СтруктураДействийСПогрешностью.Вставить("ПересчитатьСуммуСУчетомПогрешностиОкругления",
		Новый Структура("ПогрешностиПоСтрокам", ПогрешностьСтрок));
		
	СтруктураДействийСПогрешностью.Вставить("ЗаполнитьПризнакНаличияНоменклатурыПродаваемойСовместно",
		ВариантАнализаНоменклатурыПродаваемойСовместно);

	СтруктураДействийСЦеной = Новый Структура(); 
	Если ОбрабатываемыеСтрокиСЦеной.Количество() Тогда
		СтруктураДействийСЦеной = ОбщегоНазначения.СкопироватьРекурсивно(СтруктураДействийСПогрешностью, Ложь);
		ДополнитьСтруктуруДействиямиРасчетаЦены(ЭтотОбъект, СтруктураДействийСЦеной, ОбрабатываемыеСтрокиСЦеной[0]);
	КонецЕсли;

	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		ОбрабатываемыеСтроки,
		СтруктураДействий,
		Объект.Корзина,
		Неопределено);

	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		ОбрабатываемыеСтрокиСПогрешностью,
		СтруктураДействийСПогрешностью,
		Объект.Корзина,
		Неопределено);

	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		ОбрабатываемыеСтрокиСЦеной,
		СтруктураДействийСЦеной,
		Объект.Корзина,
		Неопределено);

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

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

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

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

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

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

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

		ЗаполнитьЗначенияСвойств(Отбор, НоваяСтрока);

		Если НоваяСтрока.Цена = 0 Тогда
			Отбор.ВидЦены = ПредопределенноеЗначение("Справочник.ВидыЦен.ПустаяСсылка");
		КонецЕсли;

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

		Если ПустаяКорзина Тогда
			РезультатПоиска = Новый Массив;
		Иначе
			РезультатПоиска = Объект.Корзина.НайтиСтроки(Отбор);
		КонецЕсли;

		Если РезультатПоиска.Количество() = 0 Или НоваяСтрока.Погрешность <> 0 Тогда
			ТекущаяСтрока = Объект.Корзина.Добавить();
			ЗаполнитьЗначенияСвойств(ТекущаяСтрока, Отбор);
			ТекущаяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора), 1, 0);
			
			ОбрабатываемыеСтрокиНовые.Добавить(ТекущаяСтрока);
			Погрешности.Вставить(ТекущаяСтрока, НоваяСтрока.Погрешность);
		Иначе
			ТекущаяСтрока = РезультатПоиска[0];
			ОбрабатываемыеСтрокиНайденные.Добавить(ТекущаяСтрока);
		КонецЕсли;

		ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковок + НоваяСтрока.КоличествоУпаковок;

		ТекущаяСтрока.ЗаказатьНаСклад = Истина;
		СтрокиДляУстановкиСтатусаСерий.Добавить(ТекущаяСтрока);

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция АдресТоваровВХранилище(УникальныйИдентификаторВладельца)

	АдресВХранилище = Неопределено;

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

	Возврат АдресВХранилище;

КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Наборы

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

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

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

		Иначе
			
			НоваяСтрока = Объект.Корзина.Добавить();
			НоваяСтрока.НоменклатураНабора = Данные.НоменклатураНабора;
			НоваяСтрока.ХарактеристикаНабора = Данные.ХарактеристикаНабора;
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
			Если (НоваяСтрока.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар
				Или НоваяСтрока.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара)
				И Склады.Количество() = 1 Тогда
				НоваяСтрока.Склад = Склады[0].Значение;
			КонецЕсли;
			НоваяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(НоваяСтрока.НоменклатураНабора), 1, 0);
			ЗаполнитьСтатусыУказанияСерий(НоваяСтрока);

		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого СтрокаКомплекта Из СтрокиКомплекта Цикл
		Объект.Корзина.Удалить(СтрокаКомплекта);
	КонецЦикла;
	
	Если ИспользоватьНоменклатуруПродаваемуюСовместно Тогда
		ПриИзмененииКорзиныНаСервере()
	Иначе	
		ПодборТоваровКлиентСервер.УстановитьТекстИнформационнойНадписи(ЭтаФорма);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

#Область Серии

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

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

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

&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийПоИдентификатору(Знач ИдентификаторыДляУстановкиСтатусаСерий)

	Если ПараметрыУказанияСерий = Неопределено Тогда
		Возврат;
	КонецЕсли;

	СтрокиДляУстановкиСтатусаСерий = Новый Массив;
	Если ТипЗнч(ИдентификаторыДляУстановкиСтатусаСерий) = Тип("Число") Тогда
		ТекущаяСтрока = Объект.Корзина.НайтиПоИдентификатору(ИдентификаторыДляУстановкиСтатусаСерий);
		СтрокиДляУстановкиСтатусаСерий.Добавить(ТекущаяСтрока);
	Иначе
		Для каждого ИдентификаторСтроки Из ИдентификаторыДляУстановкиСтатусаСерий Цикл
			СтрокиДляУстановкиСтатусаСерий.Добавить(Объект.Корзина.НайтиПоИдентификатору(ИдентификаторСтроки));
		КонецЦикла;
	КонецЕсли;

	ЗаполнитьСтатусыУказанияСерий(СтрокиДляУстановкиСтатусаСерий);

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

&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерий(СтрокиДляУстановкиСтатусаСерий)

	Если ПараметрыУказанияСерий = Неопределено Тогда
		Возврат;
	КонецЕсли;

	Если ТипЗнч(СтрокиДляУстановкиСтатусаСерий) <> Тип("Массив") Тогда
		ТекущаяСтрока = СтрокиДляУстановкиСтатусаСерий;
		СтрокиДляУстановкиСтатусаСерий = Новый Массив;
		СтрокиДляУстановкиСтатусаСерий.Добавить(ТекущаяСтрока);
	КонецЕсли;

	Обработки.ПодборТоваровВДокументПродажи.ЗаполнитьСтатусУказанияСерииВСтроке(
		СтрокиДляУстановкиСтатусаСерий,
		ПараметрыУказанияСерий);

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

&НаСервереБезКонтекста
Процедура ЗаполнитьСтатусУказанияСерииВСтруктуре(Знач СтрокаДляУстановкиСтатусаСерий, ПараметрыУказанияСерий)

	Если ПараметрыУказанияСерий = Неопределено Тогда
		Возврат;
	КонецЕсли;

	СтрокиДляУстановкиСтатусаСерий = Новый Массив;
	СтрокиДляУстановкиСтатусаСерий.Добавить(СтрокаДляУстановкиСтатусаСерий);

	Обработки.ПодборТоваровВДокументПродажи.ЗаполнитьСтатусУказанияСерииВСтроке(
		СтрокиДляУстановкиСтатусаСерий,
		ПараметрыУказанияСерий);

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

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

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

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

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

		ДополнитьСтруктуруДействиямиРасчетаЦены(ЭтотОбъект, СтруктураДействий, ТекущаяСтрока);

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

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

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

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

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

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

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