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