Задача: Если пришел возврат на позицию, которая была собрана по варианту комплектации, то нужно выполнить её разбор и положить комплектующие в ячейки на складе.
Ход выполнения:
1 шаг: При получении возврата от хранители оформляем приход и размещение возвращенной позиции на склад в ячейку приемки.
2 шаг: Проверяем, есть ли в структуре «Заказ клиента» связанный документ «Заказ на сборку», тем самым понимаем что продаваемая позиция собиралась из комплектующих.
3 шаг: Если документ «Заказ на сборку» имеется в структуре «Заказ клиента», тогда формируем цепочку документов разбора. «Заказ на разбор» - «Расходный ордер» - «Документ отбора»-«Разборка» - «Приходный ордер» - «Размещение».
Итог: Получаем возвращенный товар на склад в разобранном виде.
Решение: На форме имеется динамический список "Заказы", сформированный по данным обмена с Маркетплейсом.
Выделяем строку табличной части "Заказы" и нажимаем кнопку "ВыполнитьРазборкуОтмененныхЗаказов".
&НаКлиенте
Процедура ВыполнитьРазборкуОтмененныхЗаказов(Команда)
вЗаказы = Новый Массив;
Для Каждого ВыделеннаяСтрока из Элементы.Заказы.ВыделенныеСтроки Цикл
ДанныеСтрокиЗаказМп = Элементы.Заказы.ДанныеСтроки(ВыделеннаяСтрока).ЗаказТорговойПлощадки;
Струкуктурастроки = Новый Структура;
вЗаказы.Добавить(ДанныеСтрокиЗаказМп);
КонецЦикла;
Если вЗаказы.Количество() = 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Не выбраны строки для выполнения возврата");
Возврат;
КонецЕсли;
ВыполнитьРазборкуОтмененныхЗаказовНаСервере(вЗаказы);
КонецПроцедуры
По выделенным заказам начинается проверка и формирование документов приемки:
&НаСервере
Процедура ВыполнитьРазборкуОтмененныхЗаказовНаСервере(Заказы)
ДокументыПередачаНаКомиссию = ПолучитьДокументыПередачаНаКомиссиюПоЗаказам(Заказы);
ОсновнаяУпаковкаСборок = Константы.ОсновнаяУпаковкаСборок.Получить();
Если ДокументыПередачаНаКомиссию.Количество() = 0 Тогда
ОбщегоНазначения.СообщитьПользователю("По выбранным заказам не Создан документ 'Передача на комиссию'.");
Возврат;
КонецЕсли;
Для Каждого ДокументПередачи из ДокументыПередачаНаКомиссию Цикл
Передача = ДокументПередачи.Ссылка;
ЗаказКлиента = Передача.ЗаказКлиента;
ВозвратОтКоммисионера = Документы.ПоступлениеТоваровОтХранителя.СоздатьДокумент();
ВозвратОтКоммисионера.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера;
ВозвратОтКоммисионера.Заполнить(Передача);
ЗаполнитьЗначенияСвойств(ВозвратОтКоммисионера,Передача);
ВозвратОтКоммисионера.Номер = "";
ВозвратОтКоммисионера.ДокументОснование = Передача;
ВозвратОтКоммисионера.Дата = ТекущаяДата();
Для Каждого СтрокаТовара Из Передача.Товары Цикл
НовСтрТовары = ВозвратОтКоммисионера.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НовСтрТовары,СтрокаТовара);
КонецЦикла;
ВозвратОтКоммисионера.Записать();
ОрдерныйСклад = СкладыСервер.ЕстьОрдерныйНаОтгрузкуСклад(Передача.Склад);
Если ОрдерныйСклад Тогда
//Создаем ПриходныйОрдер
#Область ПриходныйОрдер
ЗонаПриемки = Справочники.СкладскиеЯчейки.ЗонаПриемкиПоУмолчанию(Передача.Склад,Справочники.СкладскиеПомещения.ПустаяСсылка());
НовыйПриходныйОрдер = Документы.ПриходныйОрдерНаТовары.СоздатьДокумент();
Номер = ВозвратОтКоммисионера.Номер;
Пока Лев(Номер,1)="0" или Лев(Номер,1)="-" Цикл
Номер = Прав(Номер,СтрДлина(Номер)-1);
КонецЦикла;
НовыйПриходныйОрдер.Дата = ВозвратОтКоммисионера.Дата+120;
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Склад", ВозвратОтКоммисионера.Склад);
ДанныеЗаполнения.Вставить("Помещение", Справочники.СкладскиеПомещения.ПустаяСсылка());
ДанныеЗаполнения.Вставить("Распоряжение", ВозвратОтКоммисионера.Ссылка);
ДанныеЗаполнения.Вставить("ДатаПоступления", Дата(01,01,01));
ДанныеЗаполнения.Вставить("ЗонаПриемки", ЗонаПриемки);
ДанныеЗаполнения.Вставить("СкладскаяОперация", Перечисления.СкладскиеОперации.ПриемкаСобранныхКомплектов);
ДанныеЗаполнения.Вставить("Отправитель", ВозвратОтКоммисионера.Склад);
ДанныеЗаполнения.Вставить("ДатаВходящегоДокумента", ВозвратОтКоммисионера.Дата);
ДанныеЗаполнения.Вставить("НомерВходящегоДокумента", Номер);
ДанныеЗаполнения.Вставить("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.СборкаТоваров);
ДанныеЗаполнения.Вставить("Статус", Перечисления.СтатусыПриходныхОрдеров.Принят);
НовыйПриходныйОрдер.Статус = Перечисления.СтатусыПриходныхОрдеров.Принят;
НовыйПриходныйОрдер.Заполнить(ДанныеЗаполнения);
НовыйПриходныйОрдер.Товары.Очистить();
Для Каждого СтрТовара Из ВозвратОтКоммисионера.Товары Цикл
НоваяСтрокаТоварыПрихода = НовыйПриходныйОрдер.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТоварыПрихода,СтрТовара);
НоваяСтрокаТоварыПрихода.Назначение = Справочники.Назначения.ПустаяССылка();
КонецЦикла;
Попытка
НовыйПриходныйОрдер.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось провести приходный ордер от документа: " +ДокументПередачи+ "! -" +ОписаниеОшибки());
Возврат;
КонецПопытки;
#КонецОбласти
//Создаем Размещение
#Область Размещение
Если ЗначениеЗаполнено(НовыйПриходныйОрдер.Ссылка) Тогда
НовыйДокументРазмещения = Документы.ОтборРазмещениеТоваров.СоздатьДокумент();
НовыйДокументРазмещения.Дата = НовыйПриходныйОрдер.Дата+180;
НовыйДокументРазмещения.Склад = НовыйПриходныйОрдер.Склад;
НовыйДокументРазмещения.ВидОперации = Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Размещение;
НовыйДокументРазмещения.ДатаНачалаВыполнения = НовыйПриходныйОрдер.Дата;
НовыйДокументРазмещения.ДатаОкончанияВыполнения = НовыйПриходныйОрдер.Дата;
НовыйДокументРазмещения.Распоряжение = НовыйПриходныйОрдер.Ссылка;
НовыйДокументРазмещения.ДокументОснование = ВозвратОтКоммисионера;
НовыйДокументРазмещения.Заполнить(НовыйПриходныйОрдер.Ссылка);
Для Каждого Стр Из НовыйДокументРазмещения.ТоварыРазмещение Цикл
Стр.КоличествоРазмещено = Стр.Количество;
Стр.КоличествоУпаковокРазмещено = Стр.КоличествоУпаковок;
стр.Ячейка = ПолучитьЯчейкуОтбораПоЗаказу(ЗаказКлиента);
КонецЦикла;
НовыйДокументРазмещения.Статус = Перечисления.СтатусыОтборовРазмещенийТоваров.ВыполненоБезОшибок;
Попытка
НовыйДокументРазмещения.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось провести размещение от документа: " +НовыйПриходныйОрдер+ "! -" +ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
#КонецОбласти
Если БылЗаказНаСборку(ДокументПередачи) Тогда
//Создаем ЗаказНаСборку
#Область ЗаказНаСборку
Для Каждого Стр Из ВозвратОтКоммисионера.Товары Цикл
НовыйЗаказНаСборку = Документы.ЗаказНаСборку.СоздатьДокумент();
ВариантКомплектацииСтроки = ПолучитьВариантКомплектации(стр.Номенклатура, стр.Характеристика, стр.Упаковка);
Если ВариантКомплектацииСтроки = Неопределено Тогда
Продолжить;
КонецЕсли;
НовыйЗаказНаСборку.ВариантКомплектации = ВариантКомплектацииСтроки[0].Ссылка;
НовыйЗаказНаСборку.Номенклатура = стр.Номенклатура;
НовыйЗаказНаСборку.Дата = ТекущаяДата();
Переменная = 1;
Если ОсновнаяУпаковкаСборок.ЕдиницаИзмерения.Числитель > 1 Тогда
Переменная = ОсновнаяУпаковкаСборок.Числитель;
КонецЕсли;
НовыйЗаказНаСборку.Упаковка = ОсновнаяУпаковкаСборок;
НовыйЗаказНаСборку.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить;
НовыйЗаказНаСборку.Количество = Стр.Количество;
НовыйЗаказНаСборку.КоличествоУпаковок = Стр.КоличествоУпаковок;
НовыйЗаказНаСборку.Организация = Передача.Организация;
НовыйЗаказНаСборку.Склад = Передача.Склад;
НовыйЗаказНаСборку.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РазборкаТоваров;
НовыйЗаказНаСборку.Ответственный = Пользователи.АвторизованныйПользователь();
НовыйЗаказНаСборку.ДокументОснование = ДокументПередачи.ЗаказКлиента;
НовыйЗаказНаСборку.СборкаПодДеятельность = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
НовыйЗаказНаСборку.ВариантПриемкиТоваров = Перечисления.ВариантыПриемкиТоваров.РазделенаТолькоПоНакладным;
НовыйЗаказНаСборку.Статус = Перечисления.СтатусыВнутреннихЗаказов.КВыполнению;
НовыйЗаказНаСборку.Характеристика = стр.Характеристика;
НовыйЗаказНаСборку.Приоритет = Справочники.Приоритеты.НайтиПоНаименованию("Средний");
НовыйЗаказНаСборку.НачалоСборкиРазборки = НовыйЗаказНаСборку.Дата;
НовыйЗаказНаСборку.ОкончаниеСборкиРазборки = НовыйЗаказНаСборку.Дата;
Для Каждого СтрокаВариантаКомплектации из ВариантКомплектацииСтроки Цикл
НовыйСтрокаЗаказНаСборкуТовар = НовыйЗаказНаСборку.Товары.Добавить();
Переменная2 = 1;
Если СтрокаВариантаКомплектации.ЕдиницаИзмерения.Числитель > 1 Тогда
Переменная2 = СтрокаВариантаКомплектации.ЕдиницаИзмерения.Числитель;
КонецЕсли;
УпаковкаКомпл = СтрокаВариантаКомплектации.ЕдиницаИзмерения;
НовыйСтрокаЗаказНаСборкуТовар.Количество = СтрокаВариантаКомплектации.КоличествоКомплектующей * Переменная2;
НовыйСтрокаЗаказНаСборкуТовар.КоличествоУпаковок = СтрокаВариантаКомплектации.КоличествоКомплектующей;
НовыйСтрокаЗаказНаСборкуТовар.Номенклатура = СтрокаВариантаКомплектации.Номенклатура;
НовыйСтрокаЗаказНаСборкуТовар.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
НовыйСтрокаЗаказНаСборкуТовар.Упаковка = УпаковкаКомпл;
НовыйСтрокаЗаказНаСборкуТовар.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить;
//разбивать на то сколько есть на складе и остаток
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура" ,стр.Номенклатура);
ПараметрыОтбора.Вставить("ВариантОбеспечения" ,Перечисления.ВариантыОбеспечения.КОбеспечению);
ПараметрыОтбора.Вставить("Отменено" ,ЛОЖЬ);
КонецЦикла;
Шаблон = Новый Структура;
Шаблон.Вставить("Заказ",Передача.ссылка);
Шаблон.Вставить("Партнер",Справочники.Партнеры.ПустаяСсылка());
Шаблон.Вставить("Договор",Справочники.ДоговорыКонтрагентов.ПустаяСсылка());
Шаблон.Вставить("ТипНазначения",Перечисления.ТипыНазначений.Собственное);
Шаблон.Вставить("НаправлениеДеятельности",Передача.НаправлениеДеятельности);
Назначение = Справочники.Назначения.НайтиПоШаблону(Шаблон);
НовыйЗаказНаСборку.Назначение = Назначение;
Попытка
Если НовыйЗаказНаСборку.Товары.Количество()=0 Тогда
Сообщить("Не удалось провести заказ на разборку от документа: " +ДокументПередачи+ "! Нет комплектующих на остатках!");
Иначе
НовыйЗаказНаСборку.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Исключение
Сообщить("Не удалось провести заказ на разборку от документа: " +ДокументПередачи+ "! -" +ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
#КонецОбласти
//Создаем РасходныйОрдер
#Область РасходныйОрдер
Если ЗначениеЗаполнено(НовыйЗаказНаСборку.Ссылка) Тогда
МассивРаспоряжений = Новый Массив;
МассивРаспоряжений.Добавить(НовыйЗаказНаСборку.Ссылка);
ПараметрыДляСозданияОрдера = Новый Структура;
ПараметрыДляСозданияОрдера.Вставить("Склад",НовыйЗаказНаСборку.Склад);
ПараметрыДляСозданияОрдера.Вставить("РаспоряженияНаОтгрузку",МассивРаспоряжений);
ПараметрыДляСозданияОрдера.Вставить("Получатель",НовыйЗаказНаСборку.Склад);
ПараметрыДляСозданияОрдера.Вставить("ЗаданиеНаПеревозку",Документы.ЗаданиеНаПеревозку.ПустаяСсылка());
ПараметрыДляСозданияОрдера.Вставить("ЗонаОтгрузки",Неопределено);
ПараметрыДляСозданияОрдера.Вставить("Помещение",Неопределено);
ПараметрыДляСозданияОрдера.Вставить("ФоновоеЗадание",ЛОЖЬ);
ОформленныеОрдера = СкладыСервер.ПереоформитьРасходныеОрдера(ПараметрыДляСозданияОрдера);
Если ОформленныеОрдера.ЕстьОшибка Тогда
Сообщить("Не удалось провести расходный ордер от документа: " +НовыйЗаказНаСборку+ "! -" +ОписаниеОшибки());
Возврат;
КонецЕсли;
НовРасхОрдер = ОформленныеОрдера.ОформленныеОрдера[0].РасходныйОрдер.ПолучитьОбъект();
НовРасхОрдер.Статус = Перечисления.СтатусыРасходныхОрдеров.КОтбору;
Попытка
НовРасхОрдер.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось провести расходный ордер от документа: " +НовыйЗаказНаСборку+ "! -" +ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
#КонецОбласти
//Создаем Отбор
#Область ДокументОтбора
Если ЗначениеЗаполнено(НовРасхОрдер.Ссылка) Тогда
НовыйДокументОтбора = Документы.ОтборРазмещениеТоваров.СоздатьДокумент();
НовыйДокументОтбора.Дата = НовРасхОрдер.Дата;
НовыйДокументОтбора.Склад = НовРасхОрдер.Получатель;
НовыйДокументОтбора.ВидОперации = Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Отбор;
НовыйДокументОтбора.ДатаНачалаВыполнения = НовРасхОрдер.Дата;
НовыйДокументОтбора.ДатаОкончанияВыполнения = НовРасхОрдер.Дата;
НовыйДокументОтбора.Распоряжение = НовРасхОрдер.Ссылка;
НовыйДокументОтбора.ДокументОснование = Передача;
НовыйДокументОтбора.Заполнить(НовРасхОрдер.Ссылка);
НовыйДокументОтбора.Статус = Перечисления.СтатусыОтборовРазмещенийТоваров.ВыполненоБезОшибок;
Для Каждого СтрОтбор Из НовыйДокументОтбора.ТоварыОтбор Цикл
Если СтрОтбор.Ячейка = Справочники.СкладскиеЯчейки.ПустаяСсылка() Тогда
ЗонаПриемки = Справочники.СкладскиеЯчейки.ЗонаПриемкиПоУмолчанию(НовыйДокументОтбора.Склад,Справочники.СкладскиеПомещения.ПустаяСсылка());
СтрОтбор.Ячейка = ЗонаПриемки;
СтрОтбор.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("шт");
КонецЕсли;
КонецЦикла;
Попытка
НовыйДокументОтбора.Записать(РежимЗаписиДокумента.Проведение);
РасходныйОрдерОбъект = НовРасхОрдер.Ссылка.ПолучитьОбъект();
РасходныйОрдерОбъект.Статус = Перечисления.СтатусыРасходныхОрдеров.Отгружен;
Для Каждого Стр Из РасходныйОрдерОбъект.ОтгружаемыеТовары Цикл
Стр.Упаковка = ОсновнаяУпаковкаСборок;
Стр.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отгрузить;
КонецЦикла;
РасходныйОрдерОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось провести отбор от документа: " +НовРасхОрдер+ "! -" +ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
#КонецОбласти
//Создаем Сборку
#Область ДокументСборки
Если ЗначениеЗаполнено(НовыйЗаказНаСборку.Ссылка) И ?(ОрдерныйСклад,ЗначениеЗаполнено(НовыйДокументОтбора.Ссылка),Истина) Тогда
НовСборка = Документы.СборкаТоваров.СоздатьДокумент();
НовСборка.ВариантКомплектации = НовыйЗаказНаСборку.ВариантКомплектации;
НовСборка.НоменклатураОсновногоКомпонента = НовыйЗаказНаСборку.ВариантКомплектации.НоменклатураОсновногоКомпонента;
НовСборка.Номенклатура = НовыйЗаказНаСборку.Номенклатура;
НовСборка.Дата = НовыйЗаказНаСборку.Дата+60;
НовСборка.Назначение = НовыйЗаказНаСборку.Назначение;;
НовСборка.ДатаПоступления = НовыйЗаказНаСборку.Дата;
НовСборка.Упаковка = НовыйЗаказНаСборку.Упаковка;
НовСборка.Количество = НовыйЗаказНаСборку.Количество;
НовСборка.КоличествоУпаковок = НовыйЗаказНаСборку.КоличествоУпаковок;
НовСборка.Организация = НовыйЗаказНаСборку.Организация;
НовСборка.Склад = НовыйЗаказНаСборку.Склад;
НовСборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РазборкаТоваров;
НовСборка.Ответственный = Пользователи.АвторизованныйПользователь();
НовСборка.ЗаказНаСборку = НовыйЗаказНаСборку.Ссылка;
НовСборка.СборкаПодДеятельность = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
НовСборка.ВариантПриемкиТоваров = Перечисления.ВариантыПриемкиТоваров.РазделенаТолькоПоНакладным;
НовСборка.Статус = Перечисления.СтатусыСборокТоваров.СобраноРазобрано;
НовСборка.Характеристика = НовыйЗаказНаСборку.ВариантКомплектации.Характеристика;
НовСборка.ХарактеристикаОсновногоКомпонента = НовыйЗаказНаСборку.ВариантКомплектации.ХарактеристикаОсновногоКомпонента;
Пар1 = Новый Структура();
Пар1.Вставить("Номенклатура",НовСборка.Номенклатура);
Пар1.Вставить("Характеристика",НовСборка.Характеристика);
Пар1.Вставить("МестоХранения",НовСборка.Склад);
КлючАналитикиНомен = ПолучитьКлючАналитикиНоменклатуры(Пар1);
НовСборка.АналитикаУчетаНоменклатуры = КлючАналитикиНомен;
Для Каждого стр из НовыйЗаказНаСборку.Товары Цикл
НовСборкаТовар = НовСборка.Товары.Добавить();
НовСборкаТовар.Количество = стр.Количество;
НовСборкаТовар.КоличествоУпаковок = стр.КоличествоУпаковок;
НовСборкаТовар.Номенклатура = стр.Номенклатура;
НовСборкаТовар.Характеристика = стр.Характеристика;
НовСборкаТовар.Упаковка = стр.Упаковка;
НовСборкаТовар.КодСтроки = стр.КодСтроки;
Пар2 = Новый Структура();
Пар2.Вставить("Номенклатура",НовСборкаТовар.Номенклатура);
Пар2.Вставить("Характеристика",НовСборкаТовар.Характеристика);
Пар2.Вставить("МестоХранения",НовСборка.Склад);
КлючАналитикиНомен2 = ПолучитьКлючАналитикиНоменклатуры(Пар2);
НовСборкаТовар.АналитикаУчетаНоменклатуры = КлючАналитикиНомен2;
КонецЦикла;
Попытка
НовСборка.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось провести сборку от документа: " +НовыйДокументОтбора+ "! -" +ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
#КонецОбласти
//Создаем ПриходныйОрдер
#Область ПриходныйОрдер
Если ЗначениеЗаполнено(НовСборка.Ссылка) Тогда
ЗонаПриемки = Справочники.СкладскиеЯчейки.ЗонаПриемкиПоУмолчанию(НовСборка.Склад,Справочники.СкладскиеПомещения.ПустаяСсылка());
НовыйПриходныйОрдер = Документы.ПриходныйОрдерНаТовары.СоздатьДокумент();
Номер = НовСборка.Номер;
Пока Лев(Номер,1)="0" или Лев(Номер,1)="-" Цикл
Номер = Прав(Номер,СтрДлина(Номер)-1);
КонецЦикла;
НовыйПриходныйОрдер.Дата = НовСборка.Дата+120;
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Склад", НовСборка.Склад);
ДанныеЗаполнения.Вставить("Помещение", Справочники.СкладскиеПомещения.ПустаяСсылка());
ДанныеЗаполнения.Вставить("Распоряжение", НовСборка.Ссылка);
ДанныеЗаполнения.Вставить("ДатаПоступления", ТекущаяДата());
ДанныеЗаполнения.Вставить("ЗонаПриемки", ЗонаПриемки);
ДанныеЗаполнения.Вставить("СкладскаяОперация", Перечисления.СкладскиеОперации.ПриемкаСобранныхКомплектов);
ДанныеЗаполнения.Вставить("Отправитель", НовСборка.Склад);
ДанныеЗаполнения.Вставить("ДатаВходящегоДокумента", НовСборка.Дата);
ДанныеЗаполнения.Вставить("НомерВходящегоДокумента", Номер);
ДанныеЗаполнения.Вставить("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.РазборкаТоваров);
ДанныеЗаполнения.Вставить("Статус", Перечисления.СтатусыПриходныхОрдеров.Принят);
НовыйПриходныйОрдер.Статус = Перечисления.СтатусыПриходныхОрдеров.Принят;
НовыйПриходныйОрдер.Заполнить(ДанныеЗаполнения);
НовыйПриходныйОрдер.Товары.Очистить();
Для каждого СтрСтрока ИЗ НовСборка.Товары Цикл
НоваяСтрокаТоварыПрихода = НовыйПриходныйОрдер.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТоварыПрихода,СтрСтрока);
НоваяСтрокаТоварыПрихода.Упаковка = ОсновнаяУпаковкаСборок;
НоваяСтрокаТоварыПрихода.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЦикла;
Попытка
НовыйПриходныйОрдер.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось провести приходный ордер от документа: " +НовСборка+ "! -" +ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
#КонецОбласти
//Создаем Размещение
#Область Размещение
Если ЗначениеЗаполнено(НовыйПриходныйОрдер.Ссылка) Тогда
НовыйДокументРазмещения = Документы.ОтборРазмещениеТоваров.СоздатьДокумент();
НовыйДокументРазмещения.Дата = НовыйПриходныйОрдер.Дата+180;
НовыйДокументРазмещения.Склад = НовыйПриходныйОрдер.Склад;
НовыйДокументРазмещения.ВидОперации = Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Размещение;
НовыйДокументРазмещения.ДатаНачалаВыполнения = НовыйПриходныйОрдер.Дата;
НовыйДокументРазмещения.ДатаОкончанияВыполнения = НовыйПриходныйОрдер.Дата;
НовыйДокументРазмещения.Распоряжение = НовыйПриходныйОрдер.Ссылка;
НовыйДокументРазмещения.ДокументОснование = НовыйПриходныйОрдер.Ссылка;
НовыйДокументРазмещения.Заполнить(НовыйПриходныйОрдер.Ссылка);
Для Каждого Стр Из НовыйДокументРазмещения.ТоварыРазмещение Цикл
Стр.КоличествоРазмещено = Стр.Количество;
Стр.КоличествоУпаковокРазмещено = Стр.КоличествоУпаковок;
Если НовыйДокументОтбора.ТоварыОтбор.Количество()>1 Тогда
стр.Ячейка = Справочники.СкладскиеЯчейки.НайтиПоНаименованию("В нескольких ячейка");
Иначе
стр.Ячейка = НовыйДокументОтбора.ТоварыОтбор[0].Ячейка;
КонецЕсли;
КонецЦикла;
НовыйДокументРазмещения.Статус = Перечисления.СтатусыОтборовРазмещенийТоваров.ВыполненоБезОшибок;
Попытка
НовыйДокументРазмещения.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось провести размещение от документа: " +НовыйПриходныйОрдер+ "! -" +ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецЕсли;
#КонецОбласти
Сообщить("Разборка возвратных товаров произведена!");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Приложенный файл обработки проверен и работает на базе 1С:КА + БИТ.УМ.
Проверено на следующих конфигурациях и релизах:
- 1С:Комплексная автоматизация 2, релизы 2.5.25.77
Вступайте в нашу телеграмм-группу Инфостарт