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