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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	// Проверка характеристик в т.ч. товары.
	НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект, МассивНепроверяемыхРеквизитов, Отказ);
	
	// Проверка заполнения серий в т.ч. серии.
	НоменклатураСервер.ПроверитьЗаполнениеСерий(
		ЭтотОбъект,
		НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ВнутреннееПотребление),
		Отказ,
		МассивНепроверяемыхРеквизитов);
	

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

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

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

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

Процедура ПриКопировании(ОбъектКопирования)
	
	Статус = Перечисления.СтатусыВнутреннихПотреблений.Отгружено;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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