Возврат товаров между организациями / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ТипЗапасовОперации()
	Возврат ?(ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратПоКомиссииМеждуОрганизациями,
			Перечисления.ТипыЗапасов.КомиссионныйТовар,
			Перечисления.ТипыЗапасов.Товар);
КонецФункции

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

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

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

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

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

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

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

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

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

Процедура ПроверитьКорректностьВозвращаемыхТоваров(Отказ)
	
// Для строк ТЧ Товары, проверим, что возвраты не превышают передачи
// Особенности 
//	- не допускается, чтобы в возврате было другое назначение, чем в передаче,
//  т.к. это не имеет никакого практического смысла
//  - ограничение - если возврат осуществляется на склад, отличный от передачи,
//  то по товару должна быть одинаковая настройка учета серий по себестоимости -
//  или на обоих складах включена, или выключена, т.е. нельзя передать с серией, а
//  вернуть без (и, наоборот). Если так нужно сделать, то как обход - возвращать без 
//  указания документа передачи.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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