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

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

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

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

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

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

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

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

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

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

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

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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