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

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

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

#Область Статус

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

// Корректирует строки, по которым не была оформлено поступление или складские ордера или имеются расхождения по мерным товарам.
// 
// Параметры:
// 	СтруктураПараметров - см. ЗаказыСервер.СтруктураКорректировкиСтрокЗаказа
// Возвращаемое значение:
// 	см. ЗаказыСервер.РезультатОтменыНеотработанныхСтрок
//
Функция СкорректироватьСтрокиЗаказа(СтруктураПараметров) Экспорт
	Возврат Документы.ЗаказПереработчику2_5.СкорректироватьСтрокиЗаказа(ЭтотОбъект, СтруктураПараметров);
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

#КонецЕсли

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