Задание на перевозку / Форма документа / Модуль формы

файл
// @strict-types

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
		
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ПриЧтенииСозданииНаСервере();
	
	УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	
	МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	
	ЗаполнитьТоварыКДоставке();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
	// Конец СтандартныеПодсистемы.Свойства
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	ТекущийОбъект.ДополнительныеСвойства.Вставить("ТоварыКДоставке", ТоварыКДоставке.Выгрузить());
	
	// Обработчик механизма "Свойства"
	УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
	
	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец ИнтеграцияС1СДокументооборотом
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	// Обработчик механизма "Свойства"
	Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
		ОбновитьЭлементыДополнительныхРеквизитов();
		УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	КонецЕсли;
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
	ОбработкаОповещенияЛокализация(ИмяСобытия, Параметр, Источник);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	Если Объект.ПометкаУдаления Тогда
		Оповестить("Запись_ЗаданиеНаПеревозку");
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ИсточникВыбора.ИмяФормы = "Обработка.РабочееМестоМенеджераПоДоставке.Форма.ФормаВыбораРаспоряжений" Тогда
		РазбитьПунктДоставки(ВыбранноеЗначение);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ЗаполнитьТоварыКДоставке();
	
	ЗаполнитьСлужебныеРеквизитыМаршрута();
	
	Элементы.РаспоряженияЗаполнитьПоРасходнымОрдерам.Доступность = ЗначениеЗаполнено(Объект.Ссылка);
	
	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);

КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

	Оповестить("Запись_ЗаданиеНаПеревозку", Неопределено, Объект.Ссылка);
	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СкладПриИзменении(Элемент)
	
	Если Объект.Распоряжения.Количество() > 0 Тогда
		
		Если Склад <> Объект.Склад Тогда
			
			ПоказатьВопрос(Новый ОписаниеОповещения("СкладПриИзмененииЗавершение", ЭтотОбъект),
				НСтр("ru='Списки будут очищены. Продолжить?'"), РежимДиалогаВопрос.ДаНет);
			Возврат;
			
		Иначе
			Возврат;
		КонецЕсли;
		
	Иначе
		
		Склад = Объект.Склад;
		
	КонецЕсли;
	
	ПриИзмененииСкладаСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ТранспортноеСредствоПриИзменении(Элемент)
	
	ТранспортноеСредствоПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Объект.Ссылка)
		И Объект.Операция = ПредопределенноеЗначение("Перечисление.ВидыДоставки.СоСклада")
		И ЕстьОрдерныеСклады
		И СтатусБыл <> Объект.Статус
		И СтатусБыл <> ПредопределенноеЗначение("Перечисление.СтатусыЗаданийНаПеревозку.Закрыто")
		И СтатусБыл <> ПредопределенноеЗначение("Перечисление.СтатусыЗаданийНаПеревозку.Отправлено")
		И (Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаданийНаПеревозку.Закрыто")
			ИЛИ Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаданийНаПеревозку.Отправлено")) Тогда
		
		Режим = Новый СписокЗначений; // СписокЗначений из КодВозвратаДиалога
		Режим.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Перезаполнить'"));
		Режим.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Не перезаполнять'"));
		Текст = НСтр("ru = 'Перезаполнить задание по связанным расходным ордерам на товары?';");
		ПоказатьВопрос(Новый ОписаниеОповещения("ПослеВопросаОПерезаполненииПоОрдерам", ЭтотОбъект), Текст, Режим);
		
	Иначе
		
		ТекстОповещения = ПриИзмененииСтатусаИПерезаполнении();
		ОповеститьОбИзменениях(ТекстОповещения);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура АвтомобильВместимостьВКубическихМетрахПриИзменении(Элемент)
	
	АвтомобильГрузоподъемностьВместимостьПриИзменении();
	
КонецПроцедуры

&НаКлиенте
Процедура АвтомобильГрузоподъемностьВТоннахПриИзменении(Элемент)
	
	АвтомобильГрузоподъемностьВместимостьПриИзменении();
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаВремяРейсаПланСПриИзменении(Элемент)
	
	Для Каждого СтрокаМаршрута Из Объект.Маршрут Цикл
		
		Если СтрокаМаршрута.ВремяС = '00010101'
			ИЛИ СтрокаМаршрута.ВремяС < Объект.ДатаВремяРейсаПланС Тогда
			СтрокаМаршрута.ВремяС = Объект.ДатаВремяРейсаПланС;
			СтрокаМаршрута.ВремяСБезДаты = Дата(1,1,1,Час(СтрокаМаршрута.ВремяС),Минута(СтрокаМаршрута.ВремяС),0);
			Если СтрокаМаршрута.ВремяС > СтрокаМаршрута.ВремяПо Тогда
				СтрокаМаршрута.ВремяПо = СтрокаМаршрута.ВремяС;
				СтрокаМаршрута.ВремяСБезДаты = Дата(1,1,1,Час(СтрокаМаршрута.ВремяПо),Минута(СтрокаМаршрута.ВремяПо),0);
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаданиеВыполняетПриИзменении(Элемент)
	
	НастроитьПоТипуИсполнителя()
	
КонецПроцедуры

&НаКлиенте
Процедура ПеревозчикПриИзменении(Элемент)
	
	ПеревозчикПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ВодительПриИзменении(Элемент)
	ВодительПриИзмененииНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	КонтрагентПриИзмененииНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ВодительФИООбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ВыбранноеЗначение.Свойство("Водитель", Объект.ВодительФИО);
	ВыбранноеЗначение.Свойство("УдостоверениеСерия", Объект.УдостоверениеСерия);
	ВыбранноеЗначение.Свойство("УдостоверениеНомер", Объект.УдостоверениеНомер);
	
КонецПроцедуры

&НаКлиенте
Процедура ВодительФИООкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	ВодительЗаписан = Ложь;	
	Для Каждого ИнформацияВодителя Из Элемент.СписокВыбора Цикл
		Если ИнформацияВодителя.Значение.Водитель = Текст Тогда 
			ВодительЗаписан = Истина
		КонецЕсли;
	КонецЦикла;
	Если Не ВодительЗаписан Тогда
		Объект.УдостоверениеНомер = "";
		Объект.УдостоверениеСерия = "";
		Объект.ВодительФИО   	  = Текст;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура АвтомобильГосударственныйНомерОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ВыбранноеЗначение.Свойство("АвтомобильМарка",							Объект.АвтомобильМарка);
	ВыбранноеЗначение.Свойство("АвтомобильГосударственныйНомер",			Объект.АвтомобильГосударственныйНомер);
	ВыбранноеЗначение.Свойство("ЛицензионнаяКарточкаВид",					Объект.ЛицензионнаяКарточкаВид);
	ВыбранноеЗначение.Свойство("ЛицензионнаяКарточкаНомер",					Объект.ЛицензионнаяКарточкаНомер);
	ВыбранноеЗначение.Свойство("ЛицензионнаяКарточкаРегистрационныйНомер",	Объект.ЛицензионнаяКарточкаРегистрационныйНомер);
	ВыбранноеЗначение.Свойство("ЛицензионнаяКарточкаСерия",					Объект.ЛицензионнаяКарточкаСерия);
	ВыбранноеЗначение.Свойство("Прицеп",									Объект.Прицеп);
	ВыбранноеЗначение.Свойство("ГосударственныйНомерПрицепа",				Объект.ГосударственныйНомерПрицепа);
	ВыбранноеЗначение.Свойство("ВидПеревозки",								Объект.ВидПеревозки);
	ВыбранноеЗначение.Свойство("АвтомобильВместимостьВКубическихМетрах",	Объект.АвтомобильВместимостьВКубическихМетрах);
	ВыбранноеЗначение.Свойство("АвтомобильГрузоподъемностьВТоннах",			Объект.АвтомобильГрузоподъемностьВТоннах);
	ВыбранноеЗначение.Свойство("АвтомобильТип",								Объект.АвтомобильТип);
КонецПроцедуры

&НаКлиенте
Процедура АвтомобильТипОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ВыбранноеЗначение.Свойство("АвтомобильВместимостьВКубическихМетрах",	Объект.АвтомобильВместимостьВКубическихМетрах);
	ВыбранноеЗначение.Свойство("АвтомобильГрузоподъемностьВТоннах",			Объект.АвтомобильГрузоподъемностьВТоннах);
	ВыбранноеЗначение.Свойство("АвтомобильТип",								Объект.АвтомобильТип);
КонецПроцедуры

&НаКлиенте
Процедура АвтомобильТипОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	ТранспортноеСредствоЗаписано = Ложь;
	Для Каждого ИнформацияТранспортногоСредства Из Элемент.СписокВыбора Цикл
		Если ИнформацияТранспортногоСредства.Значение.АвтомобильТип = Текст Тогда
			ТранспортноеСредствоЗаписано = Истина
		КонецЕсли;
	КонецЦикла;
	
	Если НЕ ТранспортноеСредствоЗаписано Тогда
		
		Объект.АвтомобильГрузоподъемностьВТоннах = 0;
		Объект.АвтомобильВместимостьВКубическихМетрах = 0;
		Объект.АвтомобильТип = Текст;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияЭПДНажатие(Элемент)
	
	//++ Локализация
	Если Объект.Ссылка.Пустая() Тогда
		ТекстПредупреждения = НСтр("ru = 'Документ еще не записан. Открытие журнала ЭПД возможно только после записи документа.'");
		ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
		Возврат;
	КонецЕсли;
	
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("ОтборДокументОснование", Объект.Ссылка);
	
	ОткрытьФорму("Обработка.ЭлектронныеПеревозочныеДокументы.Форма.ФормаСпискаЭПД", ПараметрыОтбора);
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияОформитьЭПДНажатие(Элемент, СтандартнаяОбработка)
	
	//++ Локализация
	Если Объект.Ссылка.Пустая() Тогда
		ТекстПредупреждения = НСтр("ru = 'Документ еще не записан. Ввод ЭПД возможен только на основании записанных документов.'");
		ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
		Возврат;
	КонецЕсли;
	
	ПараметрыВызова = Новый Структура();
	ПараметрыВызова.Вставить("Ссылка", Объект.Ссылка);
	
	СписокДокументов = ОбменСГИСЭПДВызовСервераПереопределяемый.ТипыДокументовЭПД();
	
	ОповещениеОЗакрытие = Новый ОписаниеОповещения(
		"ОбработатьРезультатВыбораТипаДокумента", 
		ОбменСГИСЭПДКлиентПереопределяемый,
		ПараметрыВызова);
	
	ПоказатьВыборИзМеню(ОповещениеОЗакрытие,СписокДокументов, Элемент);
	//-- Локализация
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыМаршрут

&НаКлиенте
Процедура МаршрутПередУдалением(Элемент, Отказ)
	
	ВыделенныеСтроки = Элементы.Маршрут.ВыделенныеСтроки;
	Если ВыделенныеСтроки.Количество()>0 Тогда
		Модифицированность = Истина;
		МаршрутПередУдалениемНаСервере(Элементы.Маршрут.ВыделенныеСтроки);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутДоставленоПриИзменении(Элемент)
	
	Если Элементы.Маршрут.ТекущиеДанные.Доставлено Тогда
		
		СтруктураПоиска = Новый Структура;
		СтруктураПоиска.Вставить("КлючСвязи",Элементы.Маршрут.ТекущиеДанные.КлючСвязи);
		СтруктураПоиска.Вставить("Доставлено", Ложь);
		
		Для Каждого СтрокаРаспоряжений Из Объект.Распоряжения.НайтиСтроки(СтруктураПоиска) Цикл
			СтрокаРаспоряжений.Доставлено = Истина;
		КонецЦикла;	
		
	Иначе
		
		СтруктураПоиска = Новый Структура;
		СтруктураПоиска.Вставить("КлючСвязи",Элементы.Маршрут.ТекущиеДанные.КлючСвязи);
		СтруктураПоиска.Вставить("Доставлено", Истина);
		
		Для Каждого СтрокаРаспоряжений Из Объект.Распоряжения.НайтиСтроки(СтруктураПоиска) Цикл
			СтрокаРаспоряжений.Доставлено = Ложь;
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура АдресПриИзменении(Элемент)
	
	ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("Адрес");
	ТекущиеДанные = Элементы.Маршрут.ТекущиеДанные;
	
	ДоставкаТоваровКлиент.ПриИзмененииПредставленияАдреса(
		Элемент,
		ТекущиеДанные[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставки],
		ТекущиеДанные[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначенияПолей]);
	
КонецПроцедуры

&НаКлиенте
Процедура АдресОткрытие(Элемент, СтандартнаяОбработка)
	
	АдресПриИзменении(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура АдресОчистка(Элемент, СтандартнаяОбработка)
	
	ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("Адрес");
	ТекущиеДанные = Элементы.Маршрут.ТекущиеДанные;
	
	ДоставкаТоваровКлиент.ОчиститьПредставлениеАдреса(
		ТекущиеДанные[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставки],
		ТекущиеДанные[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначенияПолей],
		ТекущиеДанные[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначение]);
		
КонецПроцедуры

&НаКлиенте
Процедура АдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("Адрес");
	ТекущиеДанные = Элементы.Маршрут.ТекущиеДанные;
	
	ДоставкаТоваровКлиент.ОткрытьФормуВыбораАдресаИОбработатьРезультат(
		Элемент,
		ТекущиеДанные,
		ИменаРеквизитовАдресовДоставки,
		СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутВремяСПриИзменении(Элемент)
	
	ПриИзмененииВремяС();
	ОтсортироватьСписокМаршрута();
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутДатаСПриИзменении(Элемент)
	
	ПриИзмененииВремяС();
	ОтсортироватьСписокМаршрута();
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутВремяПоПриИзменении(Элемент)
	
	ПриИзмененииВремяПо();
	ОтсортироватьСписокМаршрута();
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутВесПриИзменении(Элемент)
	
	ОбновитьИтоговыйВесОбъемЗаполненность(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутОбъемПриИзменении(Элемент)
	
	ОбновитьИтоговыйВесОбъемЗаполненность(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ТекущиеДанные = Элемент.ТекущиеДанные;
	
	Если Поле.Имя = "МаршрутПолучателиОтправители" Тогда
		
		СтандартнаяОбработка = Ложь;
		
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("ЗаданиеНаПеревозку", Объект.Ссылка);
		ПараметрыФормы.Вставить("ТранспортноеСредство", Объект.ТранспортноеСредство);
		ПараметрыФормы.Вставить("ВесЗадания", Объект.Маршрут.Итог("Вес"));
		ПараметрыФормы.Вставить("ОбъемЗадания", Объект.Маршрут.Итог("Объем"));
		ПараметрыФормы.Вставить("ДатаВремяРейсаПланС", Объект.ДатаВремяРейсаПланС);
		ПараметрыФормы.Вставить("ВидДоставки", Объект.Операция);
		ПараметрыФормы.Вставить("Адрес", ТекущиеДанные.Адрес);
		ПараметрыФормы.Вставить("ВремяС", ТекущиеДанные.ВремяС);
		ПараметрыФормы.Вставить("ВремяПо", ТекущиеДанные.ВремяПо);
		ПараметрыФормы.Вставить("АдресРаспоряжений", ПоместитьРаспоряженияВХранилище(ТекущиеДанные.КлючСвязи));
		ПараметрыФормы.Вставить("Статус", Объект.Статус);
		ПараметрыФормы.Вставить("АдресТоваровКДоставке", ПоместитьВХранилищеТоварыКДоставке());
			
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеРедактированияРаспоряжений",ЭтотОбъект);
		
		ОткрытьФорму("Обработка.РабочееМестоМенеджераПоДоставке.Форма.ФормаРаспоряженияПоПункту",
			ПараметрыФормы, ЭтотОбъект,,,, ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
	КонецЕсли;
	
	МаршрутВыборЛокализация(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутДополнительнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Оповещение = Новый ОписаниеОповещения("МаршрутДополнительнаяИнформацияНачалоВыбораЗавершение", ЭтотОбъект);
	ЗаголовокФормыРедактирования = НСтр("ru = 'Дополнительная информация'");
	
	ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста(
		Оповещение,
		Элементы.МаршрутДополнительнаяИнформация.ТекстРедактирования,
		ЗаголовокФормыРедактирования);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОткрытьСклады(Команда)
	
	ПараметрыФормы = Новый Структура("МассивДокументов, ЗаголовокФормы",
		СкладыПогрузки.ВыгрузитьЗначения(), НСтр("ru = 'Склады погрузки'"));
	ОткрытьФорму("ОбщаяФорма.СписокПроизвольныхОбъектовУП",
		ПараметрыФормы,
		ЭтотОбъект,,,,,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура РазнестиПоВремени(Команда)
	
	ОчиститьСообщения();
	
	Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы.Маршрут)
		И Не ПроверитьРазбитьПунктДоставкиСервер() Тогда
		
		АдресРаспоряжений = ПоместитьРаспоряженияВХранилище(Элементы.Маршрут.ТекущиеДанные.КлючСвязи);
		ПараметрыФормы = Новый Структура("АдресРаспоряжений", АдресРаспоряжений);
		ОткрытьФорму("Обработка.РабочееМестоМенеджераПоДоставке.Форма.ФормаВыбораРаспоряжений", ПараметрыФормы, ЭтотОбъект);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбъединитьПоВремени(Команда)
	
	ОчиститьСообщения();
	
	ВыделенныеСтроки = Элементы.Маршрут.ВыделенныеСтроки;
	
	Если ВыделенныеСтроки.Количество() < 2 Тогда
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для объединения необходимо выделить хотя бы 2 строки.'"));
		Возврат;
	КонецЕсли;
	
	СтруктураВозврата = ПроверитьПередОбъединением(ВыделенныеСтроки);
	
	Если СтруктураВозврата.РазныеАдреса Тогда
		
		ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не удалось объединить выделенные строки: выберите строки с одинаковыми адресами.'"));
		Возврат;
		
	ИначеЕсли СтруктураВозврата.РазныеДанные Тогда
		СтрВопроса = НСтр("ru = 'Выделенные строки содержат несколько значений данных (время, доп. информация). Объединение строк приведет к потере всех значений, кроме первой строки. Продолжить?'");
		
		ПоказатьВопрос(Новый ОписаниеОповещения("ОбъединитьПоВремениЗавершение",
			ЭтотОбъект, Новый Структура("ВыделенныеСтроки, СтруктураВозврата", ВыделенныеСтроки, СтруктураВозврата)),
			СтрВопроса, РежимДиалогаВопрос.ДаНет);
		Возврат;
		
	КонецЕсли;
	
	ОбъединитьПоВремениФрагмент(ВыделенныеСтроки, СтруктураВозврата);
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутДоставленоУстановитьВсе(Команда)
	
	Для Каждого СтрокаРаспоряжений Из Объект.Распоряжения Цикл
		СтрокаРаспоряжений.Доставлено = Истина;
	КонецЦикла;
	
	Для Каждого СтрокаМаршрута Из Объект.Маршрут Цикл
		СтрокаМаршрута.Доставлено = Истина;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура МаршрутДоставленоСнятьВсе(Команда)
	
	Для Каждого СтрокаРаспоряжений Из Объект.Распоряжения Цикл
		СтрокаРаспоряжений.Доставлено = Ложь;
	КонецЦикла;
	
	Для Каждого СтрокаМаршрута Из Объект.Маршрут Цикл
		СтрокаМаршрута.Доставлено = Ложь;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоРасходнымОрдерам(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаданиеНаПеревозку.ФормаДокумента.Команда.ЗаполнитьПоРасходнымОрдерам");
	
	Режим = Новый СписокЗначений; // Массив из КодВозвратаДиалога
	Режим.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Перезаполнить'"));
	Режим.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Не перезаполнять'"));
	Текст = НСтр("ru = 'Перезаполнить задание по связанным расходным ордерам на товары?';");
	ПоказатьВопрос(Новый ОписаниеОповещения("ПослеВопросаОПерезаполненииПоОрдерам", ЭтотОбъект), Текст, Режим);
	
КонецПроцедуры

// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.РаботаСФайлами

// Параметры:
//   Команда - КомандаФормы - выполняемая команда
//
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
	
	РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

&НаКлиенте
Процедура ОформитьТранспортныеНакладные(Команда)
	
	//++ Локализация
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаданиеНаПеревозку.ФормаДокумента.Команда.ОформитьТранспортныеНакладные");
	
	ОчиститьСообщения();
	
	Если НЕ ЗначениеЗаполнено(Объект.Ссылка)
		ИЛИ НЕ Объект.Проведен
		ИЛИ Модифицированность Тогда 
		
		ТекстВопроса = НСтр("ru = 'Ввод транспортных накладных возможен только после проведения документа.'");
		СписокКнопок = Новый СписокЗначений; // Массив из КодВозвратаДиалога
		СписокКнопок.Добавить(КодВозвратаДиалога.ОК,     НСтр("ru = 'Провести'"));
		СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
		
		ПоказатьВопрос(Новый ОписаниеОповещения("ОформитьТранспортныеНакладныеОбработкаОтвета", ЭтотОбъект),
			ТекстВопроса, СписокКнопок);
		Возврат;
		
	КонецЕсли;
	
	ОформитьТранспортныеНакладныеЗавершение();
	
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьРаспоряжение(Команда)
	
	ОчиститьСообщения();
	
	Если ПроверитьБлокировкуЗадания() Тогда
		
		Если Не ЗначениеЗаполнено(Склад) Тогда
			ПоказатьПредупреждение(,НСтр("ru = 'Перед подбором распоряжений необходимо указать склад.'"));
			Возврат;
		КонецЕсли;
		
		ОткрытьФормуПодбораРаспоряжений();
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТранспортноеСредство.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаданиеВыполняет");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик;
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Статус");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыЗаданийНаПеревозку.Формируется;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНеЗаполненного", Ложь);
	
КонецПроцедуры

// СтандартныеПодсистемы.Свойства
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
	
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
	
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

&НаКлиенте
Процедура ОбъединитьПоВремениЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
	СтруктураВозврата = ДополнительныеПараметры.СтруктураВозврата;
	
	Ответ = РезультатВопроса;
	Если Ответ = КодВозвратаДиалога.Нет Тогда
		Возврат;
	КонецЕсли;
	
	ОбъединитьПоВремениФрагмент(ВыделенныеСтроки, СтруктураВозврата);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбъединитьПоВремениФрагмент(Знач ВыделенныеСтроки, Знач СтруктураВозврата)
	
	ОбъединитьСтрокиМаршрута(ВыделенныеСтроки,СтруктураВозврата.МассивКодовСтрок)
	
КонецПроцедуры

#Область ТабличнаяЧастьРаспоряжения

&НаКлиенте
Процедура ОткрытьФормуПодбораРаспоряжений()
	
	ПараметрыФормы = Новый Структура();
	ПараметрыФормы.Вставить("Склад",Склад);
	МаршрутТекущаяСтрока = Элементы.Маршрут.ТекущаяСтрока;
	Если МаршрутТекущаяСтрока <> Неопределено Тогда
		ПараметрыФормы.Вставить("Зона",Элементы.Маршрут.ТекущиеДанные.Зона);
	КонецЕсли;
	ПараметрыФормы.Вставить("ВидДоставки", Объект.Операция);
	ПараметрыФормы.Вставить("ЗаданиеНаПеревозку", Объект.Ссылка);
	ПараметрыФормы.Вставить("ОтборПоТипуИсполнителей", Объект.ЗаданиеВыполняет);
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПодбораРаспоряжений", ЭтотОбъект);
	ОткрытьФорму("Документ.ЗаданиеНаПеревозку.Форма.ФормаПодбораРаспоряжений", ПараметрыФормы,
		ЭтотОбъект,,,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодбораРаспоряжений(СтруктураВозврата, ДополнительныеПараметры) Экспорт
	
	Если СтруктураВозврата = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПослеПодбораРаспоряженийСервер(СтруктураВозврата);
	
КонецПроцедуры

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

&НаСервере
Функция ТекстЗапросаИзмененныеДобавленныеСтрокиРаспоряжений()
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ИсходнаяТаблица.НомерСтроки,
	|	ИсходнаяТаблица.Распоряжение,
	|	ИсходнаяТаблица.Склад,
	|	ИсходнаяТаблица.Вес,
	|	ИсходнаяТаблица.Объем
	|ПОМЕСТИТЬ ИсходнаяТаблица
	|ИЗ
	|	&ИсходнаяТаблица КАК ИсходнаяТаблица
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПодобранныеРаспоряжения.Распоряжение,
	|	ПодобранныеРаспоряжения.Вес,
	|	ПодобранныеРаспоряжения.Объем,
	|	ПодобранныеРаспоряжения.Перевозчик,
	|	ПодобранныеРаспоряжения.ПолучательОтправитель,
	|	ПодобранныеРаспоряжения.ВремяС,
	|	ПодобранныеРаспоряжения.ВремяПо,
	|	ПодобранныеРаспоряжения.ДополнительнаяИнформация,
	|	ПодобранныеРаспоряжения.Склад,
	|	ПодобранныеРаспоряжения.Адрес,
	|	ПодобранныеРаспоряжения.АдресЗначенияПолей,
	|	ПодобранныеРаспоряжения.Зона
	|ПОМЕСТИТЬ ПодобранныеРаспоряжения
	|ИЗ
	|	&ПодобранныеРаспоряжения КАК ПодобранныеРаспоряжения
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ИсходныеТовары.Распоряжение,
	|	ИсходныеТовары.Склад,
	|	ИсходныеТовары.ПолучательОтправитель,
	|	ИсходныеТовары.Номенклатура,
	|	ИсходныеТовары.Характеристика,
	|	ИсходныеТовары.Назначение,
	|	ИсходныеТовары.Серия,
	|	ИсходныеТовары.Количество,
	|	ИсходныеТовары.ВсеТовары
	|ПОМЕСТИТЬ ИсходныеТовары
	|ИЗ
	|	&ИсходныеТовары КАК ИсходныеТовары
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПодобранныеТовары.Распоряжение,
	|	ПодобранныеТовары.Склад,
	|	ПодобранныеТовары.ПолучательОтправитель,
	|	ПодобранныеТовары.Номенклатура,
	|	ПодобранныеТовары.Характеристика,
	|	ПодобранныеТовары.Назначение,
	|	ПодобранныеТовары.Серия,
	|	ПодобранныеТовары.Количество,
	|	ПодобранныеТовары.ВсеТовары
	|ПОМЕСТИТЬ ПодобранныеТовары
	|ИЗ
	|	&ПодобранныеТовары КАК ПодобранныеТовары
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	РаспоряженияСвернутые.Распоряжение,
	|	РаспоряженияСвернутые.Склад,
	|	СУММА(РаспоряженияСвернутые.Вес) КАК Вес,
	|	СУММА(РаспоряженияСвернутые.Объем) КАК Объем,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА ИсходнаяТаблица.Распоряжение ЕСТЬ NULL 
	|				ТОГДА ЛОЖЬ
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ) КАК ИзмененнаяСтрока
	|ПОМЕСТИТЬ РаспоряженияСвернутые
	|ИЗ
	|	ПодобранныеРаспоряжения КАК РаспоряженияСвернутые
	|		ЛЕВОЕ СОЕДИНЕНИЕ ИсходнаяТаблица КАК ИсходнаяТаблица
	|		ПО (ИсходнаяТаблица.Распоряжение = РаспоряженияСвернутые.Распоряжение)
	|			И (ИсходнаяТаблица.Склад = РаспоряженияСвернутые.Склад)
	|
	|СГРУППИРОВАТЬ ПО
	|	РаспоряженияСвернутые.Склад,
	|	РаспоряженияСвернутые.Распоряжение
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ИзмененныеСтроки.Вес,
	|	ИзмененныеСтроки.Объем,
	|	ИсходнаяТаблица.НомерСтроки
	|ИЗ
	|	РаспоряженияСвернутые КАК ИзмененныеСтроки
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсходнаяТаблица КАК ИсходнаяТаблица
	|		ПО (ИсходнаяТаблица.Распоряжение = ИзмененныеСтроки.Распоряжение)
	|			И (ИсходнаяТаблица.Склад = ИзмененныеСтроки.Склад)
	|ГДЕ
	|	ИзмененныеСтроки.ИзмененнаяСтрока
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДобавляемыеСтроки.Распоряжение,
	|	РаспоряженияСвернутые.Вес,
	|	ДобавляемыеСтроки.Объем,
	|	ДобавляемыеСтроки.Перевозчик,
	|	ДобавляемыеСтроки.ПолучательОтправитель,
	|	ДобавляемыеСтроки.ВремяС,
	|	ДобавляемыеСтроки.ВремяПо,
	|	ДобавляемыеСтроки.ДополнительнаяИнформация,
	|	ДобавляемыеСтроки.Склад,
	|	ДобавляемыеСтроки.Адрес,
	|	ДобавляемыеСтроки.АдресЗначенияПолей,
	|	ДобавляемыеСтроки.Зона,
	|	ДобавляемыеСтроки.Распоряжение Ссылка Документ.ПоручениеЭкспедитору КАК ЭтоПоручениеЭкспедитору
	|ИЗ
	|	ПодобранныеРаспоряжения КАК ДобавляемыеСтроки
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РаспоряженияСвернутые КАК РаспоряженияСвернутые
	|		ПО (РаспоряженияСвернутые.Распоряжение = ДобавляемыеСтроки.Распоряжение)
	|			И (РаспоряженияСвернутые.Склад = ДобавляемыеСтроки.Склад)
	|			И (НЕ РаспоряженияСвернутые.ИзмененнаяСтрока)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПодобранныеТовары.Распоряжение,
	|	ПодобранныеТовары.Склад,
	|	ПодобранныеТовары.ПолучательОтправитель,
	|	ПодобранныеТовары.Номенклатура,
	|	ПодобранныеТовары.Характеристика,
	|	ПодобранныеТовары.Назначение,
	|	ПодобранныеТовары.Серия,
	|	ПодобранныеТовары.Количество,
	|	ПодобранныеТовары.ВсеТовары
	|ИЗ
	|	ПодобранныеТовары КАК ПодобранныеТовары";
	
	Возврат ТекстЗапроса;
	
КонецФункции

#КонецОбласти

#Область ТабличнаяЧастьМаршрут

&НаСервере 
Процедура МаршрутПередУдалениемНаСервере(Знач ВыделенныеСтроки)
	
	Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
		
		ТекущаяСтрока = Объект.Маршрут.НайтиПоИдентификатору(ИдентификаторСтроки);
		
		КлючСвязи = ТекущаяСтрока.КлючСвязи;
		
		Объект.Маршрут.Удалить(ТекущаяСтрока);
		
		СтруктураПоиска = Новый Структура("Распоряжение, Склад");
		НайденныеСтроки = Объект.Распоряжения.НайтиСтроки(Новый Структура("КлючСвязи",КлючСвязи));
		Для Каждого СтрокаРаспоряжений Из НайденныеСтроки Цикл
			Объект.Распоряжения.Удалить(СтрокаРаспоряжений);
			ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаРаспоряжений);
			НайденныеСтрокиТоваров = ТоварыКДоставке.НайтиСтроки(СтруктураПоиска);
			Для Каждого СтрокаТовары Из НайденныеСтрокиТоваров Цикл
				ТоварыКДоставке.Удалить(СтрокаТовары);
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	
	ОбновитьИтоговыйВесОбъемЗаполненность(ЭтотОбъект);
	
	ОбновитьСкладыПогрузки();
	
КонецПроцедуры

&НаСервере
Функция ПроверитьРазбитьПунктДоставкиСервер()
	
	КлючСвязи = Объект.Маршрут.НайтиПоИдентификатору(Элементы.Маршрут.ТекущаяСтрока).КлючСвязи;
	КоличествоРаспоряжений = Объект.Распоряжения.НайтиСтроки(Новый Структура("КлючСвязи",КлючСвязи)).Количество();
	Если КоличествоРаспоряжений < 2 Тогда
		
		Текст = НСтр("ru = 'Разбиение строки возможно для адресов, к которым относится более одного распоряжения'");
		ОбщегоНазначения.СообщитьПользователю(Текст);
		Возврат Истина;
		
	КонецЕсли;
	Если КоличествоРаспоряжений > 2 Тогда
		Возврат Ложь; //Вернуться в клиент и открыть форму выбора распоряжений
	КонецЕсли;
	МассивРаспоряжений = Новый Массив;
	Отбор = Новый Структура("КлючСвязи", КлючСвязи);
	СтрокаРаспоряжения = Объект.Распоряжения.НайтиСтроки(Отбор)[1];
	МассивРаспоряжений.Добавить(Новый Структура("Распоряжение,Склад", СтрокаРаспоряжения.Распоряжение, СтрокаРаспоряжения.Склад));
	РазбитьПунктДоставки(МассивРаспоряжений); // Случай с двумя распоряжениями - просто разбиваем без выбора
	
	Возврат Истина;
	
КонецФункции

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

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

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

&НаКлиенте
Процедура ОтсортироватьСписокМаршрута()
	
	Объект.Маршрут.Сортировать("ВремяС, ВремяПо, Адрес");
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииВремяС()
	
	ТекущаяСтрокаМаршрута = Элементы.Маршрут.ТекущиеДанные;
	ТекущаяСтрокаМаршрута.ВремяС = НачалоДня(ТекущаяСтрокаМаршрута.ВремяС)
		+ Час(ТекущаяСтрокаМаршрута.ВремяСБезДаты)*60*60 + Минута(ТекущаяСтрокаМаршрута.ВремяСБезДаты)*60;
		
	Если ТекущаяСтрокаМаршрута.ВремяПо < ТекущаяСтрокаМаршрута.ВремяС Тогда
		ТекущаяСтрокаМаршрута.ВремяПо = ТекущаяСтрокаМаршрута.ВремяС;
		ТекущаяСтрокаМаршрута.ВремяПоБезДаты = ТекущаяСтрокаМаршрута.ВремяСБезДаты;
	КонецЕсли;
	
	Если ТекущаяСтрокаМаршрута.ВремяС < Объект.ДатаВремяРейсаПланС Тогда
		Объект.ДатаВремяРейсаПланС = ТекущаяСтрокаМаршрута.ВремяС;
		ПоказатьОповещениеПользователя(НСтр("ru='Плановая дата начала рейса изменена'"),,
			НСтр("ru='Выбранная дата раньше плановой даты начала рейса.'"));
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииВремяПо()
	
	ТекущаяСтрокаМаршрута = Элементы.Маршрут.ТекущиеДанные;
	ТекущаяСтрокаМаршрута.ВремяПо = НачалоДня(ТекущаяСтрокаМаршрута.ВремяПо)
		+ Час(ТекущаяСтрокаМаршрута.ВремяПоБезДаты)*60*60 + Минута(ТекущаяСтрокаМаршрута.ВремяПоБезДаты)*60;
	
	Если ТекущаяСтрокаМаршрута.ВремяПо < ТекущаяСтрокаМаршрута.ВремяС Тогда
		ТекущаяСтрокаМаршрута.ВремяС = ТекущаяСтрокаМаршрута.ВремяПо;
		ТекущаяСтрокаМаршрута.ВремяСБезДаты = ТекущаяСтрокаМаршрута.ВремяПоБезДаты;
	КонецЕсли;
	
	Если Объект.ДатаВремяРейсаПланС <> '00010101' И Объект.ДатаВремяРейсаПланПо < ТекущаяСтрокаМаршрута.ВремяПо Тогда
		Объект.ДатаВремяРейсаПланПо = ТекущаяСтрокаМаршрута.ВремяПо;
		ПоказатьОповещениеПользователя(НСтр("ru='Плановая дата окончания рейса изменена'"),,
			НСтр("ru='Выбранная дата позже плановой даты окончания рейса.'"));
	КонецЕсли;
	
КонецПроцедуры	

#КонецОбласти

#Область Прочее

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

&НаСервере
Процедура ТранспортноеСредствоПриИзмененииНаСервере()
	
	ПараметрыТТН = Новый Структура;
	ПараметрыТТН.Вставить("АвтомобильГосударственныйНомер");
	ПараметрыТТН.Вставить("АвтомобильМарка");	
	ПараметрыТТН.Вставить("ВидПеревозки");
	ПараметрыТТН.Вставить("АвтомобильТип");
	ПараметрыТТН.Вставить("АвтомобильВместимостьВКубическихМетрах");
	ПараметрыТТН.Вставить("АвтомобильГрузоподъемностьВТоннах");
	ПараметрыТТН.Вставить("ЛицензионнаяКарточкаСерия");
	ПараметрыТТН.Вставить("ЛицензионнаяКарточкаНомер");
	ПараметрыТТН.Вставить("ЛицензионнаяКарточкаВид");
	ПараметрыТТН.Вставить("ЛицензионнаяКарточкаРегистрационныйНомер");
	ПараметрыТТН.Вставить("Прицеп");
	ПараметрыТТН.Вставить("ГосударственныйНомерПрицепа");
	
	Если ЗначениеЗаполнено(Объект.ТранспортноеСредство) Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТранспортныеСредства.Код КАК АвтомобильГосударственныйНомер,
		|	ТранспортныеСредства.Марка КАК АвтомобильМарка,
		|	ТранспортныеСредства.ВидПеревозки КАК ВидПеревозки,
		|	ТранспортныеСредства.Тип КАК АвтомобильТип,
		|	ТранспортныеСредства.ВместимостьВКубическихМетрах КАК АвтомобильВместимостьВКубическихМетрах,
		|	ТранспортныеСредства.ГрузоподъемностьВТоннах КАК АвтомобильГрузоподъемностьВТоннах,
		|	ТранспортныеСредства.ЛицензионнаяКарточкаВид,
		|	ТранспортныеСредства.ЛицензионнаяКарточкаНомер,
		|	ТранспортныеСредства.ЛицензионнаяКарточкаРегистрационныйНомер,
		|	ТранспортныеСредства.ЛицензионнаяКарточкаСерия,
		|	ТранспортныеСредства.Прицеп,
		|	ТранспортныеСредства.ГосударственныйНомерПрицепа КАК ГосударственныйНомерПрицепа
		|ИЗ
		|	Справочник.ТранспортныеСредства КАК ТранспортныеСредства
		|ГДЕ
		|	ТранспортныеСредства.Ссылка = &Ссылка
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	ТипыТранспортныхСредств.Наименование,
		|	ТипыТранспортныхСредств.ВместимостьВКубическихМетрах,
		|	ТипыТранспортныхСредств.ГрузоподъемностьВТоннах,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО
		|ИЗ
		|	Справочник.ТипыТранспортныхСредств КАК ТипыТранспортныхСредств
		|ГДЕ
		|	ТипыТранспортныхСредств.Ссылка = &Ссылка";
		
		Запрос.УстановитьПараметр("Ссылка", Объект.ТранспортноеСредство);
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			ЗаполнитьЗначенияСвойств(ПараметрыТТН, Выборка);
		КонецЕсли;			
	КонецЕсли;
	
	ЗаполнитьЗначенияСвойств(Объект, ПараметрыТТН);
	
	ГрузоподъемностьВЕдПользователя = Объект.АвтомобильГрузоподъемностьВТоннах / КоэффициентПересчетаВТонны;
	ВместимостьВЕдПользователя = Объект.АвтомобильВместимостьВКубическихМетрах / КоэффициентПересчетаВКубическиеМетры;
	
	ОбновитьИтоговыйВесОбъемЗаполненность(ЭтотОбъект);
	ОтобразитьЕдПользователяНаСервере(ЭтотОбъект);

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьИтоговыйВесОбъемЗаполненность(Форма)
	
	Вес = Форма.Объект.Маршрут.Итог("Вес");
	Объем = Форма.Объект.Маршрут.Итог("Объем");
	Форма.Объект.Вес   = Вес * Форма.КоэффициентПересчетаВТонны;
	Форма.Объект.Объем = Объем * Форма.КоэффициентПересчетаВКубическиеМетры;
	
	ДанныеВесОбъем = Новый Структура;
	ДанныеВесОбъем.Вставить("ГрузоподъемностьВЕдПользователя", Форма.ГрузоподъемностьВЕдПользователя);
	ДанныеВесОбъем.Вставить("ВместимостьВЕдПользователя", Форма.ВместимостьВЕдПользователя);
	ДанныеВесОбъем.Вставить("Вес", Вес);
	ДанныеВесОбъем.Вставить("Объем", Объем);
	
	ДоставкаТоваровКлиентСервер.ОтобразитьНедогрузПерегруз(Форма, ДанныеВесОбъем)
	
КонецПроцедуры	

&НаСервере
Процедура ОбновитьВесИОбъемСтрокиМаршрута(СтрокаМаршрута)
	
	СтрокиРаспоряжения = Объект.Распоряжения.НайтиСтроки(Новый Структура("КлючСвязи",СтрокаМаршрута.КлючСвязи));
	
	СтрокаМаршрута.Вес = 0;
	СтрокаМаршрута.Объем = 0;
		
	Для Каждого СтрокаРаспоряжений Из СтрокиРаспоряжения Цикл
		
		СтрокаМаршрута.Вес = СтрокаРаспоряжений.Вес + СтрокаМаршрута.Вес;
		СтрокаМаршрута.Объем = СтрокаРаспоряжений.Объем + СтрокаМаршрута.Объем;
		
	КонецЦикла;	 
		 	
КонецПроцедуры

&НаСервере
Функция ПоместитьРаспоряженияВХранилище(КлючСвязи)
	
	СтруктураПоиск = Новый Структура("КлючСвязи",КлючСвязи);
	Распоряжения = Объект.Распоряжения.Выгрузить(СтруктураПоиск);
	
	Возврат ПоместитьВоВременноеХранилище(Распоряжения, УникальныйИдентификатор);

КонецФункции

// Параметры:
//  РезультатВопроса  - КодВозвратаДиалога
//  ДополнительныеПараметры - Произвольный
//
&НаКлиенте
Процедура СкладПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Ответ = РезультатВопроса;
	Если Ответ = КодВозвратаДиалога.Нет Тогда
		
		Объект.Склад = Склад;
		Возврат;
		
	Иначе
		
		Склад = Объект.Склад;
		
	КонецЕсли;
	
	ПриИзмененииСкладаСервер();
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииСкладаСервер()
	
	Объект.Распоряжения.Очистить();
	Объект.Маршрут.Очистить();
	ТоварыКДоставке.Очистить();
	Объект.Вес = 0;
	Объект.Объем = 0;
	
	ОбновитьСкладыПогрузки();
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьСкладыПогрузки()
	
	Склады = Объект.Распоряжения.Выгрузить(,"Склад");
	Склады.Свернуть("Склад");
	СкладыПогрузки.ЗагрузитьЗначения(Склады.ВыгрузитьКолонку("Склад"));
	
	СкладГруппа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Склад, "ЭтоГруппа");
	ЕстьОрдерныеСклады = СкладыСервер.ЕстьОрдерныйНаОтгрузкуСклад(Склад, Объект.ДатаВремяРейсаПланС);
		
	Элементы.КартинкаНесколькоСкладов.Видимость = ?(СкладГруппа = Неопределено, Ложь, СкладГруппа);
	Элементы.ОткрытьСклады.Видимость = ?(СкладГруппа = Неопределено, Ложь, СкладГруппа);
	Элементы.РаспоряженияЗаполнитьПоРасходнымОрдерам.Видимость = 
		(ЕстьОрдерныеСклады
		 И Объект.Операция = Перечисления.ВидыДоставки.СоСклада);
	Элементы.РаспоряженияЗаполнитьПоРасходнымОрдерам.Доступность = ЗначениеЗаполнено(Объект.Ссылка);
	
	Если Объект.Операция = Перечисления.ВидыДоставки.НаСклад Тогда
		ТекстЗаголовка = НСтр("ru = 'Склады назначения (%СкладыКоличество%)'");
	Иначе
		ТекстЗаголовка = НСтр("ru = 'Склады погрузки (%СкладыКоличество%)'");
	КонецЕсли;
	ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%СкладыКоличество%", Строка(Склады.Количество()));
	Элементы.ОткрытьСклады.Заголовок = ТекстЗаголовка;
	
КонецПроцедуры

// Параметры:
//  РезультатВопроса  - КодВозвратаДиалога
//  ДополнительныеПараметры - Произвольный
//
&НаКлиенте
Процедура ПослеВопросаОПерезаполненииПоОрдерам(Результат, ДополнительныеПараметры) Экспорт
	
	ТекстОповещения = ПриИзмененииСтатусаИПерезаполнении(Результат = КодВозвратаДиалога.Да);
	
	ОповеститьОбИзменениях(ТекстОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ОповеститьОбИзменениях(ТекстОповещения)
	
	Если Не ПустаяСтрока(ТекстОповещения) Тогда
		ПоказатьОповещениеПользователя(,,
			ТекстОповещения,
			БиблиотекаКартинок.Информация32);
	КонецЕсли;

КонецПроцедуры

&НаСервере
Функция ПриИзмененииСтатусаИПерезаполнении(ПерезаполнитьПоРасходнымОрдерам = Ложь)
	
	ТекстСообщенияОПерезаполненииПоОрдерам = "";
	Если ПерезаполнитьПоРасходнымОрдерам Тогда
		Если ЗаполнитьПоРасходнымОрдерамНаСервере() Тогда
			Если Объект.Распоряжения.Количество() > 0 Тогда
				ТекстСообщенияОПерезаполненииПоОрдерам = НСтр("ru = 'Задание на перевозку перезаполнено по расходным ордерам на товары.'");
			Иначе
				ТекстСообщенияОПерезаполненииПоОрдерам = НСтр("ru = 'После перезаполнения по расходным ордерам на товары в задании на перевозку не осталось распоряжений на доставку.'");
			КонецЕсли;
		Иначе
			ТекстСообщенияОПерезаполненииПоОрдерам = НСтр("ru = 'Задание на перевозку не перезаполнено, т.к. соответствует расходным ордерам на товары.'");
		КонецЕсли;
	КонецЕсли;
	
	Если СтатусБыл = Объект.Статус Тогда
		Возврат ТекстСообщенияОПерезаполненииПоОрдерам;
	КонецЕсли;
	
	СтатусБыл = Объект.Статус;
	
	ТекстСообщенияОВремени = Документы.ЗаданиеНаПеревозку.ЗаполнитьВремяРейсаПланФакт(Объект);
	
	Возврат ТекстСообщенияОВремени;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыМаршрута(ОбновляемыеСтроки = Неопределено)
	
	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; 
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Распоряжения.Распоряжение КАК Распоряжение,
	|	Распоряжения.Склад КАК Склад,
	|	Распоряжения.Перевозчик КАК Перевозчик,
	|	Распоряжения.ПолучательОтправитель КАК ПолучательОтправитель,
	|	Распоряжения.КлючСвязи КАК КлючСвязи,
	|	Распоряжения.НомерСтроки КАК НомерСтроки
	|ПОМЕСТИТЬ Распоряжения
	|ИЗ
	|	&Распоряжения КАК Распоряжения
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Маршрут.Адрес КАК Адрес,
	|	Маршрут.АдресЗначенияПолей КАК АдресЗначенияПолей,
	|	Маршрут.НомерСтроки КАК НомерСтроки,
	|	Маршрут.КлючСвязи КАК КлючСвязи
	|ПОМЕСТИТЬ Маршрут
	|ИЗ
	|	&Маршрут КАК Маршрут
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	&ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку,
	|	Распоряжения.Распоряжение КАК Распоряжение,
	|	Распоряжения.Склад КАК Склад,
	|	Распоряжения.Перевозчик КАК ПеревозчикПартнер,
	|	Распоряжения.ПолучательОтправитель КАК ПолучательОтправитель,
	|	Распоряжения.НомерСтроки КАК НомерСтрокиРаспоряжений,
	|	Маршрут.Адрес КАК АдресДоставки,
	|	Маршрут.АдресЗначенияПолей КАК АдресДоставкиЗначенияПолей,
	|	Маршрут.НомерСтроки КАК НомерСтрокиМаршрута
	|ПОМЕСТИТЬ РаспоряженияМаршрут
	|ИЗ
	|	Маршрут КАК Маршрут
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Распоряжения КАК Распоряжения
	|		ПО Маршрут.КлючСвязи = Распоряжения.КлючСвязи
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	РаспоряженияМаршрут.НомерСтрокиРаспоряжений КАК НомерСтрокиРаспоряжений,
	|	МАКСИМУМ(РаспоряженияМаршрут.НомерСтрокиМаршрута) КАК НомерСтрокиМаршрута,
	|	МАКСИМУМ(РаспоряженияМаршрут.ПеревозчикПартнер) КАК Перевозчик,
	|	МАКСИМУМ(РаспоряженияМаршрут.ПолучательОтправитель) КАК ПолучательОтправитель
	|ИЗ
	|	РаспоряженияМаршрут КАК РаспоряженияМаршрут
	|
	|СГРУППИРОВАТЬ ПО
	|	РаспоряженияМаршрут.НомерСтрокиРаспоряжений
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтрокиМаршрута,
	|	НомерСтрокиРаспоряжений,
	|	МАКСИМУМ(РаспоряженияМаршрут.ПеревозчикПартнер),
	|	МАКСИМУМ(РаспоряженияМаршрут.ПолучательОтправитель)";
	
	Запрос.УстановитьПараметр("Распоряжения", Объект.Распоряжения.Выгрузить());
	Если ОбновляемыеСтроки = Неопределено Тогда
		Запрос.УстановитьПараметр("Маршрут", Объект.Маршрут.Выгрузить());
	Иначе
		Запрос.УстановитьПараметр("Маршрут", Объект.Маршрут.Выгрузить(ОбновляемыеСтроки));
	КонецЕсли;
	
	Запрос.УстановитьПараметр("ЗаданиеНаПеревозку",	Объект.Ссылка);
		
	Результат = Запрос.Выполнить().Выбрать();
	ШаблонСПеревозчиком = НСтр("ru = '%Перевозчик% (для %ПолучателиОтправители%)'");
	Пока Результат.СледующийПоЗначениюПоля("НомерСтрокиМаршрута") Цикл
		
		СтрокаМаршрута = Объект.Маршрут[Результат.НомерСтрокиМаршрута - 1];
		ПолучателиОтправителиПоПункту = "";
		КоличествоРаспоряжений = 0;
		
		Пока Результат.СледующийПоЗначениюПоля("Перевозчик") Цикл
			
			ПолучателиОтправителиПоПеревозчику = "";
			Пока Результат.СледующийПоЗначениюПоля("ПолучательОтправитель") Цикл
				
				Пока Результат.Следующий() Цикл
					КоличествоРаспоряжений = КоличествоРаспоряжений + 1;
				КонецЦикла;
				
				ПолучателиОтправителиПоПеревозчику = ПолучателиОтправителиПоПеревозчику + Результат.ПолучательОтправитель + "," + " ";
			КонецЦикла;
			ПолучателиОтправителиПоПеревозчику = Лев(ПолучателиОтправителиПоПеревозчику, СтрДлина(ПолучателиОтправителиПоПеревозчику)-2);
			Если ЗначениеЗаполнено(Результат.Перевозчик) Тогда
				ПолучателиОтправителиПоПеревозчику = СтрЗаменить(ШаблонСПеревозчиком, "%ПолучателиОтправители%", ПолучателиОтправителиПоПеревозчику);
				ПолучателиОтправителиПоПеревозчику = СтрЗаменить(ПолучателиОтправителиПоПеревозчику, "%Перевозчик%", Результат.Перевозчик);
			КонецЕсли;
			ПолучателиОтправителиПоПункту = ПолучателиОтправителиПоПункту + ПолучателиОтправителиПоПеревозчику + "," + " ";
		КонецЦикла;
		
		СтрокаМаршрута.ПолучателиОтправители = ПолучателиОтправителиПоПункту
			+ СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоРаспоряжений, НСтр("ru = 'распоряжение, распоряжения, распоряжений'"))
			+ НСтр("ru = '...'");
		
		СтрокаМаршрута.ВремяСБезДаты   = ДоставкаТоваровКлиентСервер.ВремяБезДаты(СтрокаМаршрута.ВремяС);
		СтрокаМаршрута.ВремяПоБезДаты  = ДоставкаТоваровКлиентСервер.ВремяБезДаты(СтрокаМаршрута.ВремяПо);
		
	КонецЦикла;
	
	ЗаполнитьСлужебныеРеквизитыМаршрутаЛокализация(МенеджерВременныхТаблиц);
	
КонецПроцедуры

&НаСервере
Функция ПоместитьВХранилищеТоварыКДоставке()
	
	Возврат ПоместитьВоВременноеХранилище(ТоварыКДоставке.Выгрузить());
	
КонецФункции

&НаСервере
Процедура ИзменитьВесОбъемМаршрута(КлючСвязи, ИзменениеВес, ИзменениеОбъем)
	
	СтрокаМаршрута = СтрокаМаршрутаПоКлючуСвязи(КлючСвязи);
	СтрокаМаршрута.Вес = СтрокаМаршрута.Вес + ИзменениеВес;
	СтрокаМаршрута.Объем = СтрокаМаршрута.Объем + ИзменениеОбъем;
	
КонецПроцедуры

&НаСервере
Функция СтрокаМаршрутаПоКлючуСвязи(КлючСвязи)
	Возврат Объект.Маршрут.НайтиСтроки(Новый Структура("КлючСвязи",КлючСвязи))[0];
КонецФункции

&НаСервере
Функция ЗаполнитьПоРасходнымОрдерамНаСервере()
	
	ЕстьИзменения = ДоставкаТоваров.ПерезаполнитьЗаданиеНаПеревозкуПоРасходнымОрдерам(Объект, ТоварыКДоставке);
	ОбновитьИтоговыйВесОбъемЗаполненность(ЭтотОбъект);
	ОбновитьСкладыПогрузки();
	ЗаполнитьСлужебныеРеквизитыМаршрута();
	Возврат ЕстьИзменения;
	
КонецФункции

&НаСервере
Процедура НастроитьПоТипуИсполнителя()
	
	ВыполняетПеревозчик = Объект.ЗаданиеВыполняет = Перечисления.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик;
	
	Элементы.Перевозчик.Видимость             = ВыполняетПеревозчик;
	Элементы.Водитель.Видимость               = Не ВыполняетПеревозчик;
	Элементы.КурьерЭкспедитор.Видимость       = Не ВыполняетПеревозчик;
	Элементы.ИнформацияОТСИВодителе.Видимость = ВыполняетПеревозчик
												И Объект.Операция = Перечисления.ВидыДоставки.СоСклада;
	
	Если ВыполняетПеревозчик
		И ЗначениеЗаполнено(Объект.Перевозчик) Тогда
		
		Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
			ЗаполнитьКонтрагентаИБанковскийСчетПеревозчика();
		КонецЕсли;
		
	Иначе
		Объект.Перевозчик = Справочники.Партнеры.ПустаяСсылка();
		Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
		Объект.БанковскийСчетПеревозчика = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
		
		Перевозчик = Объект.Перевозчик;
	КонецЕсли;
	
	ЗаполнитьСпискиВыбораВодителейИТС();
	
КонецПроцедуры

&НаСервере
Процедура ПеревозчикПриИзмененииНаСервере()
	
	Если Перевозчик <> Объект.Перевозчик Тогда
		Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
		Объект.БанковскийСчетПеревозчика = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
		
		ЗаполнитьСпискиВыбораВодителейИТС();		
		
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Объект.Перевозчик) Тогда
		ЗаполнитьКонтрагентаИБанковскийСчетПеревозчика();
	Иначе
		Объект.Перевозчик = Справочники.Партнеры.ПустаяСсылка();
		Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
		Объект.БанковскийСчетПеревозчика = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
	КонецЕсли;
	
	Перевозчик = Объект.Перевозчик;
	
КонецПроцедуры

&НаСервере
Процедура ВодительПриИзмененииНаСервере()
	
	ПараметрыТТН = Новый Структура;
	ПараметрыТТН.Вставить("ВодительФИО");
	ПараметрыТТН.Вставить("УдостоверениеСерия");
	ПараметрыТТН.Вставить("УдостоверениеНомер");
	
	Если ЗначениеЗаполнено(Объект.ТранспортноеСредство) Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ФизическиеЛица.Наименование КАК ВодительФИО,
		|	ДокументыФизическихЛиц.Серия КАК УдостоверениеСерия,
		|	ДокументыФизическихЛиц.Номер КАК УдостоверениеНомер
		|ИЗ
		|	Справочник.ФизическиеЛица КАК ФизическиеЛица
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК ДокументыФизическихЛиц
		|		ПО ФизическиеЛица.Ссылка = ДокументыФизическихЛиц.Физлицо
		|			И (ДокументыФизическихЛиц.ВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ВодительскоеУдостоверение))
		|ГДЕ
		|	ФизическиеЛица.Ссылка = &Ссылка";
		
		Запрос.УстановитьПараметр("Ссылка", Объект.Водитель);
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			ЗаполнитьЗначенияСвойств(ПараметрыТТН, Выборка);
		КонецЕсли;			
	КонецЕсли;
	
	ЗаполнитьЗначенияСвойств(Объект, ПараметрыТТН);

КонецПроцедуры

&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()
	Объект.БанковскийСчетПеревозчика = Справочники.БанковскиеСчетаКонтрагентов.ПолучитьБанковскийСчетПоУмолчанию(Объект.Контрагент);
КонецПроцедуры

&НаКлиенте
Процедура МаршрутДополнительнаяИнформацияНачалоВыбораЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт

	Если РезультатЗакрытия <> Неопределено Тогда
		ТекущиеДанные = Элементы.Маршрут.ТекущиеДанные;
		ТекущиеДанные.ДополнительнаяИнформация = РезультатЗакрытия;
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеРедактированияРаспоряжений(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Модифицированность = Истина;
	ПослеРедактированияРаспоряженийСервер(Результат);
	
КонецПроцедуры

&НаСервере
Процедура ПослеРедактированияРаспоряженийСервер(Результат)
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ТоварыКДоставке.Распоряжение,
	|	ТоварыКДоставке.Склад,
	|	ТоварыКДоставке.ПолучательОтправитель,
	|	ТоварыКДоставке.Номенклатура,
	|	ТоварыКДоставке.Характеристика,
	|	ТоварыКДоставке.Назначение,
	|	ТоварыКДоставке.Серия,
	|	ТоварыКДоставке.Количество,
	|	ТоварыКДоставке.ВсеТовары
	|ПОМЕСТИТЬ ТоварыКДоставке
	|ИЗ
	|	&ТоварыКДоставке КАК ТоварыКДоставке
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТоварыКДоставке.Распоряжение,
	|	ТоварыКДоставке.Склад,
	|	ТоварыКДоставке.ПолучательОтправитель,
	|	ТоварыКДоставке.Номенклатура,
	|	ТоварыКДоставке.Характеристика,
	|	ТоварыКДоставке.Назначение,
	|	ТоварыКДоставке.Серия,
	|	ТоварыКДоставке.Количество,
	|	ТоварыКДоставке.ВсеТовары
	|ПОМЕСТИТЬ ТоварыКДоставкеОтредактированные
	|ИЗ
	|	&ТоварыКДоставкеОтредактированные КАК ТоварыКДоставке
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Распоряжения.КлючСвязи,
	|	Распоряжения.Распоряжение,
	|	Распоряжения.Вес,
	|	Распоряжения.Объем,
	|	Распоряжения.Перевозчик,
	|	Распоряжения.ПолучательОтправитель,
	|	Распоряжения.ВремяС,
	|	Распоряжения.ВремяПо,
	|	Распоряжения.ДополнительнаяИнформация,
	|	Распоряжения.Доставлено,
	|	Распоряжения.Склад,
	|	Распоряжения.ДоставляетсяПолностью
	|ПОМЕСТИТЬ Распоряжения
	|ИЗ
	|	&Распоряжения КАК Распоряжения
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Распоряжения.КлючСвязи,
	|	Распоряжения.Распоряжение,
	|	Распоряжения.Вес,
	|	Распоряжения.Объем,
	|	Распоряжения.Перевозчик,
	|	Распоряжения.ПолучательОтправитель,
	|	Распоряжения.ВремяС,
	|	Распоряжения.ВремяПо,
	|	Распоряжения.ДополнительнаяИнформация,
	|	Распоряжения.Доставлено,
	|	Распоряжения.Склад,
	|	Распоряжения.ДоставляетсяПолностью
	|ПОМЕСТИТЬ РаспоряженияОтредактированные
	|ИЗ
	|	&РаспоряженияОтредактированные КАК Распоряжения
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	РаспоряженияОтредактированные.КлючСвязи,
	|	РаспоряженияОтредактированные.Распоряжение,
	|	РаспоряженияОтредактированные.Перевозчик,
	|	РаспоряженияОтредактированные.ПолучательОтправитель,
	|	РаспоряженияОтредактированные.ВремяС,
	|	РаспоряженияОтредактированные.ВремяПо,
	|	РаспоряженияОтредактированные.ДополнительнаяИнформация,
	|	РаспоряженияОтредактированные.Склад,
	|	РаспоряженияОтредактированные.Вес КАК Вес,
	|	РаспоряженияОтредактированные.Объем КАК Объем,
	|	РаспоряженияОтредактированные.Доставлено КАК Доставлено,
	|	РаспоряженияОтредактированные.ДоставляетсяПолностью КАК ДоставляетсяПолностью
	|ПОМЕСТИТЬ РаспоряженияРезультат
	|ИЗ
	|	РаспоряженияОтредактированные КАК РаспоряженияОтредактированные
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	Распоряжения.КлючСвязи,
	|	Распоряжения.Распоряжение,
	|	Распоряжения.Перевозчик,
	|	Распоряжения.ПолучательОтправитель,
	|	Распоряжения.ВремяС,
	|	Распоряжения.ВремяПо,
	|	Распоряжения.ДополнительнаяИнформация,
	|	Распоряжения.Склад,
	|	Распоряжения.Вес,
	|	Распоряжения.Объем,
	|	Распоряжения.Доставлено,
	|	Распоряжения.ДоставляетсяПолностью
	|ИЗ
	|	Распоряжения КАК Распоряжения
	|ГДЕ
	|	Распоряжения.КлючСвязи <> &КлючСвязи
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	УдаленныеРаспоряжения.Распоряжение
	|ИЗ
	|	(ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		Распоряжения.Распоряжение КАК Распоряжение,
	|		1 КАК ПолеСворачивания
	|	ИЗ
	|		Распоряжения КАК Распоряжения
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		РаспоряженияРезультат.Распоряжение,
	|		-1
	|	ИЗ
	|		РаспоряженияРезультат КАК РаспоряженияРезультат) КАК УдаленныеРаспоряжения
	|
	|СГРУППИРОВАТЬ ПО
	|	УдаленныеРаспоряжения.Распоряжение
	|
	|ИМЕЮЩИЕ
	|	СУММА(УдаленныеРаспоряжения.ПолеСворачивания) > 0
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	РаспоряженияРезультат.КлючСвязи,
	|	РаспоряженияРезультат.Распоряжение,
	|	РаспоряженияРезультат.Перевозчик,
	|	РаспоряженияРезультат.ПолучательОтправитель,
	|	РаспоряженияРезультат.ВремяС,
	|	РаспоряженияРезультат.ВремяПо,
	|	РаспоряженияРезультат.ДополнительнаяИнформация,
	|	РаспоряженияРезультат.Склад,
	|	РаспоряженияРезультат.Вес,
	|	РаспоряженияРезультат.Объем,
	|	РаспоряженияРезультат.Доставлено,
	|	РаспоряженияРезультат.ДоставляетсяПолностью
	|ИЗ
	|	РаспоряженияРезультат КАК РаспоряженияРезультат
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СУММА(РаспоряженияОтредактированные.Вес) КАК Вес,
	|	СУММА(РаспоряженияОтредактированные.Объем) КАК Объем,
	|	МИНИМУМ(РаспоряженияОтредактированные.Доставлено) КАК Доставлено,
	|	КОЛИЧЕСТВО(*) КАК КоличествоРаспоряжений
	|ИЗ
	|	РаспоряженияОтредактированные КАК РаспоряженияОтредактированные
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТоварыКДоставке.Распоряжение,
	|	ТоварыКДоставке.Склад,
	|	ТоварыКДоставке.ПолучательОтправитель,
	|	ТоварыКДоставке.Номенклатура,
	|	ТоварыКДоставке.Характеристика,
	|	ТоварыКДоставке.Назначение,
	|	ТоварыКДоставке.Серия,
	|	ТоварыКДоставке.Количество,
	|	ТоварыКДоставке.ВсеТовары
	|ИЗ
	|	ТоварыКДоставке КАК ТоварыКДоставке
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Распоряжения КАК Распоряжения
	|		ПО (Распоряжения.Распоряжение = ТоварыКДоставке.Распоряжение)
	|			И (Распоряжения.Склад = ТоварыКДоставке.Склад)
	|ГДЕ
	|	Распоряжения.КлючСвязи <> &КлючСвязи
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТоварыКДоставкеОтредактированные.Распоряжение,
	|	ТоварыКДоставкеОтредактированные.Склад,
	|	ТоварыКДоставкеОтредактированные.ПолучательОтправитель,
	|	ТоварыКДоставкеОтредактированные.Номенклатура,
	|	ТоварыКДоставкеОтредактированные.Характеристика,
	|	ТоварыКДоставкеОтредактированные.Назначение,
	|	ТоварыКДоставкеОтредактированные.Серия,
	|	ТоварыКДоставкеОтредактированные.Количество,
	|	ТоварыКДоставкеОтредактированные.ВсеТовары
	|ИЗ
	|	ТоварыКДоставкеОтредактированные КАК ТоварыКДоставкеОтредактированные";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	
	СтрокаПункт = Объект.Маршрут.НайтиПоИдентификатору(Элементы.Маршрут.ТекущаяСтрока);
	
	Запрос.УстановитьПараметр("РаспоряженияОтредактированные", ПолучитьИзВременногоХранилища(Результат.АдресРаспоряжений));
	Запрос.УстановитьПараметр("ТоварыКДоставкеОтредактированные", ПолучитьИзВременногоХранилища(Результат.АдресТоваровКДоставке));
	Запрос.УстановитьПараметр("ТоварыКДоставке", ТоварыКДоставке.Выгрузить());
	Запрос.УстановитьПараметр("Распоряжения", Объект.Распоряжения.Выгрузить());
	Запрос.УстановитьПараметр("КлючСвязи", СтрокаПункт.КлючСвязи);
	
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	ВГраница = РезультатЗапроса.ВГраница();
	
	Выборка = РезультатЗапроса[ВГраница-1].Выбрать();
	Выборка.Следующий();
	Если Выборка.КоличествоРаспоряжений = 0 Тогда
		Объект.Маршрут.Удалить(СтрокаПункт);
	Иначе
		ЗаполнитьЗначенияСвойств(СтрокаПункт,Выборка);
	КонецЕсли;
	
	Объект.Распоряжения.Загрузить(РезультатЗапроса[ВГраница-2].Выгрузить());
		
	ТоварыКДоставке.Загрузить(РезультатЗапроса[ВГраница].Выгрузить());
	ДоставкаТоваров.ЗаполнитьПризнакДоставляетсяПолностью(ТоварыКДоставке.Выгрузить(), Объект.Распоряжения);
	
	ЗаполнитьСлужебныеРеквизитыМаршрута();
	ОбновитьИтоговыйВесОбъемЗаполненность(ЭтотОбъект);
	ОбновитьСкладыПогрузки();
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТоварыКДоставке()
	НаборЗаписей = РегистрыСведений.ТоварыКДоставке.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.ЗаданиеНаПеревозку.Установить(Объект.Ссылка);
	НаборЗаписей.Прочитать();
	ТоварыКДоставке.Загрузить(НаборЗаписей.Выгрузить());
КонецПроцедуры	

&НаСервере
Процедура ЗаполнитьКонтрагентаИБанковскийСчетПеревозчика()
	
	ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Объект.Перевозчик, Объект.Контрагент);
	
	Если ЗначениеЗаполнено(Объект.Контрагент) Тогда
		Объект.БанковскийСчетПеревозчика = Справочники.БанковскиеСчетаКонтрагентов.ПолучитьБанковскийСчетПоУмолчанию(
			Объект.Контрагент);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПроверитьБлокировкуЗадания()
	
	Если Объект.Ссылка.Пустая() Тогда
		
		Возврат Истина;
		
	Иначе
		
		Попытка
			
			ДокОбъект = Объект.Ссылка.ПолучитьОбъект();
			ЗаблокироватьДанныеФормыДляРедактирования();
			Возврат Истина;
			
		Исключение
			
			Текст = НСтр("ru = 'Не удалось заблокировать %Задание% для изменений.'");
			Текст = СтрЗаменить(Текст,"%Задание%", Строка(Объект.Ссылка));
			ОбщегоНазначения.СообщитьПользователю(Текст, Объект.Ссылка);
			Возврат Ложь;
			
		КонецПопытки;
		
	КонецЕсли;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьСпискиВыбораВодителейИТС()
	
	Элементы.ВодительФИО.СписокВыбора.Очистить();
	Элементы.АвтомобильГосударственныйНомер.СписокВыбора.Очистить();
	Элементы.АвтомобильТип.СписокВыбора.Очистить();
	
	Если Не (Объект.ЗаданиеВыполняет = Перечисления.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик
		И Объект.Операция = Перечисления.ВидыДоставки.СоСклада
		И ЗначениеЗаполнено(Объект.Перевозчик)) Тогда
		Возврат;
	КонецЕсли;
	
	#Область ВодительФИО
	
	Запрос =  Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 50
	|	ЗаданиеНаПеревозку.ВодительФИО КАК Водитель,
	|	ЗаданиеНаПеревозку.УдостоверениеНомер КАК УдостоверениеНомер,
	|	ЗаданиеНаПеревозку.УдостоверениеСерия КАК УдостоверениеСерия,
	|	МАКСИМУМ(ЗаданиеНаПеревозку.Дата) КАК Дата
	|ИЗ
	|	Документ.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку
	|ГДЕ
	|	ЗаданиеНаПеревозку.Перевозчик = &Перевозчик
	|	И ЗаданиеНаПеревозку.ВодительФИО <> """"
	|
	|СГРУППИРОВАТЬ ПО
	|	ЗаданиеНаПеревозку.ВодительФИО,
	|	ЗаданиеНаПеревозку.УдостоверениеСерия,
	|	ЗаданиеНаПеревозку.УдостоверениеНомер
	|
	|УПОРЯДОЧИТЬ ПО
	|	МАКСИМУМ(ЗаданиеНаПеревозку.Дата) УБЫВ";
	
	Запрос.УстановитьПараметр("Перевозчик", Объект.Перевозчик);
	
	УстановитьПривилегированныйРежим(Истина);
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	УстановитьПривилегированныйРежим(Ложь);
	
	Пока РезультатЗапроса.Следующий() Цикл
		ИнформацияВодителя = Новый Структура("Водитель, УдостоверениеСерия, УдостоверениеНомер");
		ЗаполнитьЗначенияСвойств(ИнформацияВодителя, РезультатЗапроса);
		Элементы.ВодительФИО.СписокВыбора.Добавить(ИнформацияВодителя, РезультатЗапроса.Водитель);
	КонецЦикла;	
	
	#КонецОбласти
	
	#Область АвтомобильГосударственныйНомер
	
	Запрос =  Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 50
	|	ЗаданиеНаПеревозку.АвтомобильМарка КАК АвтомобильМарка,
	|	ЗаданиеНаПеревозку.АвтомобильГосударственныйНомер КАК АвтомобильГосударственныйНомер,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаВид КАК ЛицензионнаяКарточкаВид,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаНомер КАК ЛицензионнаяКарточкаНомер,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаРегистрационныйНомер КАК ЛицензионнаяКарточкаРегистрационныйНомер,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаСерия КАК ЛицензионнаяКарточкаСерия,
	|	ЗаданиеНаПеревозку.Прицеп КАК Прицеп,
	|	ЗаданиеНаПеревозку.ГосударственныйНомерПрицепа КАК ГосударственныйНомерПрицепа,
	|	ЗаданиеНаПеревозку.ВидПеревозки КАК ВидПеревозки,
	|	МАКСИМУМ(ЗаданиеНаПеревозку.Дата) КАК Дата,
	|	ЗаданиеНаПеревозку.АвтомобильГрузоподъемностьВТоннах КАК АвтомобильГрузоподъемностьВТоннах,
	|	ЗаданиеНаПеревозку.АвтомобильВместимостьВКубическихМетрах КАК АвтомобильВместимостьВКубическихМетрах,
	|	ЗаданиеНаПеревозку.АвтомобильТип КАК АвтомобильТип
	|ИЗ
	|	Документ.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку
	|ГДЕ
	|	ЗаданиеНаПеревозку.Перевозчик = &Перевозчик
	|	И ЗаданиеНаПеревозку.АвтомобильГосударственныйНомер <> """"
	|
	|СГРУППИРОВАТЬ ПО
	|	ЗаданиеНаПеревозку.АвтомобильМарка,
	|	ЗаданиеНаПеревозку.АвтомобильГосударственныйНомер,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаВид,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаНомер,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаРегистрационныйНомер,
	|	ЗаданиеНаПеревозку.ЛицензионнаяКарточкаСерия,
	|	ЗаданиеНаПеревозку.Прицеп,
	|	ЗаданиеНаПеревозку.ГосударственныйНомерПрицепа,
	|	ЗаданиеНаПеревозку.ВидПеревозки,
	|	ЗаданиеНаПеревозку.АвтомобильГрузоподъемностьВТоннах,
	|	ЗаданиеНаПеревозку.АвтомобильВместимостьВКубическихМетрах,
	|	ЗаданиеНаПеревозку.АвтомобильТип
	|
	|УПОРЯДОЧИТЬ ПО
	|	МАКСИМУМ(ЗаданиеНаПеревозку.Дата) УБЫВ";
	
	Запрос.УстановитьПараметр("Перевозчик", Объект.Перевозчик);
	
	УстановитьПривилегированныйРежим(Истина);
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	УстановитьПривилегированныйРежим(Ложь);
	
	Элементы.АвтомобильГосударственныйНомер.СписокВыбора.Очистить();
	
	Пока РезультатЗапроса.Следующий() Цикл
		ИнформацияТранспортногоСредства = Новый Структура("АвтомобильГосударственныйНомер, АвтомобильМарка, АвтомобильТип, АвтомобильГрузоподъемностьВТоннах, АвтомобильВместимостьВКубическихМетрах, ЛицензионнаяКарточкаВид, ЛицензионнаяКарточкаНомер, ЛицензионнаяКарточкаРегистрационныйНомер, ЛицензионнаяКарточкаСерия, Прицеп, ГосударственныйНомерПрицепа, ВидПеревозки");
		ЗаполнитьЗначенияСвойств(ИнформацияТранспортногоСредства, РезультатЗапроса);
		Элементы.АвтомобильГосударственныйНомер.СписокВыбора.Добавить(ИнформацияТранспортногоСредства, РезультатЗапроса.АвтомобильГосударственныйНомер);
	КонецЦикла;
	
	#КонецОбласти
	
	#Область АвтомобильТип
	
	Запрос =  Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 50
	|	МАКСИМУМ(ЗаданиеНаПеревозку.Дата) КАК Дата,
	|	ЗаданиеНаПеревозку.АвтомобильГрузоподъемностьВТоннах КАК АвтомобильГрузоподъемностьВТоннах,
	|	ЗаданиеНаПеревозку.АвтомобильВместимостьВКубическихМетрах КАК АвтомобильВместимостьВКубическихМетрах,
	|	ЗаданиеНаПеревозку.АвтомобильТип КАК АвтомобильТип
	|ИЗ
	|	Документ.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку
	|ГДЕ
	|	ЗаданиеНаПеревозку.Перевозчик = &Перевозчик
	|	И ЗаданиеНаПеревозку.АвтомобильГосударственныйНомер = """"
	|	И ЗаданиеНаПеревозку.АвтомобильТип <> """"
	|
	|СГРУППИРОВАТЬ ПО
	|	ЗаданиеНаПеревозку.АвтомобильГрузоподъемностьВТоннах,
	|	ЗаданиеНаПеревозку.АвтомобильВместимостьВКубическихМетрах,
	|	ЗаданиеНаПеревозку.АвтомобильТип
	|
	|УПОРЯДОЧИТЬ ПО
	|	МАКСИМУМ(ЗаданиеНаПеревозку.Дата) УБЫВ";
	
	Запрос.УстановитьПараметр("Перевозчик", Объект.Перевозчик);
	
	УстановитьПривилегированныйРежим(Истина);
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	УстановитьПривилегированныйРежим(Ложь);
	
	Элементы.АвтомобильТип.СписокВыбора.Очистить();
	
	Пока РезультатЗапроса.Следующий() Цикл
		ИнформацияТранспортногоСредства = Новый Структура("АвтомобильТип, АвтомобильГрузоподъемностьВТоннах, АвтомобильВместимостьВКубическихМетрах");
		ЗаполнитьЗначенияСвойств(ИнформацияТранспортногоСредства, РезультатЗапроса);
		Элементы.АвтомобильТип.СписокВыбора.Добавить(ИнформацияТранспортногоСредства, РезультатЗапроса.АвтомобильТип);
	КонецЦикла;     
	
	#КонецОбласти

КонецПроцедуры

&НаКлиенте
Процедура АвтомобильГрузоподъемностьВместимостьПриИзменении()
	
	ГрузоподъемностьВЕдПользователя = Объект.АвтомобильГрузоподъемностьВТоннах / КоэффициентПересчетаВТонны;
	ВместимостьВЕдПользователя = Объект.АвтомобильВместимостьВКубическихМетрах / КоэффициентПересчетаВКубическиеМетры;
	ОтобразитьЕдПользователяНаСервере(ЭтотОбъект);
	ОбновитьИтоговыйВесОбъемЗаполненность(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОтобразитьЕдПользователяНаСервере(Форма)
	
	Форма.Элементы.ДекорацияЕдиницаИзмеренияОбъема.Заголовок = СтрШаблон(НСтр("ru='(%1 %2)'"), 
		Форма.ВместимостьВЕдПользователя,
		Строка(Форма.ЕдиницаИзмеренияОбъема));
		
	Форма.Элементы.ДекорацияЕдиницаИзмеренияВеса.Заголовок = СтрШаблон(НСтр("ru='(%1 %2)'"), 
		Форма.ГрузоподъемностьВЕдПользователя,
		Строка(Форма.ЕдиницаИзмеренияВеса));
	
КонецПроцедуры

#КонецОбласти

#Область Локализация

#Область ТранспортнаяНакладная

//++ Локализация

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

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

&НаКлиенте
Процедура ОформитьТранспортныеНакладныеОбработкаОтвета(КодОтвета, ДополнительныеПараметры) Экспорт 
	
	РезультатПроверки = Истина;
	
	Если КодОтвета = КодВозвратаДиалога.ОК И ПроверитьЗаполнение() Тогда
		Попытка
			РезультатПроверки = Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение));
		Исключение
			ОбработкаОшибок.ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке());
			РезультатПроверки = Ложь;
		КонецПопытки;
	Иначе
		РезультатПроверки = Ложь;
	КонецЕсли;
	
	ОформитьТранспортныеНакладныеЗавершение(РезультатПроверки)
	
КонецПроцедуры

//-- Локализация

#КонецОбласти

&НаКлиенте
Процедура МаршрутВыборЛокализация(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	//++ Локализация
	
	ТекущиеДанные = Элемент.ТекущиеДанные;
	Если Поле.Имя = "МаршрутТранспортнаяНакладнаяОформлена" Тогда
		
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("ЗаданиеНаПеревозку", Объект.Ссылка);
		ПараметрыФормы.Вставить("АдресДоставки", ТекущиеДанные.Адрес);
		ОткрытьФорму("Документ.ТранспортнаяНакладная.Форма.СозданныеТранспортныеНакладные", ПараметрыФормы);
		
	КонецЕсли;
	
	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

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

&НаСервере
Процедура ПриЧтенииСозданииНаСервереЛокализация()
	
	//++ Локализация
	
	Если Не ПравоДоступа("Чтение", Метаданные.Документы.ТранспортнаяНакладная) Тогда
		Элементы.МаршрутТранспортнаяНакладнаяОформлена.Видимость = Ложь;
	КонецЕсли;
	
	Если Не ПравоДоступа("Добавление", Метаданные.Документы.ТранспортнаяНакладная) Тогда 
		Элементы.МаршрутОформитьТранспортныеНакладные.Видимость = Ложь;	
	КонецЕсли;
	
	Если Объект.Операция = Перечисления.ВидыДоставки.НаСклад Тогда
		Элементы.МаршрутТранспортнаяНакладнаяОформлена.Видимость = Ложь;
		Элементы.МаршрутТранспортнаяНакладнаяОформлена.Видимость = Ложь;
		Элементы.МаршрутОформитьТранспортныеНакладные.Видимость  = Ложь;
	Иначе
		Элементы.МаршрутТранспортнаяНакладнаяОформлена.Видимость = Истина;
		Элементы.МаршрутТранспортнаяНакладнаяОформлена.Видимость = Истина;
		Элементы.МаршрутОформитьТранспортныеНакладные.Видимость  = Истина;
	КонецЕсли;
	
	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещенияЛокализация(ИмяСобытия, Параметр, Источник);
	
	//++ Локализация
	
	Если ТранспортнаяНакладнаяКлиент.ЭтоОповещениеЗаписиТранспортнойНакладной(ЭтотОбъект, ИмяСобытия, Параметр, Источник) Тогда
		ЗаполнитьСлужебныеРеквизитыМаршрута();
	КонецЕсли;
	
	Если ИмяСобытия = "Запись_ДокументыЭПД" Тогда
		ОбновитьТекстЭПД();
	КонецЕсли;
	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

//++ Локализация
&НаСервере
Процедура ОбновитьТекстЭПД()
	
	Если Элементы.ГруппаСостояниеЭПД.Видимость Тогда 
		КоличествоЭПД = ОбменСГИСЭПДПереопределяемый.КоличествоЭлектронныхДокументов(Объект.Ссылка);
		Элементы.ДекорацияЭПД.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			"ЭПД (%1)",
			Строка(КоличествоЭПД));
	КонецЕсли;
	
КонецПроцедуры
//-- Локализация

#КонецОбласти

#КонецОбласти

Связанные материалы