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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьДокументНаОснованииЗаказаПоставщику(Знач ДокументОснование, Знач СкладПоступления = Неопределено, РеквизитыЗаказа = Неопределено)

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

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

Процедура ЗаполнитьДокументНаОснованииВозвратаТоваровПоставщику(Знач ДокументОснование)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ТипЗапасовПоХозОперации()

	Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути
		Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути
		Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути Тогда
		
		Возврат Перечисления.ТипыЗапасов.СобственныйТоварВПути;
		
	ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСФактуровкаПоставки
		Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки Тогда
		
		Возврат Перечисления.ТипыЗапасов.СобственныйТоварПоНеотфактурованнойПоставке;
		
	ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию Тогда
		Возврат Перечисления.ТипыЗапасов.КомиссионныйТовар;
	Иначе
		Возврат Перечисления.ТипыЗапасов.Товар;
	КонецЕсли;
	
КонецФункции

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

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

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

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

#КонецЕсли

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