Самообслуживание партнеров / Корзина покупателя / Модуль формы

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

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

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПересчитатьИтоги();
	УправлениеДоступностью();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СкладПриИзменении(Элемент)
	
	УправлениеДоступностью();
	ЗаполнитьТаблицуКорзиныПриИзмененииРеквизитовШапки();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакупкаПоКомиссииПриИзменении(Элемент)
	
	Если ЗакупкаПоКомиссии Тогда
		ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию");
	Иначе
		ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.РеализацияКлиенту");
	КонецЕсли;
	ЗакупкаПоКомиссииПриИзмененииСервер();
	
КонецПроцедуры

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

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

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

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

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

	Если ТекущаяСтрока.Доступность = НСтр("ru = 'В наличии'")
		Или ТекущаяСтрока.Доступность = НСтр("ru = 'Требует уточнения'") И ТекущаяСтрока.Доступно > 0 Тогда

		Если ТекущаяСтрока.Доступно > 0 Тогда

			Если ТекущаяСтрока.Период = НачалоДня(ТекущаяДатаСеанса) Тогда

				Если ТекущаяСтрока.Количество/ТекущаяСтрока.Доступно < 0.5 Тогда
					ТекущаяСтрока.Доступность = НСтр("ru = 'В наличии'");
				Иначе
					ТекущаяСтрока.Доступность = НСтр("ru = 'Требует уточнения'");
				КонецЕсли;

			Иначе
				ТекущаяСтрока.Доступность = НСтр("ru = 'Ожидается'") + " " + Формат(ТекущаяСтрока.Период,"ДЛФ=D");
			КонецЕсли;

		Иначе

			Если ТекущаяСтрока.ДатаПоставки < НачалоДня(ТекущаяДатаСеанса) Тогда
				ТекущаяСтрока.Доступность = НСтр("ru = 'Нет на складе'");
			Иначе
				ТекущаяСтрока.Доступность = НСтр("ru = 'Ожидается'") + " " + Формат(ТекущаяСтрока.ДатаПоставки,"ДЛФ=D");
			КонецЕсли;

		КонецЕсли;

	КонецЕсли;

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

&НаКлиенте
Процедура КорзинаПокупателяПриИзменении(Элемент)
	
	ОбработатьИзмененииДанныхКорзины();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СохранитьДанныеКорзины(Команда)
	
	Если Модифицированность Тогда
		ВыполнитьЗаписьРегистрКорзинаПокупателя();
		ОповеститьОИзмененииКорзиныПокупателя();
		Модифицированность = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьПометкиКОформлению(Команда)
	
	Для каждого Строка Из КорзинаПокупателя Цикл
		Строка.КОформлению = Истина;
	КонецЦикла;
	ОбработатьИзмененииДанныхКорзины()
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьПометкиКОформлению(Команда)
	
	Для каждого Строка Из КорзинаПокупателя  Цикл
		Строка.КОформлению = Ложь;
	КонецЦикла;
	ОбработатьИзмененииДанныхКорзины();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

	//

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

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

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

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

	ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.SpecialTextColor);

	//

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

	//

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

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

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

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

#Область Настройки

&НаСервере
Процедура СохранитьНастройки()
	
	Настройки = Новый Структура;
	Настройки.Вставить("Соглашение",Соглашение);
	Настройки.Вставить("Склад",Склад);
	
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработки.СамообслуживаниеПартнеров", "КорзинаПокупателя", Настройки);
	
КонецПроцедуры

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

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

#Область ФормированиеЗапросов

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

&НаСервере
Функция ТекстЗапросаДанныеПоДоступностиТоваровНаСкладе()
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ДанныеПоДоступностиИМУЗ.Склад КАК Склад,
	|	ДанныеПоДоступностиИМУЗ.НоменклатураНабора КАК НоменклатураНабора,
	|	ДанныеПоДоступностиИМУЗ.ХарактеристикаНабора КАК ХарактеристикаНабора,
	|	ДанныеПоДоступностиИМУЗ.Номенклатура КАК Номенклатура,
	|	ДанныеПоДоступностиИМУЗ.Характеристика КАК Характеристика,
	|	ДанныеПоДоступностиИМУЗ.Период КАК Период,
	|	ДанныеПоДоступностиИМУЗ.Доступно КАК Доступно,
	|	ЕСТЬNULL(ДатыПлановойПоставки.Дата, ДАТАВРЕМЯ(1, 1, 1))  КАК ДатаПоставки,
	|	ВЫБОР
	|		КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|			ТОГДА &СтрокаВыберитеСклад
	|		КОГДА ВидыНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
	|			ТОГДА &СтрокаУслугаДоступна
	|		КОГДА ВидыНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
	|			ТОГДА &СтрокаРаботаДоступна
	|		КОГДА ДанныеПоДоступностиИМУЗ.МУЗ = ЗНАЧЕНИЕ(Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ)
	|			ТОГДА &СтрокаДоступноПодЗаказ
	|		КОГДА НЕ ВЫРАЗИТЬ(ДанныеПоДоступностиИМУЗ.Склад КАК Справочник.Склады).КонтролироватьСвободныеОстатки
	|			ТОГДА &СтрокаТребуетсяУточнить
	|		ИНАЧЕ &СтрокаСогласноГрафика
	|	КОНЕЦ КАК Доступность,
	|	КорзинаПокупателя.Упаковка КАК Упаковка,
	|	КорзинаПокупателя.КоличествоУпаковок КАК КоличествоУпаковок,
	|	СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	|	ВЫБОР
	|		КОГДА УпаковкиНоменклатуры.Ссылка ЕСТЬ NULL 
	|			ТОГДА КорзинаПокупателя.КоличествоУпаковок
	|		ИНАЧЕ КорзинаПокупателя.КоличествоУпаковок * &ТекстЗапросаКоэффициентУпаковки
	|	КОНЕЦ КАК Количество
	|ПОМЕСТИТЬ ДанныеПоДоступности
	|ИЗ
	|	ДанныеПоДоступностиИМУЗ КАК ДанныеПоДоступностиИМУЗ
	|
	|		ЛЕВОЕ СОЕДИНЕНИЕ Склады КАК Склады
	|		ПО ДанныеПоДоступностиИМУЗ.Склад = Склады.Ссылка
	|
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеКорзины КАК КорзинаПокупателя
	|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО КорзинаПокупателя.Упаковка = УпаковкиНоменклатуры.Ссылка
	|		ПО ДанныеПоДоступностиИМУЗ.Номенклатура = КорзинаПокупателя.Номенклатура
	|		 И ДанныеПоДоступностиИМУЗ.Характеристика = КорзинаПокупателя.Характеристика
	|		 И ДанныеПоДоступностиИМУЗ.НоменклатураНабора = КорзинаПокупателя.НоменклатураНабора
	|		 И ДанныеПоДоступностиИМУЗ.ХарактеристикаНабора = КорзинаПокупателя.ХарактеристикаНабора
	|
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
	|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
	|			ПО СправочникНоменклатура.ВидНоменклатуры = ВидыНоменклатуры.Ссылка
	|		ПО ДанныеПоДоступностиИМУЗ.Номенклатура = СправочникНоменклатура.Ссылка
	|
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВтСпособыОбеспечения КАК СпособыОбеспечения
	|		ПО ДанныеПоДоступностиИМУЗ.Номенклатура      = СпособыОбеспечения.Номенклатура
	|			И ДанныеПоДоступностиИМУЗ.Характеристика = СпособыОбеспечения.Характеристика
	|			И ДанныеПоДоступностиИМУЗ.Склад          = СпособыОбеспечения.Склад
	|
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВтДатыПлановойПоставки КАК ДатыПлановойПоставки
	|		ПО СпособыОбеспечения.СпособОбеспеченияПотребностей = ДатыПлановойПоставки.СпособОбеспечения
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|";
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки",
		Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
			"УпаковкиНоменклатуры",
			"СправочникНоменклатура"));
	Возврат ТекстЗапроса;
