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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Автор = Пользователи.ТекущийПользователь();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

///////////////////////////////////////////////////////////////////////////////
// Заполнение расхождений

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

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

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

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

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

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

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

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

	//-- НЕ УТ
	|	НовыеДанные.СписатьНаРасходы КАК СписатьНаРасходы,
	|	НовыеДанные.СтатьяРасходов КАК СтатьяРасходов,
	|	НовыеДанные.АналитикаРасходов КАК АналитикаРасходов,
	|	НовыеДанные.АналитикаАктивовПассивов КАК АналитикаАктивовПассивов,
	|	НовыеДанные.АналитикаДоходов КАК АналитикаДоходов,
	|	НовыеДанные.НаправлениеДеятельности КАК НаправлениеДеятельности,
	//++ НЕ УТ
	|	НовыеДанные.ХешСуммаНастройкиСчетов КАК ХешСуммаНастройкиСчетов,
	//-- НЕ УТ
	|	НовыеДанные.НомерГТД КАК НомерГТД,
	|	НовыеДанные.КодТНВЭД КАК КодТНВЭД,
	|	НовыеДанные.СтавкаНДС КАК СтавкаНДС,
	|	НовыеДанные.Сумма КАК Сумма,
	|	НовыеДанные.СуммаНДС КАК СуммаНДС,
	|	НовыеДанные.СуммаСНДС КАК СуммаСНДС,
	|	НовыеДанные.КодСтроки КАК КодСтроки,
	|	НовыеДанные.НомерСтроки КАК НомерСтроки
	|ПОМЕСТИТЬ ДанныеРасхождений
	|ИЗ
	|	НовыеДанные КАК НовыеДанные
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсходныеДанныеДляРасхождений КАК ИсходныеДанные
	|		ПО НовыеДанные.Номенклатура = ИсходныеДанные.Номенклатура
	|			И НовыеДанные.Характеристика = ИсходныеДанные.Характеристика
	|			И НовыеДанные.Назначение = ИсходныеДанные.Назначение
	|			И НовыеДанные.Серия = ИсходныеДанные.Серия
	|			И НовыеДанные.Содержание = ИсходныеДанные.Содержание
	|			И НовыеДанные.Упаковка = ИсходныеДанные.Упаковка
	|			И НовыеДанные.ЗаказПоставщику = ИсходныеДанные.ЗаказПоставщику
	|			И НовыеДанные.Склад = ИсходныеДанные.Склад
	|			И НовыеДанные.Сделка = ИсходныеДанные.Сделка
	|			И НовыеДанные.Подразделение = ИсходныеДанные.Подразделение
	|			И НовыеДанные.НомерГруппыЗатрат = ИсходныеДанные.НомерГруппыЗатрат
	//++ НЕ УТ
	|			И НовыеДанные.СтатьяКалькуляции = ИсходныеДанные.СтатьяКалькуляции

	//-- НЕ УТ
	|			И НовыеДанные.СписатьНаРасходы = ИсходныеДанные.СписатьНаРасходы
	|			И НовыеДанные.СтатьяРасходов = ИсходныеДанные.СтатьяРасходов
	|			И НовыеДанные.АналитикаРасходов = ИсходныеДанные.АналитикаРасходов
	|			И НовыеДанные.АналитикаАктивовПассивов = ИсходныеДанные.АналитикаАктивовПассивов
	|			И НовыеДанные.АналитикаДоходов = ИсходныеДанные.АналитикаДоходов
	|			И НовыеДанные.НаправлениеДеятельности = ИсходныеДанные.НаправлениеДеятельности
	//++ НЕ УТ
	|			И НовыеДанные.ХешСуммаНастройкиСчетов = ИсходныеДанные.ХешСуммаНастройкиСчетов
	//-- НЕ УТ
	|			И НовыеДанные.НомерГТД = ИсходныеДанные.НомерГТД
	|			И НовыеДанные.КодТНВЭД = ИсходныеДанные.КодТНВЭД
	|			И НовыеДанные.СтавкаНДС = ИсходныеДанные.СтавкаНДС
	|			И НовыеДанные.КодСтроки = ИсходныеДанные.КодСтроки
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ИсходныеДанные.Номенклатура,
	|	ИсходныеДанные.Характеристика,
	|	ИсходныеДанные.Назначение,
	|	ИсходныеДанные.Серия,
	|	ИсходныеДанные.Содержание,
	|	ИсходныеДанные.Упаковка,
	|	ИсходныеДанные.ЗаказПоставщику,
	|	ИсходныеДанные.Склад,
	|	ИсходныеДанные.Сделка,
	|	ИсходныеДанные.Подразделение,
	|	ИсходныеДанные.НомерГруппыЗатрат,
	//++ НЕ УТ
	|	ИсходныеДанные.СтатьяКалькуляции КАК СтатьяКалькуляции,

	//-- НЕ УТ
	|	ИсходныеДанные.СписатьНаРасходы,
	|	ИсходныеДанные.СтатьяРасходов,
	|	ИсходныеДанные.АналитикаРасходов,
	|	ИсходныеДанные.АналитикаАктивовПассивов,
	|	ИсходныеДанные.АналитикаДоходов,
	|	ИсходныеДанные.НаправлениеДеятельности,
	//++ НЕ УТ
	|	ИсходныеДанные.ХешСуммаНастройкиСчетов,
	//-- НЕ УТ
	|	ИсходныеДанные.НомерГТД,
	|	ИсходныеДанные.КодТНВЭД,
	|	ИсходныеДанные.СтавкаНДС,
	|	-ИсходныеДанные.Сумма,
	|	-ИсходныеДанные.СуммаНДС,
	|	-ИсходныеДанные.СуммаСНДС,
	|	ИсходныеДанные.КодСтроки,
	|	ИсходныеДанные.НомерСтроки
	|ИЗ
	|	ИсходныеДанныеДляРасхождений КАК ИсходныеДанные
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ НовыеДанные КАК НовыеДанные
	|		ПО ИсходныеДанные.Номенклатура = НовыеДанные.Номенклатура
	|			И ИсходныеДанные.Характеристика = НовыеДанные.Характеристика
	|			И ИсходныеДанные.Назначение = НовыеДанные.Назначение
	|			И ИсходныеДанные.Серия = НовыеДанные.Серия
	|			И ИсходныеДанные.Содержание = НовыеДанные.Содержание
	|			И ИсходныеДанные.Упаковка = НовыеДанные.Упаковка
	|			И ИсходныеДанные.ЗаказПоставщику = НовыеДанные.ЗаказПоставщику
	|			И ИсходныеДанные.Склад = НовыеДанные.Склад
	|			И ИсходныеДанные.Сделка = НовыеДанные.Сделка
	|			И ИсходныеДанные.Подразделение = НовыеДанные.Подразделение
	|			И ИсходныеДанные.НомерГруппыЗатрат = НовыеДанные.НомерГруппыЗатрат
	//++ НЕ УТ
	|			И ИсходныеДанные.СтатьяКалькуляции = НовыеДанные.СтатьяКалькуляции

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

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

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

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

	//-- НЕ УТ
	|	НовыеДанные.СписатьНаРасходы КАК СписатьНаРасходы,
	|	НовыеДанные.СтатьяРасходов КАК СтатьяРасходов,
	|	НовыеДанные.АналитикаРасходов КАК АналитикаРасходов,
	|	НовыеДанные.АналитикаАктивовПассивов КАК АналитикаАктивовПассивов,
	|	НовыеДанные.АналитикаДоходов КАК АналитикаДоходов,
	|	НовыеДанные.НаправлениеДеятельности КАК НаправлениеДеятельности,
	//++ НЕ УТ
	|	НовыеДанные.ХешСуммаНастройкиСчетов КАК ХешСуммаНастройкиСчетов,
	//-- НЕ УТ
	|	НовыеДанные.НомерГТД КАК НомерГТД,
	|	НовыеДанные.КодТНВЭД КАК КодТНВЭД,
	|	НовыеДанные.СтавкаНДС КАК СтавкаНДС,
	|	НовыеДанные.КоличествоУпаковок КАК КоличествоУпаковок,
	|	НовыеДанные.Количество КАК Количество,
	|	НовыеДанные.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
	|	НовыеДанные.СуммаНДС КАК СуммаНДС,
	|	НовыеДанные.СуммаСНДС КАК СуммаСНДС,
	|	НовыеДанные.КодСтроки КАК КодСтроки,
	|	НовыеДанные.НомерСтроки КАК НомерСтроки
	|ПОМЕСТИТЬ ДанныеРасхождений
	|ИЗ
	|	НовыеДанные КАК НовыеДанные
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ИсходныеДанные.Номенклатура,
	|	ИсходныеДанные.Характеристика,
	|	ИсходныеДанные.Назначение,
	|	ИсходныеДанные.Серия,
	|	ИсходныеДанные.Содержание,
	|	ИсходныеДанные.Упаковка,
	|	ИсходныеДанные.ЗаказПоставщику,
	|	ИсходныеДанные.Склад,
	|	ИсходныеДанные.Сделка,
	|	ИсходныеДанные.Подразделение КАК Подразделение,
	|	ИсходныеДанные.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
	//++ НЕ УТ
	|	ИсходныеДанные.СтатьяКалькуляции КАК СтатьяКалькуляции,

	//-- НЕ УТ
	|	ИсходныеДанные.СписатьНаРасходы КАК СписатьНаРасходы,
	|	ИсходныеДанные.СтатьяРасходов,
	|	ИсходныеДанные.АналитикаРасходов,
	|	ИсходныеДанные.АналитикаАктивовПассивов,
	|	ИсходныеДанные.АналитикаДоходов,
	|	ИсходныеДанные.НаправлениеДеятельности,
	//++ НЕ УТ
	|	ИсходныеДанные.ХешСуммаНастройкиСчетов,
	//-- НЕ УТ
	|	ИсходныеДанные.НомерГТД,
	|	ИсходныеДанные.КодТНВЭД,
	|	ИсходныеДанные.СтавкаНДС,
	|	-ИсходныеДанные.КоличествоУпаковок,
	|	-ИсходныеДанные.Количество,
	|	-ИсходныеДанные.КоличествоПоРНПТ,
	|	-ИсходныеДанные.СуммаНДС,
	|	-ИсходныеДанные.СуммаСНДС,
	|	ИсходныеДанные.КодСтроки,
	|	ИсходныеДанные.НомерСтроки
	|ИЗ
	|	ИсходныеДанныеДляРасхождений КАК ИсходныеДанные
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	УчтенныеРасхождения.Номенклатура,
	|	УчтенныеРасхождения.Характеристика,
	|	УчтенныеРасхождения.Назначение,
	|	УчтенныеРасхождения.Серия,
	|	УчтенныеРасхождения.Содержание,
	|	УчтенныеРасхождения.Упаковка,
	|	УчтенныеРасхождения.ЗаказПоставщику,
	|	УчтенныеРасхождения.Склад,
	|	УчтенныеРасхождения.Сделка,
	|	УчтенныеРасхождения.Подразделение,
	|	УчтенныеРасхождения.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
	//++ НЕ УТ
	|	УчтенныеРасхождения.СтатьяКалькуляции КАК СтатьяКалькуляции,

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

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

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

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

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

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

#КонецЕсли

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