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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	#Область ПроверкаСтатейИАналитик

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

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

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

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

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

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

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

Процедура ЗаполнитьНаОснованииЗаказа(ДокументОснование) Экспорт
	
	Документы.ОтчетПереработчика2_5.ЗаполнитьНаОснованииЗаказа(ЭтотОбъект, ДокументОснование);
	
КонецПроцедуры

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура РаспределитьНомераГТД(Отказ)
	
	// 1. Распределение прослеживаемых номеров ГТД.
	Результат = РаспределитьНомераГТДПрослеживаемые(Отказ);
	// 2. Распределение не прослеживаемых номеров ГТД.
	РаспределитьНомераГТДПростые(Результат.ОтработанныеГруппыЗатратИТоварыМатериалы,
		Результат.ОтработанныеГруппыЗатратИТоварыИзделия, Отказ);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

#Область Проверки

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

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

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

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

Функция ПараметрыСинхронизацииКлючей()
	
	Результат = Новый Соответствие;
	
	Результат.Вставить("Справочник.ПартииПроизводства", "ПометкаУдаления");
	
	Возврат Результат;
	
КонецФункции

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

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

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

#КонецЕсли

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