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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)

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

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

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

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

Функция ИмеютсяЗаписиТаблицыТоваровВМенеджереВременныхТаблиц(МенеджерВременныхТаблиц)
	
	Запрос = Новый Запрос();
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ИСТИНА
	|ИЗ
	|	ТаблицаТоваров КАК ТаблицаТоваров";
	Выборка = Запрос.Выполнить().Выбрать();
	
	Возврат Выборка.Количество() > 0;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура РаспределитьРасчетыПоОснованиям(ВыборкаРасчетыПоОснованию)

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

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

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

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

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

#КонецЕсли

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