Заявка на возврат товаров от клиента / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

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

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

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

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

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

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

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

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

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

	ДопустимыеОтклонения = Результат[1].Выгрузить();
	Выборка = Результат[4].Выбрать();
	ВыборкаОтменыБезПроверок = Результат[5].Выбрать();

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

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

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

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

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

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

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

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

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

	Если ЭтоНовый() И Не ЗначениеЗаполнено(Автор) Тогда
		Автор = Пользователи.АвторизованныйПользователь();
	КонецЕсли;

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

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

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

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

	КонецЕсли;

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

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

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

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

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

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

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

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
	ЗаявкаНаВозвратТоваровОтКлиентаЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

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

// Инициализация и заполнение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Выборка = Результат.Выбрать();

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

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

	Возврат ТекстЗапроса;

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

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

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

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

#КонецЕсли

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