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