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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

	Запрос.Выполнить();
	
	ЗапасыСервер.ЗаполнитьВидыЗапасовПоУмолчанию(МенеджерВременныхТаблиц, Товары);
	
КонецПроцедуры

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

#Область Округление

Функция ПараметрыОкругления() Экспорт
	
	Параметры = Неопределено;
	
	
	Возврат Параметры;

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

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

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

#КонецЕсли

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