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