КонецФункции

&НаСервере
Функция ТекстЗапросаДанныеКорзиныПоТабличнойЧасти(ЕстьДанныеТаблицыЗагрузки)
	
	Если НЕ ЕстьДанныеТаблицыЗагрузки Тогда
		
		ТекстЗапроса=
		"ВЫБРАТЬ
		|	ДанныеКорзины.НоменклатураНабора,
		|	ДанныеКорзины.ХарактеристикаНабора,
		|	ДанныеКорзины.Номенклатура,
		|	ДанныеКорзины.Характеристика,
		|	ДанныеКорзины.Упаковка,
		|	ДанныеКорзины.КоличествоУпаковок,
		|	ДанныеКорзины.Цена,
		|	ДанныеКорзины.КОформлению,
		|	ДанныеКорзины.ДатаПомещения,
		|	ДанныеКорзины.Валюта,
		|	ДанныеКорзины.ПодакцизныйТовар
		|ПОМЕСТИТЬ КорзинаПокупателя
		|ИЗ
		|	&ДанныеКорзины КАК ДанныеКорзины
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	КорзинаПокупателя.НоменклатураНабора,
		|	КорзинаПокупателя.ХарактеристикаНабора,
		|	КорзинаПокупателя.Номенклатура,
		|	КорзинаПокупателя.Характеристика,
		|	КорзинаПокупателя.Упаковка,
		|	КорзинаПокупателя.КоличествоУпаковок,
		|	КорзинаПокупателя.Цена,
		|	КорзинаПокупателя.КОформлению,
		|	КорзинаПокупателя.ДатаПомещения,
		|	КорзинаПокупателя.Валюта,
		|	КорзинаПокупателя.ПодакцизныйТовар,
		|	&СтавкаНДС КАК СтавкаНДС,
		|	ВЫРАЗИТЬ(&СтавкаНДС КАК Справочник.СтавкиНДС).Ставка / 100 КАК ЗначениеСтавкиНДС,
		|	СпрНоменклатура.ЦеноваяГруппа
		|ПОМЕСТИТЬ ДанныеКорзины
		|ИЗ
		|	КорзинаПокупателя КАК КорзинаПокупателя
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
		|		ПО КорзинаПокупателя.Номенклатура = СпрНоменклатура.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтавкиНДСНоменклатуры.СрезПоследних(&Дата,
		|			Страна = &СтранаРегистрации ИЛИ Страна = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)) КАК СтавкиНДСНоменклатуры
		|		ПО КорзинаПокупателя.Номенклатура = СтавкиНДСНоменклатуры.Номенклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСтавкиНДС.СрезПоследних(&Дата, Страна = &СтранаРегистрации) КАК ОсновныеСтавкиНДС
		|		ПО (ИСТИНА)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|";
		
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&СтавкаНДС", УчетНДСУП.ТекстЗапросаСтавкаНДС("&НалогообложениеНДС", "СпрНоменклатура"));
		
		Возврат ТекстЗапроса;
		
	Иначе
		
		ТекстЗапроса =
		"ВЫБРАТЬ
		|	ДанныеКорзины.НоменклатураНабора,
		|	ДанныеКорзины.ХарактеристикаНабора,
		|	ДанныеКорзины.Номенклатура,
		|	ДанныеКорзины.Характеристика,
		|	ДанныеКорзины.Упаковка,
		|	ДанныеКорзины.КоличествоУпаковок,
		|	ДанныеКорзины.Цена,
		|	ДанныеКорзины.КОформлению,
		|	ДанныеКорзины.ДатаПомещения,
		|	ДанныеКорзины.Валюта,
		|	ДанныеКорзины.ПодакцизныйТовар
		|ПОМЕСТИТЬ ТаблицаКорзины
		|ИЗ
		|	&ДанныеКорзины КАК ДанныеКорзины
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ДанныеЗагрузки.НоменклатураНабора,
		|	ДанныеЗагрузки.ХарактеристикаНабора,
		|	ДанныеЗагрузки.Номенклатура,
		|	ДанныеЗагрузки.Характеристика,
		|	ДанныеЗагрузки.Упаковка,
		|	ДанныеЗагрузки.КоличествоУпаковок,
		|	ДанныеЗагрузки.Цена
		|ПОМЕСТИТЬ ТаблицаЗагруженныхТоваров
		|ИЗ
		|	&ДанныеЗагрузки КАК ДанныеЗагрузки
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ТаблицаКорзины.НоменклатураНабора,
		|	ТаблицаКорзины.ХарактеристикаНабора,
		|	ТаблицаКорзины.Номенклатура,
		|	ТаблицаКорзины.Характеристика,
		|	ТаблицаКорзины.Упаковка,
		|	ТаблицаКорзины.КоличествоУпаковок + ЕСТЬNULL(ТаблицаЗагруженныхТоваров.КоличествоУпаковок, 0) КАК КоличествоУпаковок,
		|	ТаблицаКорзины.Цена,
		|	ТаблицаКорзины.КОформлению,
		|	ТаблицаКорзины.ДатаПомещения,
		|	ТаблицаКорзины.Валюта,
		|	ТаблицаКорзины.ПодакцизныйТовар
		|ПОМЕСТИТЬ КорзинаПокупателя
		|ИЗ
		|	ТаблицаКорзины КАК ТаблицаКорзины
		|		ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЗагруженныхТоваров КАК ТаблицаЗагруженныхТоваров
		|		ПО ТаблицаКорзины.НоменклатураНабора = ТаблицаЗагруженныхТоваров.НоменклатураНабора
		|			И ТаблицаКорзины.ХарактеристикаНабора = ТаблицаЗагруженныхТоваров.ХарактеристикаНабора
		|			И ТаблицаКорзины.Номенклатура = ТаблицаЗагруженныхТоваров.Номенклатура
		|			И ТаблицаКорзины.Характеристика = ТаблицаЗагруженныхТоваров.Характеристика
		|			И ТаблицаКорзины.Упаковка = ТаблицаЗагруженныхТоваров.Упаковка
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ТаблицаЗагруженныхТоваров.НоменклатураНабора,
		|	ТаблицаЗагруженныхТоваров.ХарактеристикаНабора,
		|	ТаблицаЗагруженныхТоваров.Номенклатура,
		|	ТаблицаЗагруженныхТоваров.Характеристика,
		|	ТаблицаЗагруженныхТоваров.Упаковка,
		|	ТаблицаЗагруженныхТоваров.КоличествоУпаковок,
		|	0,
		|	ИСТИНА,
		|	&ТекущаяДата,
		|	&Валюта,
		|	СправочникНоменклатура.ПодакцизныйТовар
		|ИЗ
		|	ТаблицаЗагруженныхТоваров КАК ТаблицаЗагруженныхТоваров
		|		ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаКорзины КАК ТаблицаКорзины
		|		ПО ТаблицаЗагруженныхТоваров.НоменклатураНабора = ТаблицаКорзины.НоменклатураНабора
		|			И ТаблицаЗагруженныхТоваров.ХарактеристикаНабора = ТаблицаКорзины.ХарактеристикаНабора
		|			И ТаблицаЗагруженныхТоваров.Номенклатура = ТаблицаКорзины.Номенклатура
		|			И ТаблицаЗагруженныхТоваров.Характеристика = ТаблицаКорзины.Характеристика
		|			И ТаблицаЗагруженныхТоваров.Упаковка = ТаблицаКорзины.Упаковка
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
		|		ПО ТаблицаЗагруженныхТоваров.Номенклатура = СправочникНоменклатура.Ссылка
		|ГДЕ
		|	ТаблицаКорзины.Номенклатура ЕСТЬ NULL 
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	КорзинаПокупателя.НоменклатураНабора,
		|	КорзинаПокупателя.ХарактеристикаНабора,
		|	КорзинаПокупателя.Номенклатура,
		|	КорзинаПокупателя.Характеристика,
		|	КорзинаПокупателя.Упаковка,
		|	КорзинаПокупателя.КоличествоУпаковок,
		|	КорзинаПокупателя.Цена,
		|	КорзинаПокупателя.КОформлению,
		|	КорзинаПокупателя.ДатаПомещения,
		|	КорзинаПокупателя.Валюта,
		|	КорзинаПокупателя.ПодакцизныйТовар,
		|	&СтавкаНДС КАК СтавкаНДС,
		|	ВЫРАЗИТЬ(&СтавкаНДС КАК Справочник.СтавкиНДС).Ставка / 100 КАК ЗначениеСтавкиНДС,
		|	СпрНоменклатура.ЦеноваяГруппа
		|ПОМЕСТИТЬ ДанныеКорзины
		|ИЗ
		|	КорзинаПокупателя КАК КорзинаПокупателя
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
		|		ПО КорзинаПокупателя.Номенклатура = СпрНоменклатура.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтавкиНДСНоменклатуры.СрезПоследних(&Дата,
		|			Страна = &СтранаРегистрации ИЛИ Страна = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)) КАК СтавкиНДСНоменклатуры
		|		ПО КорзинаПокупателя.Номенклатура = СтавкиНДСНоменклатуры.Номенклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСтавкиНДС.СрезПоследних(&Дата, Страна = &СтранаРегистрации) КАК ОсновныеСтавкиНДС
		|		ПО (ИСТИНА)
		|";
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&СтавкаНДС", УчетНДСУП.ТекстЗапросаСтавкаНДС("&НалогообложениеНДС", "СпрНоменклатура"));
		
		Возврат ТекстЗапроса;
		
	КонецЕсли;
	
	
