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

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

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

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

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

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

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

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

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

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

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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