Загрузка данных


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