КонецФункции

&НаСервере
Функция ТекстЗапросаРезультирующий()
	
	Если ДоступенПросмотрОстатков Тогда
		
		ТекстЗапроса =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ОстатокНаСкладе.Номенклатура    КАК Номенклатура,
		|	ОстатокНаСкладе.Характеристика  КАК Характеристика,
		|	СУММА(ОстатокНаСкладе.Свободно) КАК Свободно
		|ПОМЕСТИТЬ ВтДоступныеТовары
		|ИЗ
		|	РегистрСведений.РаспределениеЗапасов КАК ОстатокНаСкладе
		|ГДЕ
		|	ОстатокНаСкладе.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
		|	И ОстатокНаСкладе.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе)
		|	И ОстатокНаСкладе.Свободно <> 0
		|	И ОстатокНаСкладе.Склад В
		|			(ВЫБРАТЬ
		|				Склады.Ссылка
		|			ИЗ
		|				Склады КАК Склады)
		|	И (ОстатокНаСкладе.Номенклатура, ОстатокНаСкладе.Характеристика) В
		|			(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|				КорзинаПокупателя.Номенклатура КАК Номенклатура,
		|				КорзинаПокупателя.Характеристика КАК Характеристика
		|			ИЗ
		|				ДанныеКорзины КАК КорзинаПокупателя)
		|
		|СГРУППИРОВАТЬ ПО
		|	ОстатокНаСкладе.Номенклатура,
		|	ОстатокНаСкладе.Характеристика
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Номенклатура,
		|	Характеристика
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ДанныеКорзины.НоменклатураНабора КАК НоменклатураНабора,
		|	ДанныеКорзины.ХарактеристикаНабора КАК ХарактеристикаНабора,
		|	ДанныеКорзины.Номенклатура КАК Номенклатура,
		|	ДанныеКорзины.Характеристика КАК Характеристика,
		|	ДанныеКорзины.Упаковка КАК Упаковка,
		|	ДанныеКорзины.КоличествоУпаковок КАК КоличествоУпаковок,
		|	ДанныеКорзины.КОформлению КАК КОформлению,
		|	ДанныеКорзины.СтавкаНДС КАК СтавкаНДС,
		|	ДанныеКорзины.Валюта КАК Валюта,
		|	ДанныеКорзины.ДатаПомещения КАК ДатаПомещения,
		|	ДанныеКорзины.ПодакцизныйТовар КАК ПодакцизныйТовар,
		|	ДанныеПоДоступности.Период КАК Период,
		|	ДанныеПоДоступности.ДатаПоставки КАК ДатаПоставки,
		|	ДанныеПоДоступности.Доступно КАК Доступно,
		|	ДанныеПоДоступности.Доступность КАК Доступность,
		|	ВЫБОР
		|		КОГДА УпаковкиНоменклатуры.Ссылка ЕСТЬ NULL
		|			ТОГДА ДанныеКорзины.КоличествоУпаковок
		|		ИНАЧЕ ДанныеКорзины.КоличествоУпаковок * &ТекстЗапросаКоэффициентУпаковки
		|	КОНЕЦ КАК Количество,
		|	ВЫРАЗИТЬ(ЕСТЬNULL(СвободныеОстатки.Свободно, 0) / ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК ЧИСЛО(15, 3)) КАК ДоступноСейчас
		|ИЗ
		|	ДанныеКорзины КАК ДанныеКорзины
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеПоДоступности КАК ДанныеПоДоступности
		|		ПО ДанныеКорзины.Номенклатура = ДанныеПоДоступности.Номенклатура
		|			И ДанныеКорзины.Характеристика = ДанныеПоДоступности.Характеристика
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
		|		ПО ДанныеКорзины.Упаковка = УпаковкиНоменклатуры.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтДоступныеТовары КАК СвободныеОстатки
		|		ПО ДанныеКорзины.Номенклатура = СвободныеОстатки.Номенклатура
		|			И ДанныеКорзины.Характеристика = СвободныеОстатки.Характеристика
		|
		|УПОРЯДОЧИТЬ ПО
		|	ДатаПомещения УБЫВ
		|ИТОГИ ПО
		|	НоменклатураНабора,
		|	ХарактеристикаНабора,
		|	Номенклатура,
		|	Характеристика,
		|	Упаковка,
		|	Доступность,
		|	Доступно,
		|	Период";
		
	Иначе
		
		ТекстЗапроса = "
		|ВЫБРАТЬ
		|	ДанныеКорзины.НоменклатураНабора КАК НоменклатураНабора,
		|	ДанныеКорзины.ХарактеристикаНабора КАК ХарактеристикаНабора,
		|	ДанныеКорзины.Номенклатура КАК Номенклатура,
		|	ДанныеКорзины.Характеристика КАК Характеристика,
		|	ДанныеКорзины.Упаковка КАК Упаковка,
		|	ДанныеКорзины.КоличествоУпаковок,
		|	ДанныеКорзины.КОформлению,
		|	ДанныеКорзины.СтавкаНДС,
		|	ДанныеКорзины.Валюта,
		|	ДанныеКорзины.ДатаПомещения КАК ДатаПомещения,
		|	ДанныеКорзины.ПодакцизныйТовар,
		|	ДанныеПоДоступности.Период КАК Период,
		|	ДанныеПоДоступности.ДатаПоставки КАК ДатаПоставки,
		|	ДанныеПоДоступности.Доступно КАК Доступно,
		|	ДанныеПоДоступности.Доступность КАК Доступность,
		|	ВЫБОР
		|		КОГДА УпаковкиНоменклатуры.Ссылка ЕСТЬ NULL 
		|			ТОГДА ДанныеКорзины.КоличествоУпаковок
		|		ИНАЧЕ ДанныеКорзины.КоличествоУпаковок * &ТекстЗапросаКоэффициентУпаковки
		|	КОНЕЦ КАК Количество,
		|	0 КАК ДоступноСейчас
		|ИЗ
		|	ДанныеКорзины КАК ДанныеКорзины
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеПоДоступности КАК ДанныеПоДоступности
		|		ПО ДанныеКорзины.Номенклатура = ДанныеПоДоступности.Номенклатура
		|			И ДанныеКорзины.Характеристика = ДанныеПоДоступности.Характеристика
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
		|		ПО ДанныеКорзины.Упаковка = УпаковкиНоменклатуры.Ссылка
		|
		|УПОРЯДОЧИТЬ ПО
		|	ДатаПомещения УБЫВ
		|ИТОГИ ПО
		|	НоменклатураНабора,
		|	ХарактеристикаНабора,
		|	Номенклатура,
		|	Характеристика,
		|	Упаковка,
		|	Доступность,
		|	Доступно,
		|	Период";
		
	КонецЕсли;
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки",
		Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
			"УпаковкиНоменклатуры",
			"ДанныеКорзины.Номенклатура"));
	Возврат ТекстЗапроса;
