Перемещение товаров / Модуль объекта

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

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

// Устанавливает статус для объекта документа
//
// Параметры:
// 		НовыйСтатус - Строка - Имя статуса, который будет установлен у заказов
// 		ДополнительныеПараметры - Структура - Структура дополнительных параметров установки статуса.
//
// Возвращаемое значение:
// 		Булево - Истина, в случае успешной установки нового статуса.
//
Функция УстановитьСтатус(НовыйСтатус, ДополнительныеПараметры) Экспорт

	Статус= Перечисления.СтатусыПеремещенийТоваров[НовыйСтатус];
	ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ПеремещениеТоваров);
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий);
	Возврат ПроверитьЗаполнение();

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если ЗначениеЗаполнено(СкладОтправитель) И СкладОтправитель = СкладПолучатель Тогда

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

	КонецЕсли;

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

	// Если накладная по заказу - то код строки должен быть заполнен.
	Если Не ЗначениеЗаполнено(ЗаказНаПеремещение) Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Товары.КодСтроки");
	КонецЕсли;

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

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

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

Процедура ПриКопировании(ОбъектКопирования)

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

	Для Каждого СтрокаТЧ Из Товары Цикл
		
		СтрокаТЧ.КодСтроки             = 0;
		СтрокаТЧ.ЗаказНаПеремещение    = Документы.ЗаказНаПеремещение.ПустаяСсылка();
		СтрокаТЧ.Сделка                = Справочники.СделкиСКлиентами.ПустаяСсылка();
		СтрокаТЧ.Назначение            = Неопределено;
		СтрокаТЧ.ИдентификаторСтроки   = "";
		СтрокаТЧ.НазначениеОтправителя = Неопределено;
		
	КонецЦикла;

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

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

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

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

// Параметры:
//    Таблица - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа
Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт

	СтрокаТаб = Таблица.Добавить();
	СтрокаТаб.НомерНабора     = 1;
	СтрокаТаб.ЗначениеДоступа = Организация;

	СтрокаТаб = Таблица.Добавить();
	СтрокаТаб.НомерНабора     = 1;
	СтрокаТаб.ЗначениеДоступа = СкладОтправитель;

	СтрокаТаб = Таблица.Добавить();
	СтрокаТаб.НомерНабора     = 2;
	СтрокаТаб.ЗначениеДоступа = Организация;

	СтрокаТаб = Таблица.Добавить();
	СтрокаТаб.НомерНабора     = 2;
	СтрокаТаб.ЗначениеДоступа = СкладПолучатель;

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

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

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

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

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

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

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

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

Функция ДокументОснованиеПриЗаполнении(ДанныеЗаполнения)
	
	Основание = Неопределено;
	
	Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") Тогда
		Возврат Основание;
	КонецЕсли;
	
	Если ДанныеЗаполнения.Свойство("МассивЗаказов") Тогда
		
		Основание = ДанныеЗаполнения.МассивЗаказов[0];
		
	ИначеЕсли ДанныеЗаполнения.Свойство("Товары")
		И ТипЗнч(ДанныеЗаполнения.Товары) = Тип("ТаблицаЗначений") И ДанныеЗаполнения.Товары.Колонки.Найти("ЗаказНаПеремещение") <> Неопределено Тогда
		
		Основание = ДанныеЗаполнения.Товары[0].ЗаказНаПеремещение;
		
	КонецЕсли;
	
	Возврат Основание;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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