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

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

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

#Область УсловияПродаж

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЗаполнениеПоОснованию

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

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

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

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

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

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

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

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

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

#Область ИнициализацияИЗаполнение

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

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

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

#Область ВидыЗапасов

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

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

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

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

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

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

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

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

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

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

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

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

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

	РезультатЗапрос = Запрос.Выполнить();
	
	Возврат (Не РезультатЗапрос.Пустой());
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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