КонецФункции

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

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

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


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

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

&НаСервере
Процедура ЗаполнитьЗначенияПоУмолчанию(Выборка)

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

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

&НаКлиенте
Функция ОформлениеЗаказаДоступно()
	
	Если НЕ ЗначениеЗаполнено(Соглашение) ИЛИ НЕ ЗначениеЗаполнено(Склад) Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Для каждого Строка Из КорзинаПокупателя Цикл
		Если Строка.КОформлению И Строка.Цена > 0 Тогда
			Возврат Истина;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции

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

&НаСервере
Процедура ОбработатьДанныеКорзины()

	Для каждого Строка Из КорзинаПокупателя Цикл

		Если ЗначениеЗаполнено(Строка.НоменклатураНабора) Тогда
			Строка.ИндексНабора = 1;
		КонецЕсли;
		
		Если Строка.Доступность = НСтр("ru = 'Согласно графика'") Тогда

			Если Строка.Доступно > 0 Тогда

				Если Строка.Период = НачалоДня(ТекущаяДатаСеанса()) Тогда

					Если Строка.Количество/Строка.Доступно < 0.5 Тогда
						Строка.Доступность = НСтр("ru = 'В наличии'");
					Иначе
						Строка.Доступность = НСтр("ru = 'Требует уточнения'");
					КонецЕсли;

				Иначе
					Строка.Доступность = НСтр("ru = 'Ожидается'") + " " + Формат(Строка.Период,"ДЛФ=D");
				КонецЕсли;

			Иначе

				Если Строка.ДатаПоставки < НачалоДня(ТекущаяДатаСеанса()) Тогда
					Строка.Доступность = НСтр("ru = 'Нет на складе'");
				Иначе
					Строка.Доступность = НСтр("ru = 'Ожидается'") + " " + Формат(Строка.ДатаПоставки,"ДЛФ=D");
				КонецЕсли;

			КонецЕсли;

		КонецЕсли;

	КонецЦикла;

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

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

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

&НаСервере
Процедура ЗаполнитьТаблицуКорзиныПриИзмененииРеквизитовШапки()
	
	УстановитьЗначенияПараметровВыполнитьЗапрос(Ложь);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьЗначенияПараметровВыполнитьЗапрос(ПоРегистру = Истина, ТаблицаТоваров = Неопределено)

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

	Если ПоРегистру Тогда
		Запрос.Текст = ТекстЗапросаДанныеКорзиныПоРегистру();
	Иначе
		Если ТаблицаТоваров = Неопределено ИЛИ ТаблицаТоваров.Количество() = 0 Тогда
			Запрос.Текст = ТекстЗапросаДанныеКорзиныПоТабличнойЧасти(Ложь);
		Иначе
			Запрос.Текст = ТекстЗапросаДанныеКорзиныПоТабличнойЧасти(Истина);
			Запрос.УстановитьПараметр("ДанныеЗагрузки", ТаблицаТоваров);
		КонецЕсли;
	КонецЕсли;
	
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
	Запрос.Выполнить();
	
	Запрос.Текст ="
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Склады.Ссылка,
	|	Склады.Наименование
	|ПОМЕСТИТЬ Склады
	|ИЗ
	|	Справочник.Склады КАК Склады
	|ГДЕ
	|	ВЫБОР
	|		КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ Склады.Ссылка В ИЕРАРХИИ (&Склад)
	|	КОНЕЦ
	|	И НЕ Склады.ЭтоГруппа
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка),
	|	""""
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Склады.Ссылка КАК Склад,
	|	КорзинаПокупателя.НоменклатураНабора,
	|	КорзинаПокупателя.ХарактеристикаНабора,
	|	КорзинаПокупателя.Номенклатура,
	|	КорзинаПокупателя.Характеристика
	|ПОМЕСТИТЬ ВсеТоварыИСклады
	|ИЗ
	|	Склады КАК Склады,
	|	ДанныеКорзины КАК КорзинаПокупателя
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////";
	
	Запрос.Выполнить();
	
	Тексты = Новый Массив();
	
	Текст = РегистрыСведений.СхемыОбеспечения.ВременнаяТаблицаСпособыОбеспечения("ВЫЧИСЛЯТЬ");
	Текст = СтрЗаменить(Текст, "ВтТовары", "ВсеТоварыИСклады");
	Текст = СтрЗаменить(Текст, "РАЗРЕШЕННЫЕ", "");
	Тексты.Добавить(Текст);
	
	Тексты.Добавить(ОбеспечениеВДокументахСервер.ВременнаяТаблицаГодыГрафикаПредприятия());
	
	Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Таблица.СпособОбеспеченияПотребностей КАК СпособОбеспеченияПотребностей
		|ПОМЕСТИТЬ РазличныеСпособыОбеспечения
		|ИЗ
		|	ВтСпособыОбеспечения КАК Таблица
		|ИНДЕКСИРОВАТЬ ПО
		|	СпособОбеспеченияПотребностей
		|;
		|
		|ВЫБРАТЬ
		|	Таблица.СпособОбеспеченияПотребностей КАК СпособОбеспечения,
		|	РасчетДатыПоставкиПереопределяемый.ПлановаяДатаПоставки КАК Дата
		|
		|ПОМЕСТИТЬ ВтДатыПлановойПоставки
		|ИЗ
		|	РазличныеСпособыОбеспечения КАК Таблица
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ РасчетДатыПоставкиПереопределяемый ПО ИСТИНА
		|		
		|ИНДЕКСИРОВАТЬ ПО
		|	СпособОбеспечения
		|;
		|УНИЧТОЖИТЬ РазличныеСпособыОбеспечения";
	
	Подстановки = ОбеспечениеВДокументахСервер.ПодстановкиПлановойДатыПоставки(
		"Таблица.СпособОбеспеченияПотребностей", "&НачалоТекущегоДня", Ложь, Истина);
	
	Текст = СтрЗаменить(Текст, "РасчетДатыПоставкиПереопределяемый.ПлановаяДатаПоставки", Подстановки.Поле);
	Текст = СтрЗаменить(Текст, "ЛЕВОЕ СОЕДИНЕНИЕ РасчетДатыПоставкиПереопределяемый ПО ИСТИНА", Подстановки.Соединения);
	
	Тексты.Добавить(Текст);
	
	Запрос.Текст = СтрСоединить(Тексты, ОбщегоНазначения.РазделительПакетаЗапросов());
	УстановитьПривилегированныйРежим(Истина);
	Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);
	
	Запрос.Текст =
		Обработки.СамообслуживаниеПартнеров.ВременныеТаблицыДляРасчетаДоступныхОстатков("ВсеТоварыИСклады")
		+ "ВЫБРАТЬ
		|	ВсеТоварыИСклады.НоменклатураНабора,
		|	ВсеТоварыИСклады.ХарактеристикаНабора,
		|	ВсеТоварыИСклады.Номенклатура,
		|	ВсеТоварыИСклады.Характеристика,
		|	ВсеТоварыИСклады.Склад КАК Склад,
		|	ЕСТЬNULL(ДоступныеОстаткиПоДатам.Количество, 0) КАК Доступно,
		|	ЕСТЬNULL(БлижайшиеДатыДоступности.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК Период,
		|	ЕСТЬNULL(ТоварныеОграничения.МетодОбеспеченияПотребностей, ЗНАЧЕНИЕ(Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ)) КАК МУЗ
		|ПОМЕСТИТЬ ДанныеПоДоступностиИМУЗ
		|ИЗ
		|	ВсеТоварыИСклады КАК ВсеТоварыИСклады
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтБлижайшиеДатыДоступности КАК БлижайшиеДатыДоступности
		|		ПО БлижайшиеДатыДоступности.Номенклатура   = ВсеТоварыИСклады.Номенклатура
		|		 И БлижайшиеДатыДоступности.Характеристика = ВсеТоварыИСклады.Характеристика
		|		 И БлижайшиеДатыДоступности.Склад          = ВсеТоварыИСклады.Склад
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтДоступныеОстаткиПоДатам КАК ДоступныеОстаткиПоДатам
		|		ПО ДоступныеОстаткиПоДатам.Номенклатура   = ВсеТоварыИСклады.Номенклатура
		|		 И ДоступныеОстаткиПоДатам.Характеристика = ВсеТоварыИСклады.Характеристика
		|		 И ДоступныеОстаткиПоДатам.Склад          = ВсеТоварыИСклады.Склад
		|		 И ДоступныеОстаткиПоДатам.Период         = БлижайшиеДатыДоступности.Дата
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
		|		ПО &ПодстановкаТоварногоОграничения
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|"
		+ ТекстЗапросаДанныеПоДоступностиТоваровНаСкладе();

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

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

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

&НаСервере
Процедура ВыполнитьДействияПриЗакрытииФормыНаСервере()
	
	СохранитьНастройки();
	ВыполнитьЗаписьРегистрКорзинаПокупателя();
	
КонецПроцедуры

&НаКлиенте
Процедура ПересчитатьИтоги()
	
	ИтогоВКорзине = 0;
	ИтогоКОформлению = 0;
	
	Для каждого Строка Из КорзинаПокупателя Цикл
		
		ИтогоВКорзине = ИтогоВКорзине + Строка.СуммаСНДС;
		Если Строка.КОформлению Тогда
			ИтогоКОформлению = ИтогоКОформлению + Строка.СуммаСНДС;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьИзмененииДанныхКорзины()
	
	ПересчитатьИтоги();
	УправлениеДоступностью();
	
КонецПроцедуры

&НаСервере
Функция АдресВременногоХранилищаСКорзиной()

	Возврат ПоместитьВоВременноеХранилище(КорзинаПокупателя.Выгрузить(), УникальныйИдентификатор); 

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

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

&НаКлиенте
Процедура ОткрытьКарточкуНоменклатуры()

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

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

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

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

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

&НаСервере
Функция АдресНабораВоВременномХранилище(Параметры) Экспорт
	
	НомерСтроки = 1;
	Для Каждого СтрокаТЧ Из КорзинаПокупателя Цикл
		СтрокаТЧ.НомерСтроки = НомерСтроки;
		НомерСтроки = НомерСтроки + 1;
	КонецЦикла;
	
	Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтаФорма, Параметры, "КорзинаПокупателя");
	
КонецФункции

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

&НаКлиенте
Процедура ОткрытьКарточкуНабора()

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

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

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

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

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

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

	Запрос.Текст = "
	|ВЫБРАТЬ
	|	ДанныеПодбора.НоменклатураНабора,
	|	ДанныеПодбора.ХарактеристикаНабора,
	|	ДанныеПодбора.Номенклатура,
	|	ДанныеПодбора.Характеристика,
	|	ДанныеПодбора.Упаковка,
	|	ДанныеПодбора.КоличествоУпаковок КАК Количество,
	|	ДанныеПодбора.Цена,
	|	ДанныеПодбора.ВидЦены
	|ПОМЕСТИТЬ НеСгруппированныеДанныеПодбора
	|ИЗ
	|	&ДанныеПодбора КАК ДанныеПодбора
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДанныеКорзины.НоменклатураНабора,
	|	ДанныеКорзины.ХарактеристикаНабора,
	|	ДанныеКорзины.Номенклатура,
	|	ДанныеКорзины.Характеристика,
	|	ДанныеКорзины.Упаковка,
	|	ДанныеКорзины.КоличествоУпаковок,
	|	ДанныеКорзины.Цена,
	|	ДанныеКорзины.ДатаПомещения,
	|	ДанныеКорзины.КОформлению,
	|	ДанныеКорзины.ВидЦены
	|ПОМЕСТИТЬ ДанныеКорзины
	|ИЗ
	|	&ДанныеКорзины КАК ДанныеКорзины
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	НеСгруппированныеДанныеПодбора.НоменклатураНабора,
	|	НеСгруппированныеДанныеПодбора.ХарактеристикаНабора,
	|	НеСгруппированныеДанныеПодбора.Номенклатура,
	|	НеСгруппированныеДанныеПодбора.Характеристика,
	|	НеСгруппированныеДанныеПодбора.Упаковка,
	|	СУММА(НеСгруппированныеДанныеПодбора.Количество) КАК Количество,
	|	МАКСИМУМ(НеСгруппированныеДанныеПодбора.Цена) КАК Цена,
	|	МАКСИМУМ(НеСгруппированныеДанныеПодбора.ВидЦены) КАК ВидЦены
	|ПОМЕСТИТЬ ДанныеПодбора
	|ИЗ
	|	НеСгруппированныеДанныеПодбора КАК НеСгруппированныеДанныеПодбора
	|
	|СГРУППИРОВАТЬ ПО
	|	НеСгруппированныеДанныеПодбора.НоменклатураНабора,
	|	НеСгруппированныеДанныеПодбора.ХарактеристикаНабора,
	|	НеСгруппированныеДанныеПодбора.Номенклатура,
	|	НеСгруппированныеДанныеПодбора.Характеристика,
	|	НеСгруппированныеДанныеПодбора.Упаковка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДанныеКорзины.НоменклатураНабора КАК НоменклатураНабора,
	|	ДанныеКорзины.ХарактеристикаНабора КАК ХарактеристикаНабора,
	|	ДанныеКорзины.Номенклатура КАК Номенклатура,
	|	ДанныеКорзины.Характеристика КАК Характеристика,
	|	ДанныеКорзины.Упаковка КАК Упаковка,
	|	ДанныеКорзины.КОформлению КАК КОформлению,
	|	ВЫБОР
	|		КОГДА ДанныеПодбора.Номенклатура ЕСТЬ NULL 
	|			ТОГДА ДанныеКорзины.Цена
	|		ИНАЧЕ ДанныеПодбора.Цена
	|	КОНЕЦ КАК Цена,
	|	ВЫБОР
	|		КОГДА ДанныеПодбора.Номенклатура ЕСТЬ NULL 
	|			ТОГДА ДанныеКорзины.КоличествоУпаковок
	|		ИНАЧЕ ДанныеКорзины.КоличествоУпаковок + ДанныеПодбора.Количество
	|	КОНЕЦ КАК КоличествоУпаковок,
	|	ДанныеКорзины.ДатаПомещения,
	|	&Валюта,
	|	ВЫБОР
	|		КОГДА ДанныеПодбора.Номенклатура ЕСТЬ NULL 
	|			ТОГДА ДанныеКорзины.ВидЦены
	|		ИНАЧЕ ДанныеПодбора.ВидЦены
	|	КОНЕЦ КАК ВидЦены
	|ПОМЕСТИТЬ ОбщиеДанные
	|ИЗ
	|	ДанныеКорзины КАК ДанныеКорзины
	|		ЛЕВОЕ СОЕДИНЕНИЕ ДанныеПодбора КАК ДанныеПодбора
	|		ПО ДанныеКорзины.Номенклатура = ДанныеПодбора.Номенклатура
	|			И ДанныеКорзины.Характеристика = ДанныеПодбора.Характеристика
	|			И ДанныеКорзины.НоменклатураНабора = ДанныеПодбора.НоменклатураНабора
	|			И ДанныеКорзины.ХарактеристикаНабора = ДанныеПодбора.ХарактеристикаНабора
	|			И ДанныеКорзины.Упаковка = ДанныеПодбора.Упаковка
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДанныеПодбора.НоменклатураНабора,
	|	ДанныеПодбора.ХарактеристикаНабора,
	|	ДанныеПодбора.Номенклатура,
	|	ДанныеПодбора.Характеристика,
	|	ДанныеПодбора.Упаковка,
	|	ИСТИНА,
	|	ДанныеПодбора.Цена,
	|	ДанныеПодбора.Количество,
	|	&НачалоТекущегоДня,
	|	&Валюта,
	|	ДанныеПодбора.ВидЦены
	|ИЗ
	|	ДанныеПодбора КАК ДанныеПодбора
	|		ЛЕВОЕ СОЕДИНЕНИЕ ДанныеКорзины КАК ДанныеКорзины
	|		ПО ДанныеПодбора.Номенклатура = ДанныеКорзины.Номенклатура
	|			И ДанныеПодбора.Характеристика = ДанныеКорзины.Характеристика
	|			И ДанныеПодбора.НоменклатураНабора = ДанныеКорзины.НоменклатураНабора
	|			И ДанныеПодбора.ХарактеристикаНабора = ДанныеКорзины.ХарактеристикаНабора
	|			И ДанныеПодбора.Упаковка = ДанныеКорзины.Упаковка
	|ГДЕ
	|	ДанныеКорзины.Номенклатура ЕСТЬ NULL 
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Склады.Ссылка,
	|	Склады.Наименование
	|ПОМЕСТИТЬ Склады
	|ИЗ
	|	Справочник.Склады КАК Склады
	|ГДЕ
	|	Склады.Ссылка В ИЕРАРХИИ (&Склад)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ОбщиеДанные.НоменклатураНабора,
	|	ОбщиеДанные.ХарактеристикаНабора,
	|	ОбщиеДанные.Номенклатура    КАК Номенклатура,
	|	ОбщиеДанные.Характеристика  КАК Характеристика,
	|	&Склад                      КАК Склад
	|ПОМЕСТИТЬ ВтТовары
	|ИЗ
	|	ОбщиеДанные КАК ОбщиеДанные
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ОбщиеДанные.Номенклатура    КАК Номенклатура,
	|	ОбщиеДанные.Характеристика  КАК Характеристика,
	|	Склады.Ссылка               КАК Склад
	|ПОМЕСТИТЬ ВтВсеТоварыИСклады
	|ИЗ
	|	ОбщиеДанные КАК ОбщиеДанные,
	|	Склады КАК Склады
	|;
	|
	|";

	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
	Запрос.Выполнить();
	
	Тексты = Новый Массив();
	
	Текст = РегистрыСведений.СхемыОбеспечения.ВременнаяТаблицаСпособыОбеспечения("ВЫЧИСЛЯТЬ");
	Тексты.Добавить(Текст);
	
	Тексты.Добавить(ОбеспечениеВДокументахСервер.ВременнаяТаблицаГодыГрафикаПредприятия());
	
	Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Таблица.СпособОбеспеченияПотребностей КАК СпособОбеспеченияПотребностей
		|ПОМЕСТИТЬ РазличныеСпособыОбеспечения
		|ИЗ
		|	ВтСпособыОбеспечения КАК Таблица
		|ИНДЕКСИРОВАТЬ ПО
		|	СпособОбеспеченияПотребностей
		|;
		|
		|ВЫБРАТЬ
		|	Таблица.СпособОбеспеченияПотребностей КАК СпособОбеспечения,
		|	РасчетДатыПоставкиПереопределяемый.ПлановаяДатаПоставки КАК Дата
		|
		|ПОМЕСТИТЬ ВтДатыПлановойПоставки
		|ИЗ
		|	РазличныеСпособыОбеспечения КАК Таблица
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ РасчетДатыПоставкиПереопределяемый ПО ИСТИНА
		|		
		|ИНДЕКСИРОВАТЬ ПО
		|	СпособОбеспечения
		|;
		|УНИЧТОЖИТЬ РазличныеСпособыОбеспечения";
	
	Подстановки = ОбеспечениеВДокументахСервер.ПодстановкиПлановойДатыПоставки(
		"Таблица.СпособОбеспеченияПотребностей", "&НачалоТекущегоДня", Ложь, Истина);
	
	Текст = СтрЗаменить(Текст, "РасчетДатыПоставкиПереопределяемый.ПлановаяДатаПоставки", Подстановки.Поле);
	Текст = СтрЗаменить(Текст, "ЛЕВОЕ СОЕДИНЕНИЕ РасчетДатыПоставкиПереопределяемый ПО ИСТИНА", Подстановки.Соединения);
	
	Тексты.Добавить(Текст);
	
	Запрос.Текст = СтрСоединить(Тексты, ОбщегоНазначения.РазделительПакетаЗапросов());
	УстановитьПривилегированныйРежим(Истина);
	Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);

	Запрос.Текст = Обработки.СамообслуживаниеПартнеров.ВременныеТаблицыДляРасчетаДоступныхОстатков("ВтВсеТоварыИСклады")
		+ "ВЫБРАТЬ
		|	Товары.НоменклатураНабора,
		|	Товары.ХарактеристикаНабора,
		|	Товары.Номенклатура,
		|	Товары.Характеристика,
		|	Товары.Склад КАК Склад,
		|	ЕСТЬNULL(ДоступныеОстаткиПоДатам.Количество, 0)             КАК Доступно,
		|	ЕСТЬNULL(БлижайшиеДатыДоступности.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК Период,
		|	ЕСТЬNULL(ДатыПлановойПоставки.Дата, ДАТАВРЕМЯ(1, 1, 1))     КАК ДатаПоставки,
		|	ЕСТЬNULL(ТоварныеОграничения.МетодОбеспеченияПотребностей, ЗНАЧЕНИЕ(Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ)) КАК МУЗ
		|ПОМЕСТИТЬ ДанныеПоДоступностиИМУЗ
		|ИЗ
		|	ВтТовары КАК Товары
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтБлижайшиеДатыДоступности КАК БлижайшиеДатыДоступности
		|		ПО БлижайшиеДатыДоступности.Номенклатура   = Товары.Номенклатура
		|		 И БлижайшиеДатыДоступности.Характеристика = Товары.Характеристика
		|		 И БлижайшиеДатыДоступности.Склад          = Товары.Склад
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтДоступныеОстаткиПоДатам КАК ДоступныеОстаткиПоДатам
		|		ПО ДоступныеОстаткиПоДатам.Номенклатура   = Товары.Номенклатура
		|		 И ДоступныеОстаткиПоДатам.Характеристика = Товары.Характеристика
		|		 И ДоступныеОстаткиПоДатам.Склад          = Товары.Склад
		|		 И ДоступныеОстаткиПоДатам.Период         = БлижайшиеДатыДоступности.Дата
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
		|		ПО &ПодстановкаТоварногоОграничения
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтСпособыОбеспечения КАК СпособыОбеспечения
		|		ПО СпособыОбеспечения.Номенклатура   = Товары.Номенклатура
		|		 И СпособыОбеспечения.Характеристика = Товары.Характеристика
		|		 И СпособыОбеспечения.Склад          = Товары.Склад
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтДатыПлановойПоставки КАК ДатыПлановойПоставки
		|		ПО ДатыПлановойПоставки.СпособОбеспечения = СпособыОбеспечения.СпособОбеспеченияПотребностей
		|
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ДанныеПоДоступностиИМУЗ.НоменклатураНабора КАК НоменклатураНабора,
		|	ДанныеПоДоступностиИМУЗ.ХарактеристикаНабора КАК ХарактеристикаНабора,
		|	ДанныеПоДоступностиИМУЗ.Номенклатура КАК Номенклатура,
		|	ДанныеПоДоступностиИМУЗ.Характеристика КАК Характеристика,
		|	ДанныеПоДоступностиИМУЗ.Период КАК Период,
		|	ДанныеПоДоступностиИМУЗ.Доступно КАК Доступно,
		|	ВЫБОР
		|		КОГДА ВидыНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
		|			ТОГДА &СтрокаУслугаДоступна
		|		КОГДА ВидыНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
		|			ТОГДА &СтрокаРаботаДоступна
		|		КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
		|			ТОГДА &СтрокаВыберитеСклад
		|		КОГДА ДанныеПоДоступностиИМУЗ.МУЗ = ЗНАЧЕНИЕ(Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ)
		|			ТОГДА &СтрокаДоступноПодЗаказ
		|		КОГДА НЕ ВЫРАЗИТЬ(ДанныеПоДоступностиИМУЗ.Склад КАК Справочник.Склады).КонтролироватьСвободныеОстатки
		|			 ТОГДА &СтрокаТребуетсяУточнить
		|		ИНАЧЕ &СтрокаСогласноГрафика
		|	КОНЕЦ КАК Доступность,
		|	ДанныеПоДоступностиИМУЗ.ДатаПоставки КАК ДатаПоставки
		|ПОМЕСТИТЬ ДанныеПоДоступности
		|ИЗ
		|	ДанныеПоДоступностиИМУЗ КАК ДанныеПоДоступностиИМУЗ
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Склады КАК Склады
		|		ПО ДанныеПоДоступностиИМУЗ.Склад = Склады.Ссылка
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОбщиеДанные КАК ОбщиеДанные
		|		ПО ДанныеПоДоступностиИМУЗ.Номенклатура = ОбщиеДанные.Номенклатура
		|		 И ДанныеПоДоступностиИМУЗ.Характеристика = ОбщиеДанные.Характеристика
		|		 И ДанныеПоДоступностиИМУЗ.НоменклатураНабора = ОбщиеДанные.НоменклатураНабора
		|		 И ДанныеПоДоступностиИМУЗ.ХарактеристикаНабора = ОбщиеДанные.ХарактеристикаНабора
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
		|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
		|			ПО СправочникНоменклатура.ВидНоменклатуры = ВидыНоменклатуры.Ссылка
		|		ПО ДанныеПоДоступностиИМУЗ.Номенклатура = СправочникНоменклатура.Ссылка
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ОбщиеДанные.НоменклатураНабора,
		|	ОбщиеДанные.ХарактеристикаНабора,
		|	ОбщиеДанные.Номенклатура,
		|	ОбщиеДанные.Характеристика,
		|	ОбщиеДанные.Упаковка,
		|	ОбщиеДанные.КОформлению,
		|	ОбщиеДанные.КоличествоУпаковок,
		|	ОбщиеДанные.Цена,
		|	ОбщиеДанные.ДатаПомещения,
		|	ОбщиеДанные.Валюта,
		|	&СтавкаНДС КАК СтавкаНДС,
		|	ВЫРАЗИТЬ(&СтавкаНДС КАК Справочник.СтавкиНДС).Ставка / 100 КАК ЗначениеСтавкиНДС,
		|	ОбщиеДанные.ВидЦены
		|ПОМЕСТИТЬ ДанныеСНДС
		|ИЗ
		|	ОбщиеДанные КАК ОбщиеДанные
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
		|		ПО ОбщиеДанные.Номенклатура = СпрНоменклатура.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтавкиНДСНоменклатуры.СрезПоследних(&Дата,
		|			Страна = &СтранаРегистрации ИЛИ Страна = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)) КАК СтавкиНДСНоменклатуры
		|		ПО ОбщиеДанные.Номенклатура = СтавкиНДСНоменклатуры.Номенклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСтавкиНДС.СрезПоследних(&Дата, Страна = &СтранаРегистрации) КАК ОсновныеСтавкиНДС
		|		ПО (ИСТИНА)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|";
	
	Запрос.Текст = СтрЗаменить(Запрос.Текст,"&СтавкаНДС", УчетНДСУП.ТекстЗапросаСтавкаНДС("&НалогообложениеНДС", "СпрНоменклатура"));
		
	ПоляСоединения = "Товары.Номенклатура,Товары.Характеристика,Товары.Склад";
	
	УчетНДСУП.УстановитьПараметрыЗапросаСтавкиНДС(Запрос.Параметры, Организация, ТекущаяДатаСеанса());
	
	Запрос.Текст = РегистрыСведений.ТоварныеОграничения.ПодставитьСоединение(Запрос.Текст, "ПодстановкаТоварногоОграничения", ПоляСоединения);
	
	Если ДоступенПросмотрОстатков Тогда
		
		Запрос.Текст = Запрос.Текст
		+ Обработки.СамообслуживаниеПартнеров.ВременнаяТаблицаСвободноДляПродажиСуммарноПоСкладам("ВтВсеТоварыИСклады")
		+"ВЫБРАТЬ
		|	ДанныеСНДС.НоменклатураНабора,
		|	ДанныеСНДС.ХарактеристикаНабора,
		|	ДанныеСНДС.Номенклатура,
		|	ДанныеСНДС.Характеристика,
		|	ДанныеСНДС.Упаковка,
		|	ДанныеСНДС.КОформлению,
		|	ДанныеСНДС.КоличествоУпаковок КАК КоличествоУпаковок,
		|	ДанныеСНДС.Цена КАК Цена,
		|	ДанныеСНДС.ДатаПомещения КАК ДатаПомещения,
		|	ДанныеСНДС.Валюта КАК Валюта,
		|	ДанныеСНДС.СтавкаНДС КАК СтавкаНДС,
		|	ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок КАК Сумма,
		|	ВЫБОР
		|		КОГДА &НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС)
		|			ТОГДА ВЫБОР
		|					КОГДА &ЦенаВключаетНДС
		|						ТОГДА ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.ЗначениеСтавкиНДС / (1 + ДанныеСНДС.ЗначениеСтавкиНДС)
		|					ИНАЧЕ ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.ЗначениеСтавкиНДС
		|				КОНЕЦ
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК СуммаНДС,
		|	ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.Цена + ВЫБОР
		|		КОГДА &НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС)
		|			ТОГДА ВЫБОР
		|					КОГДА &ЦенаВключаетНДС
		|						ТОГДА 0
		|					ИНАЧЕ ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.ЗначениеСтавкиНДС
		|				КОНЕЦ
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК СуммаСНДС,
		|	ДанныеСНДС.ВидЦены КАК ВидЦены,
		|	ВЫБОР
		|		КОГДА УпаковкиНоменклатуры.Ссылка ЕСТЬ NULL 
		|			ТОГДА ДанныеСНДС.КоличествоУпаковок
		|		ИНАЧЕ ДанныеСНДС.КоличествоУпаковок * &ТекстЗапросаКоэффициентУпаковки
		|	КОНЕЦ КАК Количество,
		|	ДанныеПоДоступности.Период,
		|	ДанныеПоДоступности.Доступно,
		|	ДанныеПоДоступности.Доступность,
		|	ДанныеПоДоступности.ДатаПоставки,
		|	ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаОстатков.Свободно, 0) / ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК ЧИСЛО(15, 3)) КАК ДоступноСейчас,
		|	СправочникНоменклатура.ПодакцизныйТовар
		|ИЗ
		|	ДанныеСНДС КАК ДанныеСНДС
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеПоДоступности КАК ДанныеПоДоступности
		|			ПО ДанныеСНДС.Номенклатура = ДанныеПоДоступности.Номенклатура
		|			И ДанныеСНДС.Характеристика = ДанныеПоДоступности.Характеристика
		|			И ДанныеСНДС.НоменклатураНабора = ДанныеПоДоступности.НоменклатураНабора
		|			И ДанныеСНДС.ХарактеристикаНабора = ДанныеПоДоступности.ХарактеристикаНабора
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВтСвободноДляПродажи КАК ТаблицаОстатков
		|		ПО ТаблицаОстатков.Номенклатура   = ДанныеСНДС.Номенклатура
		|		 И ТаблицаОстатков.Характеристика = ДанныеСНДС.Характеристика
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
		|		ПО ДанныеСНДС.Упаковка = УпаковкиНоменклатуры.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
		|		ПО ДанныеСНДС.Номенклатура = СправочникНоменклатура.Ссылка";
		
	Иначе
		
		Запрос.Текст = Запрос.Текст + "
		|ВЫБРАТЬ
		|	ДанныеСНДС.НоменклатураНабора,
		|	ДанныеСНДС.ХарактеристикаНабора,
		|	ДанныеСНДС.Номенклатура,
		|	ДанныеСНДС.Характеристика,
		|	ДанныеСНДС.Упаковка,
		|	ДанныеСНДС.КОформлению,
		|	ДанныеСНДС.КоличествоУпаковок КАК КоличествоУпаковок,
		|	ДанныеСНДС.Цена КАК Цена,
		|	ДанныеСНДС.ДатаПомещения КАК ДатаПомещения,
		|	ДанныеСНДС.Валюта КАК Валюта,
		|	ДанныеСНДС.СтавкаНДС КАК СтавкаНДС,
		|	ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок КАК Сумма,
		|	ВЫБОР
		|		КОГДА &НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС)
		|			ТОГДА ВЫБОР
		|					КОГДА &ЦенаВключаетНДС
		|						ТОГДА ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.ЗначениеСтавкиНДС / (1 + ДанныеСНДС.ЗначениеСтавкиНДС)
		|					ИНАЧЕ ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.ЗначениеСтавкиНДС
		|				КОНЕЦ
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК СуммаНДС,
		|	ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.Цена + ВЫБОР
		|		КОГДА &НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС)
		|			ТОГДА ВЫБОР
		|					КОГДА &ЦенаВключаетНДС
		|						ТОГДА 0
		|					ИНАЧЕ ДанныеСНДС.Цена * ДанныеСНДС.КоличествоУпаковок * ДанныеСНДС.ЗначениеСтавкиНДС
		|				КОНЕЦ
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК СуммаСНДС,
		|	ДанныеСНДС.ВидЦены КАК ВидЦены,
		|	ВЫБОР
		|		КОГДА УпаковкиНоменклатуры.Ссылка ЕСТЬ NULL 
		|			ТОГДА ДанныеСНДС.КоличествоУпаковок
		|		ИНАЧЕ ДанныеСНДС.КоличествоУпаковок * &ТекстЗапросаКоэффициентУпаковки
		|	КОНЕЦ КАК Количество,
		|	ДанныеПоДоступности.Период,
		|	ДанныеПоДоступности.Доступно,
		|	ДанныеПоДоступности.Доступность,
		|	ДанныеПоДоступности.ДатаПоставки,
		|	СправочникНоменклатура.ПодакцизныйТовар
		|ИЗ
		|	ДанныеСНДС КАК ДанныеСНДС
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеПоДоступности КАК ДанныеПоДоступности
		|		   ПО ДанныеСНДС.Номенклатура = ДанныеПоДоступности.Номенклатура
		|			И ДанныеСНДС.Характеристика = ДанныеПоДоступности.Характеристика
		|			И ДанныеСНДС.НоменклатураНабора = ДанныеПоДоступности.НоменклатураНабора
		|			И ДанныеСНДС.ХарактеристикаНабора = ДанныеПоДоступности.ХарактеристикаНабора
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
		|		ПО ДанныеСНДС.Упаковка = УпаковкиНоменклатуры.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
		|		ПО ДанныеСНДС.Номенклатура = СправочникНоменклатура.Ссылка";
		
	КонецЕсли;
	
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки",
			Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
				"УпаковкиНоменклатуры",
				"СправочникНоменклатура"));
	
	УстановитьПривилегированныйРежим(Истина);
	Результат = Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);
	Запрос.МенеджерВременныхТаблиц.Закрыть();

	КорзинаПокупателя.Загрузить(Результат.Выгрузить());
	
	ОбработатьДанныеКорзины();
	
КонецПроцедуры

&НаКлиенте
Процедура ОповеститьОИзмененииКорзиныПокупателя()

	Оповестить("Запись_КорзинаПокупателя", Новый Структура("ОбъектАвторизации", ?(АвторизованПартнер, Партнер, КонтактноеЛицо)));

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

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

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

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

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

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