#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем КоличествоВыделенныхСтрокРаспоряжений;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ЖирныйШрифт = ШрифтыСтиля.ЖирныйШрифт;
ЦветЗеленый = ЦветаСтиля.РезультатУспехЦвет;
ЦветКрасный = ЦветаСтиля.РезультатПроблемаЦвет;
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтотОбъект);
ЗаполнитьСпискиВыбора();
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
ВосстановитьНастройки();
СкладБыл = Склад;
ЗонаГруппаИлиПустая = (НЕ ЗначениеЗаполнено(Зона) ИЛИ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Зона,"ЭтоГруппа"));
Обработка = РеквизитФормыВЗначение("Объект");
ОбработкаПолноеИмя = Обработка.Метаданные().ПолноеИмя();
ЕдиницаИзмеренияВеса = Константы.ЕдиницаИзмеренияВеса.Получить();
ЕдиницаИзмеренияОбъема = Константы.ЕдиницаИзмеренияОбъема.Получить();
УстановитьЗаголовкиКолонокВесОбъемСервер();
РедактироватьАдресаДоставкиТолькоВДиалоге = ПолучитьФункциональнуюОпцию("РедактироватьАдресаДоставкиТолькоВДиалоге");
ЭлементыДляЗаполнения = Новый Массив;
ЭлементыДляЗаполнения.Добавить(Элементы.ЗаданияНаПеревозкуПланируемыеВремяС);
ЭлементыДляЗаполнения.Добавить(Элементы.ЗаданияНаПеревозкуПланируемыеВремяПо);
ДоставкаТоваровКлиентСервер.ЗаполнитьСписокВыбораПоляВремени(ЭлементыДляЗаполнения);
ДоставкаТоваров.УстановитьДоступностьАдресовДоставки(ЭтотОбъект.Элементы);
ДоставкаТоваров.ЗаполнитьСписокВыбораПеревозчиков(Элементы,,Склад);
Элементы.ДокументыДляПеревозчиковПеревозчик.Видимость = Не ЗначениеЗаполнено(Перевозчик);
Если ЗначениеЗаполнено(Параметры.ВидДоставки) Тогда
ВидДоставки = Параметры.ВидДоставки;
Элементы.ВидДоставки.Видимость = Ложь;
Заголовок = Параметры.ВидДоставки;
КонецЕсли;
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
СкладПриИзмененииСервер();
УстановитьВидимостьСкладов();
СписокТипов = ЗаданияНаПеревозкуВРаботе.КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Ссылка")).Тип;
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.Источники = СписокТипов;
ПараметрыРазмещения.КоманднаяПанель = Элементы.КоманднаяПанельЗаданияНаПеревозкуВРаботе;
ПараметрыРазмещения.ПрефиксГрупп = "ЗаданияНаПеревозкуВРаботе";
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
СписокТипов = Метаданные.ОпределяемыеТипы.РаспоряжениеНаДоставку.Тип;
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.Источники = СписокТипов;
ПараметрыРазмещения.КоманднаяПанель = Элементы.КоманднаяПанельДокументыДляПеревозчиков;
ПараметрыРазмещения.ПрефиксГрупп = "ДокументыДляПеревозчиков";
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
РаспоряженияРазвернуть();
ЗаданияПланируемыеРазвернуть();
КоличествоВыделенныхСтрокРаспоряжений = 0;
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаФормированиеЗаданийНаПеревозку Тогда
ПодключитьОбработчикОжидания("ПроверкаНеобходимостиПересчитатьИтогиПоРаспоряжениямНаДоставкуОбработчикОжидания",1.3,Ложь);
КонецЕсли;
ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтрокиОбработчикОжидания();
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтотОбъект, "СканерШтрихкода");
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = ОбработкаПолноеИмя + ".Форма.ФормаВыбораРаспоряжений" Тогда
РазбитьПунктДоставкиСервер(ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Справочник.ТранспортныеСредства.Форма.ФормаВыбора"
Или ИсточникВыбора.ИмяФормы = "Справочник.ТипыТранспортныхСредств.Форма.ФормаВыбора" Тогда
ТекущиеДанные = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
ТекущиеДанные.Транспорт = ВыбранноеЗначение;
ЗаполнитьЗначенияСвойств(ТекущиеДанные, РеквизитыТС(ВыбранноеЗначение));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если Не ЗавершениеРаботы Тогда
СохранитьНастройкиИЗаданияНаПеревозкуСервер();
ОповеститьОСозданныхЗаданиях();
КонецЕсли;
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Запись_ПоручениеЭкспедитору" Тогда
ОбновитьСписокРаспоряженийНаДоставку(Источник);
ИначеЕсли ИмяСобытия = "Запись_ЗаданиеНаПеревозку" Тогда
ОбновитьСпискиДляТекущейСтраницы();
ИначеЕсли ИмяСобытия = "ОтменаИсключенияИзДоставки" Тогда
ОбновитьСписокРаспоряженийНаДоставку(Параметр.АдресРаспоряжений);
КонецЕсли;
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВСтруктуру(Параметр));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ВидДоставкиПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.ВидДоставки.ПриИзменении");
ВидДоставкиПриИзмененииСервер();
ОповеститьОСозданныхЗаданиях();
КонецПроцедуры
&НаКлиенте
Процедура ДатаРаспоряженийПриИзменении(Элемент)
ДатаРаспоряженийПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.Склад.ПриИзменении");
Если Склад <> СкладБыл Тогда
ТекстОшибки = "";
СкладПриИзмененииСервер(ТекстОшибки);
Если Не ПустаяСтрока(ТекстОшибки) Тогда
ПоказатьПредупреждение(, ТекстОшибки);
Возврат;
КонецЕсли;
ОповеститьОСозданныхЗаданиях();
СкладБыл = Склад;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗонаПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.Зона.ПриИзменении");
ЗонаПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ГлавныеСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
ПодключитьОбработчикОжидания("ОбновитьСпискиДляТекущейСтраницы", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
СтатусПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ДатаРаспоряженийРегулирование(Элемент, Направление, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(ДатаРаспоряжений) Тогда
ДатаРаспоряжений = ТекущаяДатаСеанса;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаРаспоряженийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(ДатаРаспоряжений) Тогда
ДатаРаспоряжений = ТекущаяДатаСеанса;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПеревозчикПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.ПеревозчикПартнер.ПриИзменении");
ПеревозчикПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ПериодДокументовДляПеревозчиковПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.ПериодДокументовДляПеревозчиков.ПриИзменении");
ОбновитьДокументыДляПеревозчиковСервер();
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоТипуИсполнителейПриИзменении(Элемент)
СохранитьЗаданияОбновитьСписки();
КонецПроцедуры
&НаКлиенте
Процедура НадписьРаспоряженияНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СтрокаПункт = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока);
СтрокаЗадание = СтрокаЗаданиеПоСтрокеПункта(СтрокаПункт);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗаданиеНаПеревозку", СтрокаЗадание.Ссылка);
ПараметрыФормы.Вставить("ТранспортноеСредство", СтрокаЗадание.Транспорт);
ПараметрыФормы.Вставить("ВесЗадания", СтрокаЗадание.Вес);
ПараметрыФормы.Вставить("ОбъемЗадания", СтрокаЗадание.Объем);
ПараметрыФормы.Вставить("ДатаВремяРейсаПланС", СтрокаЗадание.ВремяС);
ПараметрыФормы.Вставить("ВидДоставки", ВидДоставки);
ПараметрыФормы.Вставить("АдресТоваровКДоставке", ПоместитьВХранилищеТоварыКДоставке(СтрокаЗадание.Ссылка));
Если СтрокаПункт = СтрокаЗадание Тогда
ПараметрыФормы.Вставить("АдресРаспоряжений", ПоместитьВХранилищеРаспоряжения(СтрокаЗадание.Ссылка));
Иначе
ПараметрыФормы.Вставить("АдресРаспоряжений", ПоместитьВХранилищеРаспоряжения(СтрокаПункт.КлючСвязи));
ПараметрыФормы.Вставить("Адрес", СтрокаПункт.Адрес);
ПараметрыФормы.Вставить("ВремяС", СтрокаПункт.ВремяС);
ПараметрыФормы.Вставить("ВремяПо", СтрокаПункт.ВремяПо);
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеРедактированияРаспоряжений",ЭтотОбъект);
ОткрытьФорму("Обработка.РабочееМестоМенеджераПоДоставке.Форма.ФормаРаспоряженияПоПункту",
ПараметрыФормы, ЭтотОбъект,,,,ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыРаспоряженияНаДоставку
&НаКлиенте
Процедура РаспоряженияНаДоставкуВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбраннаяСтрокаЭлементДерева = РаспоряженияНаДоставку.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ВыбраннаяСтрокаЭлементДерева.ПолучитьЭлементы().Количество() = 0 Тогда
ПоказатьЗначение(Неопределено, ВыбраннаяСтрокаЭлементДерева.Распоряжение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаДоставкуНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.РаспоряженияНаДоставку.НачалоПеретаскивания");
НачалиПеретаскивание = Истина;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаДоставкуОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.РаспоряженияНаДоставку.ОкончаниеПеретаскивания");
НачалиПеретаскивание = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаДоставкуПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.РаспоряженияНаДоставку.ПроверкаПеретаскивания");
СтандартнаяОбработка = Ложь;
ПроверитьУстановитьДопустимостьПеретаскивания(Элемент, ПараметрыПеретаскивания);
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаДоставкуПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.РаспоряженияНаДоставку.Перетаскивание");
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("ДанныеФормыЭлементДерева")
И ПараметрыПеретаскивания.Значение[0].Свойство("ПереходДаты") Тогда
УбратьСтрокиИзЗаданийКлиент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаДоставкуПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("РаспоряженияНаДоставкуПриАктивизацииСтрокиОбработчикОжидания", 0.1, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЗаданияНаПеревозкуПланируемые
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтрокиОбработчикОжидания", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.ЗаданияНаПеревозкуПланируемые.Перетаскивание");
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Число") Тогда
Если Строка <> Неопределено Тогда
ПеренестиСтрокиВнутриСпискаЗаданийФормируемыхСервер(ПараметрыПеретаскивания.Значение,Строка);
ОповеститьОСозданныхЗаданиях();
КонецЕсли;
ИначеЕсли ПараметрыПеретаскивания.Значение[0].Свойство("ВидРаспоряжения") Тогда
ПеренестиСтроки(Строка);
ИначеЕсли ПараметрыПеретаскивания.Значение[0].Свойство("КлючСвязи") Тогда
КонецЕсли;
ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтрокиОбработчикОжидания();
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Строка = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ВыбраннаяСтрока);
ЭтоГруппировка = (Строка.ПолучитьРодителя() = Неопределено);
Если ЭтоГруппировка Тогда
Если Поле.ТолькоПросмотр ИЛИ Поле.Имя = "ЗаданияНаПеревозкуПланируемыеЗона" Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФормуЗадания(Строка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПередУдалением(Элемент, Отказ)
Отказ = Истина;
КоличествоЗаписанныхЗаданий = 0;
Для Каждого ИД Из Элементы.ЗаданияНаПеревозкуПланируемые.ВыделенныеСтроки Цикл
Стр = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИД);
Если Стр.ПолучитьРодителя() = Неопределено И ЗначениеЗаполнено(Стр.Ссылка) Тогда
КоличествоЗаписанныхЗаданий = КоличествоЗаписанныхЗаданий + 1;
КонецЕсли;
КонецЦикла;
Если КоличествоЗаписанныхЗаданий > 0 Тогда
Режим = Новый СписокЗначений;
Режим.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Пометить'"));
Режим.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Не помечать, только очистить маршруты'"));
Режим.Добавить(КодВозвратаДиалога.Отмена);
Текст = НСтр("ru = 'Пометить на удаление выделенные задания на перевозку?';");
ПоказатьВопрос(Новый ОписаниеОповещения("ЗаданияНаПеревозкуПланируемыеПередУдалениемЗавершение", ЭтотОбъект), Текст, Режим);
Возврат;
Иначе
УбратьСтрокиИзЗаданийКлиент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПередУдалениемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
ПометитьЗаданияНаУдаление = Ложь;
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ПометитьЗаданияНаУдаление = Истина;
КонецЕсли;
УбратьСтрокиИзЗаданийКлиент(Ложь, ПометитьЗаданияНаУдаление);
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если Не ЗначениеЗаполнено(КэшированныеЗначения) Тогда
КэшированныеЗначения = Новый Структура("Адрес,АдресЗначенияПолей,Зона,ВремяС,ВремяПо,ДополнительнаяИнформация");
КонецЕсли;
ЗаполнитьЗначенияСвойств(КэшированныеЗначения, ТекущиеДанные);
Если РедактироватьАдресаДоставкиТолькоВДиалоге
Или ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
Элементы.ЗаданияНаПеревозкуПланируемыеАдрес.РедактированиеТекста = Ложь;
Иначе
Элементы.ЗаданияНаПеревозкуПланируемыеАдрес.РедактированиеТекста = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если Не (ТекущиеДанные = Неопределено)
И Не ОбщегоНазначенияУТКлиентСервер.СтруктурыРавны(КэшированныеЗначения, Элемент.ТекущиеДанные,
"Адрес,АдресЗначенияПолей,Зона,ВремяС,ВремяПо,ДополнительнаяИнформация") Тогда
УстановитьМодифицированность(ТекущиеДанные,ЗаданияМодифицированы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.ЗаданияНаПеревозкуПланируемые.НачалоПеретаскивания");
НачалиПеретаскивание = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.ЗаданияНаПеревозкуПланируемые.ОкончаниеПеретаскивания");
НачалиПеретаскивание = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Элемент.ЗаданияНаПеревозкуПланируемые.ПроверкаПеретаскивания");
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеВремяПриИзменении(Элемент)
Если Элемент = Элементы.ЗаданияНаПеревозкуПланируемыеВремяС
ИЛИ Элемент = Элементы.ЗаданияНаПеревозкуПланируемыеДатаС Тогда
ВремяСВремяПо = "ВремяС";
ВремяСВремяПоБезДаты = "ВремяСБезДаты"
Иначе
ВремяСВремяПо = "ВремяПо";
ВремяСВремяПоБезДаты = "ВремяПоБезДаты";
КонецЕсли;
ТекСтрока = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
ТекСтрока[ВремяСВремяПо] = НачалоДня(ТекСтрока[ВремяСВремяПо])
+ Час(ТекСтрока[ВремяСВремяПоБезДаты])*60*60 + Минута(ТекСтрока[ВремяСВремяПоБезДаты])*60;
ПроверитьСоответствиеВремени(ВремяСВремяПо);
Родитель = ТекСтрока.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
ЗаданияПроверитьОтсортироватьЗаполнитьПризнакиПерехода();
Иначе
ТекВетка = Родитель.ПолучитьЭлементы();
ТекИндекс = ТекВетка.Индекс(ТекСтрока);
Если (ТекИндекс > 0 И ТекСтрока.ВремяС <= ТекВетка[ТекИндекс-1].ВремяС)
ИЛИ (ТекИндекс < ТекВетка.Количество()-1 И ТекСтрока.ВремяС >= ТекВетка[ТекИндекс+1].ВремяС) Тогда
ЗаданияОтсортироватьПеренумероватьЗаполнитьПризнакиПереходаДат();
Иначе
ИДСтрокиНазначения = ТекСтрока.ПолучитьИдентификатор();
ЗаполнитьПризнакиПереходаДат(ИДСтрокиНазначения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеАдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("Адрес");
ДоставкаТоваровКлиент.ОткрытьФормуВыбораАдресаИОбработатьРезультат(
Элемент,
Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные,
ИменаРеквизитовАдресовДоставки,
СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеАдресОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("ЭлементСпискаЗначений") Тогда
СтандартнаяОбработка = Ложь;
Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные.Адрес = ВыбранноеЗначение.Представление;
Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные.АдресЗначенияПолей = ВыбранноеЗначение.ЗначенияПолей;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеТранспортНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Список = Новый СписокЗначений;
Список.Добавить(НСтр("ru = 'Транспортное средство'"));
Список.Добавить(НСтр("ru = 'Тип транспортного средства'"));
ПоказатьВыборИзСписка(Новый ОписаниеОповещения("ЗаданияНаПеревозкуПланируемыеТранспортНачалоВыбораЗавершение", ЭтотОбъект), Список, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеТранспортНачалоВыбораЗавершение(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
ВыбранныйТип = ВыбранныйЭлемент;
Если ВыбранныйТип = Неопределено Тогда
Возврат;
ИначеЕсли ВыбранныйТип.Значение = НСтр("ru = 'Транспортное средство'") Тогда
ОткрытьФорму("Справочник.ТранспортныеСредства.Форма.ФормаВыбора",, ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
ОткрытьФорму("Справочник.ТипыТранспортныхСредств.Форма.ФормаВыбора",, ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеТранспортПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
Если ТекущиеДанные.Транспорт <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ТекущиеДанные, РеквизитыТС(ТекущиеДанные.Транспорт));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеТранспортОчистка(Элемент, СтандартнаяОбработка)
Если Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеДополнительнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ЗаданияНаПеревозкуПланируемыеДополнительнаяИнформацияНачалоВыбораЗавершение", ЭтотОбъект);
ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста(
Оповещение,
Элементы.ЗаданияНаПеревозкуПланируемыеДополнительнаяИнформация.ТекстРедактирования,
Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные.ДополнительнаяИнформация);
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеДополнительнаяИнформацияНачалоВыбораЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия <> Неопределено Тогда
ТекущиеДанные = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
ТекущиеДанные.ДополнительнаяИнформация = РезультатЗакрытия;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура УстановитьСтатусЗаданийНаПеревозку(Команда)
ВыделенныеСсылки = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.ЗаданияНаПеревозкуВРаботе);
Если ВыделенныеСсылки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ИмяСтатуса = СоответствиеКомандСтатусам().Получить(Команда.Имя);
Если Команда.Имя = "УстановитьСтатусЗакрытоПолностьюДоставленныхЗаданий" Тогда
ДополнительныеПараметры.Вставить("КонтрольДоставки", Истина);
КонецЕсли;
ЗаголовокСтатуса = ПредопределенноеЗначение("Перечисление.СтатусыЗаданийНаПеревозку." + ИмяСтатуса);
ОчиститьСообщения();
ВыделенныеСсылки = Элементы.ЗаданияНаПеревозкуВРаботе.ВыделенныеСтроки;
КоличествоОбработанных = ОбщегоНазначенияУТВызовСервера.УстановитьСтатусДокументов(ВыделенныеСсылки, ИмяСтатуса, ДополнительныеПараметры);
ОбщегоНазначенияУТКлиент.ОповеститьПользователяОбУстановкеСтатуса(Элементы.ЗаданияНаПеревозкуВРаботе,
КоличествоОбработанных, ВыделенныеСсылки.Количество(), ЗаголовокСтатуса);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСпискиДоставки(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Команда.ОбновитьСпискиДоставки");
ОбновитьСпискиДляТекущейСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиСтрокиВЗадание(Команда)
ПеренестиСтроки();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьЗадание(Команда)
ТекущиеДанные = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат
КонецЕсли;
ОткрытьФормуЗадания(СтрокаЗаданиеПоСтрокеПункта(Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные));
КонецПроцедуры
&НаКлиенте
Процедура УбратьСтрокиИзЗаданий(Команда)
ОчиститьСообщения();
Если Элементы.ЗаданияНаПеревозкуПланируемые.ВыделенныеСтроки.Количество() > 0 Тогда
УбратьСтрокиИзЗаданийКлиент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияВверх(Команда)
ТекущиеДанные = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат
КонецЕсли;
Родитель = ТекущиеДанные.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
Возврат
КонецЕсли;
Индекс = Родитель.ПолучитьЭлементы().Индекс(ТекущиеДанные);
Ветка = Родитель.ПолучитьЭлементы();
Если Индекс <> 0 Тогда
Ветка.Сдвинуть(Индекс, -1);
Ветка[Индекс-1].ПорядокВМаршруте = Индекс;
Ветка[Индекс].ПорядокВМаршруте = Индекс+1;
Ветка[Индекс-1].ВремяС = Ветка[Индекс].ВремяС;
Ветка[Индекс-1].ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Ветка[Индекс].ВремяС);
Ветка[Индекс-1].ВремяПо = Ветка[Индекс].ВремяС;
Ветка[Индекс-1].ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Ветка[Индекс].ВремяС);
Если Ветка[Индекс].ПереходДаты = 1 Тогда
Ветка[Индекс-1].ПереходДаты = 1;
Иначе
Ветка[Индекс-1].ПереходДаты = 0;
КонецЕсли;
Если Ветка[Индекс].ПереходДаты > 1 Тогда
Ветка[Индекс].ПереходДаты = 2;
Иначе
Ветка[Индекс].ПереходДаты = 0;
КонецЕсли;
Если Ветка.Количество() > Индекс + 1 Тогда
Ветка[Индекс+1].ПереходДаты = 0;
Если НачалоДня(Ветка[Индекс+1].ВремяС) <> НачалоДня(Ветка[Индекс].ВремяС) Тогда
Ветка[Индекс+1].ПереходДаты = 1;
КонецЕсли;
Если НачалоДня(Ветка[Индекс+1].ВремяС) <> НачалоДня(Ветка[Индекс+1].ВремяПо) Тогда
Ветка[Индекс+1].ПереходДаты = Ветка[Индекс+1].ПереходДаты + 2;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьМодифицированность(Родитель, ЗаданияМодифицированы);
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияВниз(Команда)
ТекущиеДанные = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат
КонецЕсли;
Родитель = ТекущиеДанные.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
Возврат
КонецЕсли;
Индекс = Родитель.ПолучитьЭлементы().Индекс(ТекущиеДанные);
Ветка = Родитель.ПолучитьЭлементы();
Если Индекс <> Ветка.Количество()-1 Тогда
Ветка.Сдвинуть(Индекс, 1);
Ветка[Индекс+1].ПорядокВМаршруте = Индекс+2;
Ветка[Индекс].ПорядокВМаршруте = Индекс+1;
Ветка[Индекс+1].ВремяС = Ветка[Индекс].ВремяПо;
Ветка[Индекс+1].ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Ветка[Индекс+1].ВремяС);
Ветка[Индекс+1].ВремяПо = Ветка[Индекс].ВремяПо;
Ветка[Индекс+1].ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Ветка[Индекс+1].ВремяПо);
Если Ветка[Индекс+1].ПереходДаты = 1 Тогда
Ветка[Индекс].ПереходДаты = 1;
КонецЕсли;
Ветка[Индекс+1].ПереходДаты = 0;
Если НачалоДня(Ветка[Индекс].ВремяС) <> НачалоДня(Ветка[Индекс].ВремяПо) Тогда
Ветка[Индекс].ПереходДаты = 2;
КонецЕсли;
КонецЕсли;
УстановитьМодифицированность(Родитель, ЗаданияМодифицированы);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьВчерашнимиРейсами(Команда)
ОчиститьСообщения();
ЗаполнитьПрошлымиРейсамиСервер();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьРейсамиНаДату(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Заголовок",НСтр("ru='Выберите дату формирования эаданий на перевозку'"));
ПараметрыФормы.Вставить("ПоясняющийТекст",НСтр("ru='Задания на выбранную дату будут использованы в качестве шаблона для заполнения списка.'"));
ОчиститьСообщения();
ОткрытьФорму("ОбщаяФорма.ВыборДаты",ПараметрыФормы,,,,, Новый ОписаниеОповещения("ЗаполнитьРейсамиНаДатуЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьРейсамиНаДатуЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыбраннаяДата = Результат;
Если ЗначениеЗаполнено(ВыбраннаяДата) Тогда
ЗаполнитьПрошлымиРейсамиСервер(ВыбраннаяДата);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗаданияНаПеревозку(Команда)
ОткрытьПодборТранспорта();
КонецПроцедуры
&НаКлиенте
Процедура РазнестиРаспоряженияПоВремени(Команда)
ОчиститьСообщения();
ТекущиеДанные = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат
КонецЕсли;
Если ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
Текст = НСтр("ru = 'Разбиение строки возможно только для строк-адресов'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Текст);
Возврат;
КонецЕсли;
Если НЕ ПроверитьРазбитьПунктДоставкиСервер() Тогда
АдресРаспоряжений = ПоместитьВХранилищеРаспоряжения(ТекущиеДанные.КлючСвязи);
ПараметрыФормы = Новый Структура("АдресРаспоряжений", АдресРаспоряжений);
ОткрытьФорму(ОбработкаПолноеИмя + ".Форма.ФормаВыбораРаспоряжений", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбъединитьПоВремени(Команда)
ОчиститьСообщения();
Если Элементы.ЗаданияНаПеревозкуПланируемые.ВыделенныеСтроки.Количество() < 2 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Для объединения необходимо выделить хотя бы 2 строки.'"));
ИначеЕсли НЕ ОбъединитьПоВремениСервер() Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не удалось объединить выделенные строки: выберите строки с одинаковыми адресами.'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗаданиеНаПеревозку(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.РабочееМестоМенеджераПоДоставке.Форма.Команда.СоздатьЗаданиеНаПеревозку");
СтруктураЗначенияЗаполнения = Новый Структура;
СтруктураЗначенияЗаполнения.Вставить("Склад", Склад);
СтруктураЗначенияЗаполнения.Вставить("Операция", ВидДоставки);
ОткрытьФорму("Документ.ЗаданиеНаПеревозку.ФормаОбъекта", Новый Структура("ЗначенияЗаполнения", СтруктураЗначенияЗаполнения));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаЗаданияНаПеревозкуВРаботе Тогда
Список = Элементы.ЗаданияНаПеревозкуВРаботе;
ИначеЕсли Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаДокументыДляПеревозчиков Тогда
Список = Элементы.ДокументыДляПеревозчиков;
КонецЕсли;
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Список);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаЗаданияНаПеревозкуВРаботе Тогда
Список = Элементы.ЗаданияНаПеревозкуВРаботе;
ИначеЕсли Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаДокументыДляПеревозчиков Тогда
Список = Элементы.ДокументыДляПеревозчиков;
КонецЕсли;
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Список, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
Список = Неопределено;
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаЗаданияНаПеревозкуВРаботе Тогда
Список = Элементы.ЗаданияНаПеревозкуВРаботе;
ИначеЕсли Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаДокументыДляПеревозчиков Тогда
Список = Элементы.ДокументыДляПеревозчиков;
КонецЕсли;
Если Список <> Неопределено Тогда
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Список);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьПоручениеЭкспедитору(Команда)
ПараметрыФормы = Новый Структура("Склад", Склад);
ОткрытьФорму("Документ.ПоручениеЭкспедитору.Форма.ФормаДокумента", ПараметрыФормы, ЭтотОбъект,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьИзДоставки(Команда)
ИсключитьИзДоставкиНаСервере();
ОбновитьСпискиДляТекущейСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура ВернутьИсключенныеВДоставку(Команда)
ПараметрыФормы = Новый Структура("Склад", Склад);
ОткрытьФорму(ОбработкаПолноеИмя + ".Форма.ФормаОтменыИсключенияИзДоставки", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
#Область РаспоряженияНаДоставку
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспоряженияНаДоставкуАдрес.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.Зона");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.ЗоныДоставки.ПустаяСсылка();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.ОформлениеСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 5;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , , Истина));
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<зона не указана>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспоряженияНаДоставкуКартинка.Имя);
ГруппаИЛИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.КартинкаТипаИсполнителя");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
ОтборЭлемента = ГруппаИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.ОформлениеСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 5;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспоряженияНаДоставку.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.ОформлениеСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 5;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаШапкиОтчета);
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , Истина));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспоряженияНаДоставку.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.ОформлениеСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаГруппировкиОтчета1);
#КонецОбласти
#Область ЗаданияНаПеревозкуПланируемые
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемые.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.КлючСвязи");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ReportGroup1BackColor);
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , Истина));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеДатаС.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ПереходДаты");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = 1;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ПереходДаты");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = 3;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеДатаПо.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ПереходДаты");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = 2;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ПереходДаты");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = 3;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеПеревозчик.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеТранспортПеревозчика.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ЭтоНашаДоставка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеТранспорт.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеВместимость.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ЭтоНашаДоставка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеТранспорт.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеВместимость.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеПеревозчик.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеТранспортПеревозчика.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.КлючСвязи");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеСклад.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.КлючСвязи");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеАдрес.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.КлючСвязи");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеЗона.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.КлючСвязи");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеВес.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.Вес");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ГрузоподъемностьВЕдПользователя");
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.КлючСвязи");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.NegativeTextColor);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуПланируемыеОбъем.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.Объем");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.ВместимостьВЕдПользователя");
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуПланируемые.КлючСвязи");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.NegativeTextColor);
#КонецОбласти
#Область ЗаданияНаПеревозкуВРаботе
СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "ЗаданияНаПеревозкуВРаботе.Дата", Элементы.ЗаданияНаПеревозкуВРаботеДата.Имя);
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуВРаботеДатаВремяРейсаПланПо.Имя);
ПредставлениеЭлемента = НСтр("ru = 'Представление даты сегодня: ""09:46""'");
ЭлементУсловногоОформления.Представление = ПредставлениеЭлемента;
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаПланПо");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня);
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаПланПо");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоСледующегоДня);
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаПланС");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДФ=ЧЧ:мм");
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуВРаботеДатаВремяРейсаФактПо.Имя);
ПредставлениеЭлемента = НСтр("ru = 'Представление даты сегодня: ""09:46""'");
ЭлементУсловногоОформления.Представление = ПредставлениеЭлемента;
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаФактПо");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня);
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаФактПо");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоСледующегоДня);
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаФактС");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДФ=ЧЧ:мм");
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуВРаботеДатаВремяРейсаПланС.Имя);
ПредставлениеЭлемента = НСтр("ru = 'Представление плановой даты окончания сегодня: ""09:46""'");
ЭлементУсловногоОформления.Представление = ПредставлениеЭлемента;
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаПланС");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня);
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаПланС");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоСледующегоДня);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДФ=ЧЧ:мм");
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаданияНаПеревозкуВРаботеДатаВремяРейсаФактС.Имя);
ПредставлениеЭлемента = НСтр("ru = 'Представление плановой даты окончания сегодня: ""09:46""'");
ЭлементУсловногоОформления.Представление = ПредставлениеЭлемента;
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаФактС");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня);
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаданияНаПеревозкуВРаботе.ДатаВремяРейсаФактС");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоСледующегоДня);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДФ=ЧЧ:мм");
#КонецОбласти
КонецПроцедуры
#Область ШтрихкодыИТорговоеОборудование
&НаСервере
Функция СсылкаНаЭлементСпискаПоШтрихкоду(Штрихкод)
Возврат ШтрихкодированиеПечатныхФорм.ПолучитьСсылкуПоШтрихкодуТабличногоДокумента(Штрихкод);
КонецФункции
&НаКлиенте
Процедура ОбработатьШтрихкоды(Данные)
МассивСсылок = СсылкаНаЭлементСпискаПоШтрихкоду(Данные.Штрихкод);
Если МассивСсылок.Количество() > 0 Тогда
Если ТипЗнч(МассивСсылок[0]) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница <> Элементы.СтраницаЗаданияНаПеревозкуВРаботе Тогда
Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаЗаданияНаПеревозкуВРаботе;
ОбновитьСпискиДляТекущейСтраницы();
КонецЕсли;
Элементы.ЗаданияНаПеревозкуВРаботе.ТекущаяСтрока = МассивСсылок[0];
ИначеЕсли ЗначениеЗаполнено(Склад)
И Элементы.СтраницаДокументыДляПеревозчиков.Видимость = Истина Тогда
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница <> Элементы.СтраницаДокументыДляПеревозчиков Тогда
Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаДокументыДляПеревозчиков;
ОбновитьСпискиДляТекущейСтраницы();
КонецЕсли;
НайденныеСтроки = ДокументыДляПеревозчиков.НайтиСтроки(Новый Структура("Ссылка",МассивСсылок[0]));
Если НайденныеСтроки.Количество() > 0 Тогда
Элементы.ДокументыДляПеревозчиков.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор();
КонецЕсли;
КонецЕсли;
ПоказатьЗначение(Неопределено, МассивСсылок[0]);
Иначе
ШтрихкодированиеПечатныхФормКлиент.ОбъектНеНайден(Данные.Штрихкод);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСпискиВыбора()
ЗначенияПеречисления = Метаданные.Перечисления.СтатусыЗаданийНаПеревозку.ЗначенияПеречисления;
СписокВыбора = Элементы.Статус.СписокВыбора;
СписокВыбора.Очистить();
СписокВыбора.Добавить("ВсеВРаботе", НСтр("ru = 'Все в работе'"));
СписокВыбора.Добавить(ЗначенияПеречисления.Формируется.Имя, ЗначенияПеречисления.Формируется.Синоним);
СписокВыбора.Добавить(ЗначенияПеречисления.КПогрузке.Имя, ЗначенияПеречисления.КПогрузке.Синоним);
СписокВыбора.Добавить(ЗначенияПеречисления.Отправлено.Имя, ЗначенияПеречисления.Отправлено.Синоним);
СписокВыбора.Добавить(ЗначенияПеречисления.Закрыто.Имя, ЗначенияПеречисления.Закрыто.Синоним);
СписокВыбора.Добавить("", НСтр("ru = 'Все'"));
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Процедура СкладПриИзмененииСервер(ТекстОшибки = "")
СкладЗаполнен = ЗначениеЗаполнено(Склад);
Элементы.ГлавныеСтраницы.Доступность = СкладЗаполнен;
Элементы.ОбновитьСпискиДоставки.Доступность = СкладЗаполнен;
Если СкладЗаполнен Тогда
Если ВидДоставки = Перечисления.ВидыДоставки.СоСклада Тогда
ЕстьОрдерныйСклад = СкладыСервер.ЕстьОрдерныйНаОтгрузкуСклад(Склад);
ЕстьНеОрдерныйСклад = СкладыСервер.ЕстьНеОрдерныйНаОтгрузкуСклад(Склад);
Иначе
ЕстьОрдерныйСклад = СкладыСервер.ЕстьОрдерныйНаПоступлениеСклад(Склад);
ЕстьНеОрдерныйСклад = СкладыСервер.ЕстьНеОрдерныйНаПоступлениеСклад(Склад);
КонецЕсли;
ВыбранаГруппа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Склад, "ЭтоГруппа");
ВыбранаГруппа = ?(ВыбранаГруппа = Неопределено, Ложь, ВыбранаГруппа);
Если ВыбранаГруппа
И Не ЕстьОрдерныйСклад
И Не ЕстьНеОрдерныйСклад Тогда
Склад = СкладБыл;
ТекстОшибки = НСтр("ru = 'Выбранная группа не содержит складов.'");
Возврат;
КонецЕсли;
КонецЕсли;
УстановитьВидимостьСкладов();
ДоставкаТоваров.ЗаполнитьСписокВыбораПеревозчиков(Элементы,,Склад);
СохранитьЗаданияОбновитьСписки();
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьМодифицированность(СтрокаДерева, ЗаданияМодифицированы, УстанавливаемоеЗначение = Истина)
СтрокаДерева.Модифицирован = УстанавливаемоеЗначение;
Родитель = СтрокаДерева.ПолучитьРодителя();
Если Родитель <> Неопределено Тогда
Родитель.Модифицирован = УстанавливаемоеЗначение;
КонецЕсли;
ЗаданияМодифицированы = Истина;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройкиИЗаданияНаПеревозкуСервер()
Настройки = Новый Соответствие;
Настройки.Вставить("Склад", Склад);
Настройки.Вставить("ДатаСохранения", ТекущаяДатаСеанса());
Настройки.Вставить("ДатаРаспоряжений", ДатаРаспоряжений);
Настройки.Вставить("Зона", Зона);
Настройки.Вставить("Статус", Статус);
Настройки.Вставить("Перевозчик", Перевозчик);
Настройки.Вставить("ПериодДокументовДляПеревозчиков", ПериодДокументовДляПеревозчиков);
Настройки.Вставить("ИмяТекущейСтраницы", Элементы.ГлавныеСтраницы.ТекущаяСтраница.Имя);
Настройки.Вставить("ВидДоставки", ВидДоставки);
Настройки.Вставить("ОтборПоТипуИсполнителей", ОтборПоТипуИсполнителей);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.РабочееМестоМенеджераПоДоставке", "Настройки", Настройки);
СохранитьЗаданияНаПеревозкуСервер();
КонецПроцедуры
&НаСервере
Процедура ВосстановитьНастройки()
ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.РабочееМестоМенеджераПоДоставке", "Настройки");
Если ТипЗнч(ЗначениеНастроек) = Тип("Соответствие") Тогда
Склад = ЗначениеНастроек.Получить("Склад");
ДатаСохранения = ЗначениеНастроек.Получить("ДатаСохранения");
ДатаРаспоряжений = ЗначениеНастроек.Получить("ДатаРаспоряжений");
Зона = ЗначениеНастроек.Получить("Зона");
Статус = ЗначениеНастроек.Получить("Статус");
Перевозчик = ЗначениеНастроек.Получить("Перевозчик");
ПериодДокументовДляПеревозчиков = ЗначениеНастроек.Получить("ПериодДокументовДляПеревозчиков");
ИмяТекущейСтраницы = ЗначениеНастроек.Получить("ИмяТекущейСтраницы");
ВидДоставки = ЗначениеНастроек.Получить("ВидДоставки");
ОтборПоТипуИсполнителей = ЗначениеНастроек.Получить("ОтборПоТипуИсполнителей");
Если Не ЗначениеЗаполнено(ПериодДокументовДляПеревозчиков.ДатаНачала) Тогда
ПериодДокументовДляПеревозчиков.Вариант = ВариантСтандартногоПериода.Последние7Дней;
ИначеЕсли ПериодДокументовДляПеревозчиков.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда
ПериодДокументовДляПеревозчиков.ДатаОкончания = Дата(1,1,1);
КонецЕсли;
Если (НачалоДня(ДатаСохранения) < НачалоДня(ДатаРаспоряжений)) Тогда
ДатаРаспоряжений = Макс(ТекущаяДатаСеанса + 60*60*24, ДатаРаспоряжений)
ИначеЕсли ЗначениеЗаполнено(ДатаРаспоряжений) Тогда
ДатаРаспоряжений = ТекущаяДатаСеанса
КонецЕсли;
Если ЗначениеЗаполнено(ИмяТекущейСтраницы)
И Элементы.Найти(ИмяТекущейСтраницы) <> Неопределено Тогда
Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы[ИмяТекущейСтраницы];
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ВидДоставки) Тогда
ВидДоставки = Перечисления.ВидыДоставки.СоСклада;
КонецЕсли;
НастроитьФормуПоВидуДоставки();
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияРазвернуть()
Если Не ЗонаГруппаИлиПустая Тогда
Возврат;
КонецЕсли;
Для каждого СтрокаДерева Из РаспоряженияНаДоставку.ПолучитьЭлементы() Цикл
Элементы.РаспоряженияНаДоставку.Развернуть(СтрокаДерева.ПолучитьИдентификатор());
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияПланируемыеРазвернуть()
Для каждого СтрокаДерева Из ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы() Цикл
Элементы.ЗаданияНаПеревозкуПланируемые.Развернуть(СтрокаДерева.ПолучитьИдентификатор());
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиСтроки(ИДСтрокиНазначения = Неопределено)
ОчиститьСообщения();
Если ИДСтрокиНазначения = Неопределено Тогда
ИДСтрокиНазначения = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока;
КонецЕсли;
Если Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки.Количество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Не выбраны распоряжения для переноса.'"));
Возврат
КонецЕсли;
Если ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Количество() > 0 Тогда
ПеренестиСтрокиЗавершение(ИДСтрокиНазначения);
Иначе
Режим = Новый СписокЗначений;
Режим.Добавить(КодВозвратаДиалога.Да, НСтр("ru='Создать'"));
Режим.Добавить(КодВозвратаДиалога.Отмена);
Текст = НСтр("ru = 'Список формируемых заданий не заполнен. Создать задания на перевозку?';");
ПоказатьВопрос(Новый ОписаниеОповещения("ПослеВопросаОСозданииЗаданий", ЭтотОбъект), Текст, Режим);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаОСозданииЗаданий(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ОткрытьПодборТранспорта(Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборТранспорта(ПеренестиРаспоряженияВНовоеЗадание = Ложь)
ОчиститьСообщения();
АдресЗаданийФормируемых = ПоместитьЗаданияВХранилище();
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ДатаОтбор", ДатаРаспоряжений);
ПараметрыФормы.Вставить("АдресЗаданийФормируемых", АдресЗаданийФормируемых);
ПараметрыФормы.Вставить("Склад", Склад);
ПараметрыФормы.Вставить("ИтогоВес", ИтогоВес);
ПараметрыФормы.Вставить("ИтогоОбъем", ИтогоОбъем);
ПараметрыФормы.Вставить("ЗаданиеБудетВыполнять", ОтборПоТипуИсполнителей);
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПодбораТранспорта",
ЭтотОбъект, Новый Структура("ПеренестиРаспоряженияВНовоеЗадание",ПеренестиРаспоряженияВНовоеЗадание));
ОткрытьФорму(ОбработкаПолноеИмя + ".Форма.ФормаВыбораТранспорта", ПараметрыФормы, ЭтотОбъект,,,,
ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПодбораТранспорта(Результат, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
ДобавитьНовыеЗаданияСервер(Результат);
Если ДополнительныеПараметры.ПеренестиРаспоряженияВНовоеЗадание
И ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Количество() > 0 Тогда
ПеренестиСтрокиЗавершение(ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы()[0].ПолучитьИдентификатор());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьНовыеЗаданияСервер(АдресНовыхЗаданийВХранилище);
ТаблицаНовыхЗаданий = ПолучитьИзВременногоХранилища(АдресНовыхЗаданийВХранилище);
ТаблицаНовыхЗаданий.Сортировать("ВремяС, ВремяПо");
КоллекцияЗаданий = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы();
Индекс = 0;
ПерваяДобавленнаяСтрока = Истина;
Для Каждого Стр Из ТаблицаНовыхЗаданий Цикл
Пока Индекс < КоллекцияЗаданий.Количество()
И (КоллекцияЗаданий[Индекс].ВремяС < Стр.ВремяС
ИЛИ (КоллекцияЗаданий[Индекс].ВремяС = Стр.ВремяС
И КоллекцияЗаданий[Индекс].ВремяПо < Стр.ВремяПо)) Цикл
Индекс = Индекс + 1;
КонецЦикла;
НоваяСтр = КоллекцияЗаданий.Вставить(Индекс);
ЗаполнитьЗначенияСвойств(НоваяСтр, Стр);
НоваяСтр.ВидДоставки = ВидДоставки;
НоваяСтр.Склад = Склад;
НоваяСтр.Транспорт = Стр.Ссылка;
НоваяСтр.Модифицирован = Истина;
Если НоваяСтр.ЗаданиеВыполняет = Перечисления.ТипыИсполнителейЗаданийНаПеревозку.НашаТранспортнаяСлужба Тогда
НоваяСтр.ЭтоНашаДоставка = 1;
Иначе
НоваяСтр.ЭтоНашаДоставка = 0;
КонецЕсли;
ЗаполнитьЗначенияСвойств(НоваяСтр, РеквизитыТС(Стр.Ссылка));
Если ПерваяДобавленнаяСтрока Тогда
ПерваяДобавленнаяСтрока = Ложь;
Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока = НоваяСтр.ПолучитьИдентификатор();
КонецЕсли;
Если Не ЗначениеЗаполнено(НоваяСтр.ПорядокВМаршруте) Тогда
НоваяСтр.ПорядокВМаршруте = "*";
КонецЕсли;
КонецЦикла;
ЗаданияМодифицированы = Истина;
ЗаполнитьПризнакиПереходаДат();
Элементы.ЗаданияНаПеревозкуПланируемые.Обновить();
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиСтрокиЗавершение(ИДСтрокиНазначения)
Если ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Количество() = 1 Тогда
ИДСтрокиНазначения = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы()[0].ПолучитьИдентификатор();
КонецЕсли;
Если ИДСтрокиНазначения = Неопределено Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Не выбрана строка назначения в списке заданий на перевозку.'"));
Возврат
КонецЕсли;
РаспоряженияСОсобымиУсловиями = ПеренестиСтрокиСервер(ИДСтрокиНазначения);
ОповеститьОСозданныхЗаданиях();
Элементы.ЗаданияНаПеревозкуПланируемые.Развернуть(ИДСтрокиНазначения);
Если РаспоряженияСОсобымиУсловиями.Количество() > 0 Тогда
ПараметрыФормы = Новый Структура("Распоряжения", РаспоряженияСОсобымиУсловиями);
ОткрытьФорму(ОбработкаПолноеИмя + ".Форма.ФормаПредупреждения", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтрокиОбработчикОжидания();
КонецПроцедуры
&НаСервере
Процедура ОбновитьДокументыДляПеревозчиковСервер()
ДокументыДляПеревозчиков.Очистить();
Если НЕ ЗначениеЗаполнено(Склад) Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапросаДокументыДляПеревозчиков());
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Перевозчик", Перевозчик);
Запрос.УстановитьПараметр("ПеревозчикНеЗаполнен", Не ЗначениеЗаполнено(Перевозчик));
Запрос.УстановитьПараметр("ДатаНачала", ПериодДокументовДляПеревозчиков.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ПериодДокументовДляПеревозчиков.ДатаОкончания);
Запрос.УстановитьПараметр("БезДатыНачала", Не ЗначениеЗаполнено(ПериодДокументовДляПеревозчиков.ДатаНачала));
Запрос.УстановитьПараметр("БезДатыОкончания", Не ЗначениеЗаполнено(ПериодДокументовДляПеревозчиков.ДатаОкончания));
Запрос.УстановитьПараметр("СиламиПеревозчикаСоСклада", Перечисления.СпособыДоставки.СиламиПеревозчика);
Результат = Запрос.Выполнить().Выгрузить();
ДокументыДляПеревозчиков.Загрузить(Результат);
КонецПроцедуры
&НаСервере
Функция ТекстЗапросаДокументыДляПеревозчиков()
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ТИПЗНАЧЕНИЯ(РаспоряженияНаДоставку.Распоряжение) КАК ВидДокумента,
| РаспоряженияНаДоставку.Распоряжение КАК Ссылка,
| РаспоряженияНаДоставку.Дата КАК Дата,
| РаспоряженияНаДоставку.ПолучательОтправитель,
| РаспоряженияНаДоставку.Адрес КАК АдресДоставки,
| РаспоряженияНаДоставку.Перевозчик КАК Перевозчик,
| РаспоряженияНаДоставку.Номер КАК Номер,
| РаспоряженияНаДоставку.Склад КАК Склад,
| ВЫРАЗИТЬ(РаспоряженияНаДоставку.ДополнительнаяИнформация КАК СТРОКА(1000)) КАК ДополнительнаяИнформация
|ИЗ
| РегистрСведений.СостоянияИРеквизитыДоставки КАК РаспоряженияНаДоставку
|ГДЕ
| (РаспоряженияНаДоставку.Перевозчик = &Перевозчик
| ИЛИ &ПеревозчикНеЗаполнен)
| И РаспоряженияНаДоставку.СпособДоставки = &СиламиПеревозчикаСоСклада
| И РаспоряженияНаДоставку.Склад В ИЕРАРХИИ(&Склад)
| И (РаспоряженияНаДоставку.Дата <= &ДатаОкончания ИЛИ &БезДатыОкончания)
| И (РаспоряженияНаДоставку.Дата >= &ДатаНачала ИЛИ &БезДатыНачала)
| УПОРЯДОЧИТЬ ПО РаспоряженияНаДоставку.Дата";
Возврат ТекстЗапроса;
КонецФункции
&НаСервере
Процедура УстановитьЗаголовкиКолонокВесОбъемСервер()
ТекстВес = НСтр("ru = 'Вес,'") + " " + ЕдиницаИзмеренияВеса;
ТекстОбъем = НСтр("ru = 'Объем,'") + " " + ЕдиницаИзмеренияОбъема;
Элементы.РаспоряженияНаДоставкуВес.Заголовок = ТекстВес;
Элементы.РаспоряженияНаДоставкуОбъем.Заголовок = ТекстОбъем;
Элементы.ЗаданияНаПеревозкуПланируемыеВес.Заголовок = ТекстВес;
Элементы.ЗаданияНаПеревозкуПланируемыеОбъем.Заголовок = ТекстОбъем;
КонецПроцедуры
&НаСервере
Функция ПеренестиСтрокиСервер(ИДСтрокиНазначения)
МассивИДВыбранныхСтрок = Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки;
СтрокаНазначения = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИДСтрокиНазначения);
СтрокаЗадание = СтрокаЗаданиеПоСтрокеПункта(СтрокаНазначения);
ПунктыТекущегоЗаданияНаПеревозку = СтрокаЗадание.ПолучитьЭлементы();
Если Не ПопытатьсяЗаблокироватьПолучитьСсылкуПоСтрокеЗадания(СтрокаЗадание) Тогда
Возврат Новый Массив;
КонецЕсли;
Если ПроверитьСообщитьЗаданиеИзменено(СтрокаЗадание) Тогда
Возврат Новый Массив;
КонецЕсли;
РаспоряженияКорневыеСтроки = РаспоряженияНаДоставку.ПолучитьЭлементы();
ИзмененныеДобавленныеСтрокиРаспоряжений = Новый Массив;
РаспоряженияСОсобымиУсловиями = Новый Массив;
Для каждого ИДСтроки Из МассивИДВыбранныхСтрок Цикл
ТекущаяСтрокаРаспоряжений = РаспоряженияНаДоставку.НайтиПоИдентификатору(ИДСтроки);
Если ТекущаяСтрокаРаспоряжений = Неопределено Тогда
Продолжить;
КонецЕсли;
ВершинаТекущейВеткиРаспоряжений = ТекущаяСтрокаРаспоряжений.ПолучитьРодителя();
Если ВершинаТекущейВеткиРаспоряжений <> Неопределено
И МассивИДВыбранныхСтрок.Найти(ВершинаТекущейВеткиРаспоряжений.ПолучитьИдентификатор())<>Неопределено Тогда
Продолжить;
КонецЕсли;
Если ВершинаТекущейВеткиРаспоряжений = Неопределено Тогда
ТекущаяВеткаРаспоряжений = ТекущаяСтрокаРаспоряжений.ПолучитьЭлементы();
ВершинаТекущейВеткиРаспоряжений = ТекущаяСтрокаРаспоряжений;
Иначе
ТекущаяВеткаРаспоряжений = ВершинаТекущейВеткиРаспоряжений.ПолучитьЭлементы();
КонецЕсли;
КоллекцияПодчиненныхСтрок = ТекущаяСтрокаРаспоряжений.ПолучитьЭлементы();
Если КоллекцияПодчиненныхСтрок.Количество() = 0 Тогда
КоллекцияПодчиненныхСтрок = Новый Массив(1);
КоллекцияПодчиненныхСтрок[0] = ТекущаяСтрокаРаспоряжений;
Если ЗонаГруппаИлиПустая Тогда
ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Вес = ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Вес - ТекущаяСтрокаРаспоряжений.Вес;
ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Объем = ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Объем - ТекущаяСтрокаРаспоряжений.Объем;
КонецЕсли;
КонецЕсли;
ИтогоВес = ИтогоВес - ТекущаяСтрокаРаспоряжений.Вес;
ИтогоОбъем = ИтогоОбъем - ТекущаяСтрокаРаспоряжений.Объем;
СтрокаЗадание.Вес = СтрокаЗадание.Вес + ТекущаяСтрокаРаспоряжений.Вес;
СтрокаЗадание.Объем = СтрокаЗадание.Объем + ТекущаяСтрокаРаспоряжений.Объем;
Для Каждого СтрокаРаспоряжений Из КоллекцияПодчиненныхСтрок Цикл
СтрокаМаршрута = Неопределено;
СтруктураПоиска = Новый Структура("Ссылка, Склад, Распоряжение",
СтрокаЗадание.Ссылка, СтрокаРаспоряжений.Склад, СтрокаРаспоряжений.Распоряжение);
НайденныеСтроки = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(СтруктураПоиска);
РаспоряжениеУжеВЗадании = НайденныеСтроки.Количество() > 0;
Если РаспоряжениеУжеВЗадании Тогда
СтрокаРаспоряжениеВЗаданиях = НайденныеСтроки[0];
СтрокаМаршрута = СтрокаПунктМаршрутаПоКлючу(СтрокаЗадание, СтрокаРаспоряжениеВЗаданиях.КлючСвязи);
СтрокаРаспоряжениеВЗаданиях.Вес = СтрокаРаспоряжениеВЗаданиях.Вес + СтрокаРаспоряжений.Вес;
СтрокаРаспоряжениеВЗаданиях.Объем = СтрокаРаспоряжениеВЗаданиях.Объем + СтрокаРаспоряжений.Объем;
СтрокаМаршрута.Вес = СтрокаМаршрута.Вес + СтрокаРаспоряжений.Вес;
СтрокаМаршрута.Объем = СтрокаМаршрута.Объем + СтрокаРаспоряжений.Объем;
Иначе
СтрокаМаршрута = ДоставкаТоваров.ДобавитьИзменитьПунктПоРеквизитамДоставки(ПунктыТекущегоЗаданияНаПеревозку,
СтрокаРаспоряжений, СтрокаЗадание.ВремяС);
СтрокаМаршрута.Ссылка = СтрокаЗадание.Ссылка;
СтрокаМаршрута.ПереходДаты = 0;
СтрокаЗадание.КоличествоРаспоряжений = СтрокаЗадание.КоличествоРаспоряжений + 1;
СтрокаМаршрута.КоличествоРаспоряжений = СтрокаМаршрута.КоличествоРаспоряжений + 1;
КонецЕсли;
СтрокаМаршрута.ЭтоНашаДоставка = 1;
СтрокаМаршрута.АдресЗначенияПолей = СтрокаРаспоряжений.АдресДоставкиЗначенияПолей;
УстановитьМодифицированность(СтрокаМаршрута, ЗаданияМодифицированы);
КлючСвязи = СтрокаМаршрута.КлючСвязи;
ИДСтрокиНазначения = СтрокаМаршрута.ПолучитьИдентификатор();
Если Не РаспоряжениеУжеВЗадании Тогда
СтрокаРаспоряжениеВЗаданиях = Объект.РаспоряженияВЗаданияхНаПеревозку.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРаспоряжениеВЗаданиях, СтрокаРаспоряжений);
СтрокаРаспоряжениеВЗаданиях.Ссылка = СтрокаЗадание.Ссылка;
СтрокаРаспоряжениеВЗаданиях.КлючСвязи = КлючСвязи;
СтрокаРаспоряжениеВЗаданиях.ЭтоПоручениеЭкспедитору = (СтрокаРаспоряжений.Распоряжение.Метаданные() = Метаданные.Документы.ПоручениеЭкспедитору);
КонецЕсли;
ИзмененныеДобавленныеСтрокиРаспоряжений.Добавить(СтрокаРаспоряжениеВЗаданиях);
СтруктураПоиска = Новый Структура("ИдентификаторВДеревеРаспоряжений", СтрокаРаспоряжений.ПолучитьИдентификатор());
СтрокиРаспоряженийСТоварами = ТоварыРаспоряженийКДоставке.НайтиСтроки(СтруктураПоиска);
Для Каждого Стр Из СтрокиРаспоряженийСТоварами Цикл
СтрокаТоварыКДоставке = ТоварыКДоставке.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТоварыКДоставке, Стр);
СтрокаТоварыКДоставке.ЗаданиеНаПеревозку = СтрокаЗадание.Ссылка;
ТоварыРаспоряженийКДоставке.Удалить(Стр);
КонецЦикла;
Если СтрокаРаспоряжений.ОсобыеУсловияПеревозки Тогда
РаспоряженияСОсобымиУсловиями.Добавить(СтрокаРаспоряжений.Распоряжение);
КонецЕсли;
КонецЦикла;
Если ВершинаТекущейВеткиРаспоряжений = ТекущаяСтрокаРаспоряжений Тогда
РаспоряженияКорневыеСтроки.Удалить(ТекущаяСтрокаРаспоряжений);
Иначе
ТекущаяВеткаРаспоряжений.Удалить(ТекущаяСтрокаРаспоряжений);
Если ТекущаяВеткаРаспоряжений.Количество() = 0 Тогда
РаспоряженияКорневыеСтроки.Удалить(ВершинаТекущейВеткиРаспоряжений);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПеренумероватьИЗаполнитьПризнакиПереходаДатВСпискеЗаданий(ИДСтрокиНазначения);
ЗаполнитьСкладыПунктовИЗаданий(Истина);
ДоставкаТоваров.ЗаполнитьПризнакиОформленияРаспоряжений(РаспоряженияНаДоставку, ЗонаГруппаИлиПустая);
Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока = ИДСтрокиНазначения;
УстановитьДоступностьЭлементов();
ДоставкаТоваров.ЗаполнитьПризнакДоставляетсяПолностью(ТоварыКДоставке.Выгрузить((Новый Структура("ЗаданиеНаПеревозку",СтрокаЗадание.Ссылка))),
Объект.РаспоряженияВЗаданияхНаПеревозку, ИзмененныеДобавленныеСтрокиРаспоряжений);
СохранитьЗаданиеВСтроке(СтрокаЗадание);
Возврат РаспоряженияСОсобымиУсловиями;
КонецФункции
&НаСервере
Функция ПроверитьСообщитьЗаданиеИзменено(СтрокаЗадание)
НовоеЗадание = Не ЗначениеЗаполнено(СтрокаЗадание.Ссылка)
Или Не ОбщегоНазначения.СсылкаСуществует(СтрокаЗадание.Ссылка);
Если Не НовоеЗадание Тогда
ВерсияДанныхДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаЗадание.Ссылка, "ВерсияДанных");
Если ВерсияДанныхДокумента <> СтрокаЗадание.ВерсияДанных Тогда
Текст = НСтр("ru = 'Не удалось внести изменения в %Задание%, т.к. версия документа отличается от ожидаемой. Рекомендуется обновить список.'");
Текст = СтрЗаменить(Текст,"%Задание%", СтрокаЗадание.Ссылка);
ОбщегоНазначения.СообщитьПользователю(Текст, СтрокаЗадание.Ссылка);
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервере
Функция СтрокаПунктМаршрутаПоКлючу(ТекущаяСтрока, КлючСвязи)
СтрокаЗадание = СтрокаЗаданиеПоСтрокеПункта(ТекущаяСтрока);
Для Каждого Стр Из СтрокаЗадание.ПолучитьЭлементы() Цикл
Если Стр.КлючСвязи = КлючСвязи Тогда
Возврат Стр;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаСервере
Процедура ЗаполнитьСкладыПунктовИЗаданий(УчестьМодифицированность = Ложь);
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РаспоряженияВЗаданияхНаПеревозку.Склад,
| РаспоряженияВЗаданияхНаПеревозку.Распоряжение,
| РаспоряженияВЗаданияхНаПеревозку.КлючСвязи,
| РаспоряженияВЗаданияхНаПеревозку.Ссылка
|ПОМЕСТИТЬ РаспоряженияВЗаданияхНаПеревозку
|ИЗ
| &РаспоряженияВЗаданияхНаПеревозку КАК РаспоряженияВЗаданияхНаПеревозку
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СкладыПоПунктам.Склад) КАК КоличествоСкладов,
| МАКСИМУМ(СкладыПоПунктам.Склад) КАК Склад,
| СкладыПоПунктам.КлючСвязи,
| СкладыПоПунктам.Ссылка
|ИЗ
| РаспоряженияВЗаданияхНаПеревозку КАК СкладыПоПунктам
|
|СГРУППИРОВАТЬ ПО
| СкладыПоПунктам.КлючСвязи,
| СкладыПоПунктам.Ссылка
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СкладыПоЗаданиям.Склад) КАК КоличествоСкладов,
| МАКСИМУМ(СкладыПоЗаданиям.Склад) КАК Склад,
| СкладыПоЗаданиям.Ссылка
|ИЗ
| РаспоряженияВЗаданияхНаПеревозку КАК СкладыПоЗаданиям
|
|СГРУППИРОВАТЬ ПО
| СкладыПоЗаданиям.Ссылка";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("РаспоряженияВЗаданияхНаПеревозку",
Объект.РаспоряженияВЗаданияхНаПеревозку.Выгрузить(,"Склад, Распоряжение, КлючСвязи, Ссылка"));
Результат = Запрос.ВыполнитьПакет();
СкладыПоПунктам = Результат[1].Выгрузить();
СкладыПоЗаданиям = Результат[2].Выгрузить();
Для Каждого СтрокаЗадание Из ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы() Цикл
Если УчестьМодифицированность
И НЕ СтрокаЗадание.Модифицирован Тогда
Продолжить
КонецЕсли;
СкладыЗадания = СкладыПоЗаданиям.Найти(СтрокаЗадание.Ссылка, "Ссылка");
Если СкладыЗадания = Неопределено Тогда
Продолжить;
КонецЕсли;
КоличествоСкладов = СкладыЗадания.КоличествоСкладов;
Если КоличествоСкладов = 1
И ЗначениеЗаполнено(СкладыЗадания.Склад)
И СтрокаЗадание.Склад <> СкладыЗадания.Склад Тогда
СтрокаЗадание.Склад = СкладыЗадания.Склад;
УстановитьМодифицированность(СтрокаЗадание, ЗаданияМодифицированы);
ИначеЕсли СтрокаЗадание.Склад <> Склад Тогда
СтрокаЗадание.Склад = Склад;
УстановитьМодифицированность(СтрокаЗадание, ЗаданияМодифицированы);
КонецЕсли;
Для Каждого СтрокаПункт Из СтрокаЗадание.ПолучитьЭлементы() Цикл
Если УчестьМодифицированность
И НЕ СтрокаПункт.Модифицирован Тогда
Продолжить
КонецЕсли;
СкладыПункта = СкладыПоПунктам.Найти(СтрокаПункт.КлючСвязи, "КлючСвязи");
КоличествоСкладов = СкладыПункта.КоличествоСкладов;
Если КоличествоСкладов = 1 Тогда
СтрокаПункт.Склад = СкладыПункта.Склад;
Иначе
Текст = НСтр("ru = '%КоличествоСкладов% погрузки';");
Текст = СтрЗаменить(Текст, "%КоличествоСкладов%",
СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоСкладов,
НСтр("ru='склад, склада, складов';")));
СтрокаПункт.Склад = Текст;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПризнакиПереходаДат(ИДСтрокиНазначения = Неопределено)
ТекВетка = Неопределено;
ТекущееЗадание = Неопределено;
Если ЗначениеЗаполнено(ИДСтрокиНазначения) Тогда
ТекСтрока = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИДСтрокиНазначения);
ТекущееЗадание = ?(ТекСтрока.ПолучитьРодителя() = Неопределено, ТекСтрока, ТекСтрока.ПолучитьРодителя());
КонецЕсли;
СтрокиЗаданияНаПеревозку = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы();
Если СтрокиЗаданияНаПеревозку.Количество() = 0 Тогда
Возврат
КонецЕсли;
ПредДатаС = СтрокиЗаданияНаПеревозку[0].ВремяС + 60 * 60 * 24;
Для Каждого Стр Из СтрокиЗаданияНаПеревозку Цикл
Если ТекущееЗадание <> Неопределено И ТекущееЗадание <> Стр Тогда
Продолжить;
КонецЕсли;
Если НачалоДня(Стр.ВремяС) <> НачалоДня(ПредДатаС) Тогда
Если НачалоДня(Стр.ВремяС) <> НачалоДня(Стр.ВремяПо) Тогда
Стр.ПереходДаты = 3;
Иначе
Стр.ПереходДаты = 1;
КонецЕсли;
Иначе
Если НачалоДня(Стр.ВремяС) <> НачалоДня(Стр.ВремяПо) Тогда
Стр.ПереходДаты = 2;
Иначе
Стр.ПереходДаты = 0;
КонецЕсли;
КонецЕсли;
ПредДатаС = Стр.ВремяС;
Для Каждого ВложеннаяСтрока Из Стр.ПолучитьЭлементы() Цикл
Если НачалоДня(ВложеннаяСтрока.ВремяС) <> НачалоДня(ПредДатаС) Тогда
Если НачалоДня(ВложеннаяСтрока.ВремяС) <> НачалоДня(ВложеннаяСтрока.ВремяПо) Тогда
ВложеннаяСтрока.ПереходДаты = 3;
Иначе
ВложеннаяСтрока.ПереходДаты = 1;
КонецЕсли;
Иначе
Если НачалоДня(ВложеннаяСтрока.ВремяС) <> НачалоДня(ВложеннаяСтрока.ВремяПо) Тогда
ВложеннаяСтрока.ПереходДаты = 2;
Иначе
ВложеннаяСтрока.ПереходДаты = 0;
КонецЕсли;
КонецЕсли;
ПредДатаС = ВложеннаяСтрока.ВремяС;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСтраницуФормированияЗаданий()
ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Очистить();
Объект.РаспоряженияВЗаданияхНаПеревозку.Очистить();
РаспоряженияНаДоставку.ПолучитьЭлементы().Очистить();
ИтогоВес = 0;
ИтогоОбъем = 0;
Если НЕ ЗначениеЗаполнено(Склад) Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаданиеНаПеревозку.Номер КАК НомерЗадания,
| ЗаданиеНаПеревозку.Склад КАК Склад,
| ЗаданиеНаПеревозку.Ссылка КАК Ссылка,
| ЗаданиеНаПеревозку.ВерсияДанных КАК ВерсияДанных,
| ЗаданиеНаПеревозку.Перевозчик КАК Перевозчик,
| ЗаданиеНаПеревозку.Контрагент КАК Контрагент,
| ЗаданиеНаПеревозку.БанковскийСчетПеревозчика КАК БанковскийСчетПеревозчика,
| ЗаданиеНаПеревозку.ЗаданиеВыполняет КАК ЗаданиеВыполняет,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозку.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.НашаТранспортнаяСлужба)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ЭтоНашаДоставка,
| ЗаданиеНаПеревозку.ДатаВремяРейсаПланС КАК ДатаВремяРейсаПланС,
| ЗаданиеНаПеревозку.ДатаВремяРейсаПланПо КАК ДатаВремяРейсаПланПо,
| ЗаданиеНаПеревозку.ТранспортноеСредство КАК Транспорт,
| ЗаданиеНаПеревозку.ТранспортноеСредство.ВместимостьПредставление КАК ВместимостьПредставление,
| ЗаданиеНаПеревозку.ДополнительнаяИнформация КАК ДополнительнаяИнформацияЗадание,
| ЗаданиеНаПеревозку.ТранспортноеСредство.ГрузоподъемностьВТоннах / &КоэффициентПересчетаВТонны КАК ГрузоподъемностьВЕдПользователя,
| ЗаданиеНаПеревозку.ТранспортноеСредство.ВместимостьВКубическихМетрах / &КоэффициентПересчетаВКубическиеМетры КАК ВместимостьВЕдПользователя,
|
| ЗаданиеНаПеревозкуМаршрут.Адрес КАК Адрес,
| ЗаданиеНаПеревозкуМаршрут.АдресЗначенияПолей КАК АдресЗначенияПолей,
| ЗаданиеНаПеревозкуМаршрут.Зона КАК Зона,
| ЗаданиеНаПеревозкуМаршрут.Вес КАК Вес,
| ЗаданиеНаПеревозкуМаршрут.Объем КАК Объем,
| ЗаданиеНаПеревозкуМаршрут.ВремяС КАК ВремяС,
| ЗаданиеНаПеревозкуМаршрут.ВремяПо КАК ВремяПо,
| ЗаданиеНаПеревозкуМаршрут.ДополнительнаяИнформация КАК ДополнительнаяИнформация,
| ЗаданиеНаПеревозкуМаршрут.НомерСтроки КАК ПорядокВМаршруте,
| ЗаданиеНаПеревозкуМаршрут.КлючСвязи КАК КлючСвязи,
|
| ЗаданиеНаПеревозкуРаспоряжения.Склад КАК РаспоряжениеСклад,
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение КАК Распоряжение,
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение ССЫЛКА Документ.ПоручениеЭкспедитору КАК ЭтоПоручениеЭкспедитору,
| ЗаданиеНаПеревозкуРаспоряжения.Вес КАК РаспоряжениеВес,
| ЗаданиеНаПеревозкуРаспоряжения.Объем КАК РаспоряжениеОбъем,
| ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК ПолучательОтправитель,
| ЗаданиеНаПеревозкуРаспоряжения.Перевозчик КАК РаспоряжениеПеревозчик,
| ЗаданиеНаПеревозкуРаспоряжения.ВремяС КАК РаспоряжениеВремяС,
| ЗаданиеНаПеревозкуРаспоряжения.ВремяПо КАК РаспоряжениеВремяПо,
| ЗаданиеНаПеревозкуРаспоряжения.ДополнительнаяИнформация КАК РаспоряжениеДополнительнаяИнформация,
| ЗаданиеНаПеревозкуРаспоряжения.ДоставляетсяПолностью КАК ДоставляетсяПолностью
|ИЗ
| Документ.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаПеревозку.Маршрут КАК ЗаданиеНаПеревозкуМаршрут
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ПО ЗаданиеНаПеревозкуМаршрут.Ссылка = ЗаданиеНаПеревозкуРаспоряжения.Ссылка
| И ЗаданиеНаПеревозкуМаршрут.КлючСвязи = ЗаданиеНаПеревозкуРаспоряжения.КлючСвязи
| ПО (ЗаданиеНаПеревозкуМаршрут.Ссылка = ЗаданиеНаПеревозку.Ссылка)
|
|ГДЕ
| ЗаданиеНаПеревозку.Проведен
| И ЗаданиеНаПеревозку.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаданийНаПеревозку.Формируется)
| И ЗаданиеНаПеревозку.Склад В ИЕРАРХИИ(&Склад)
| И ЗаданиеНаПеревозку.Операция = &ВидДоставки
| И ВЫБОР
| КОГДА &ОтборПоТипуИсполнителей = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ЗаданиеНаПеревозку.ЗаданиеВыполняет = &ОтборПоТипуИсполнителей
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| ДатаВремяРейсаПланС,
| ДатаВремяРейсаПланПо,
| Ссылка,
| ПорядокВМаршруте
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТоварыКДоставке.ЗаданиеНаПеревозку,
| ТоварыКДоставке.Распоряжение,
| ТоварыКДоставке.Склад,
| ТоварыКДоставке.Номенклатура,
| ТоварыКДоставке.Характеристика,
| ТоварыКДоставке.Назначение,
| ТоварыКДоставке.Серия,
| ТоварыКДоставке.Количество,
| ТоварыКДоставке.ВсеТовары,
| ТоварыКДоставке.ПолучательОтправитель
|ИЗ
| РегистрСведений.ТоварыКДоставке КАК ТоварыКДоставке
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаПеревозку КАК Задание
| ПО (Задание.Ссылка = ТоварыКДоставке.ЗаданиеНаПеревозку)
| И (Задание.Проведен)
| И (Задание.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаданийНаПеревозку.Формируется))
| И (Задание.Склад В ИЕРАРХИИ (&Склад))
| И (ТоварыКДоставке.ЗаданиеНаПеревозку.Операция = &ВидДоставки)
| И (ВЫБОР
| КОГДА &ОтборПоТипуИсполнителей = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ТоварыКДоставке.ЗаданиеНаПеревозку.ЗаданиеВыполняет = &ОтборПоТипуИсполнителей
| КОНЕЦ)";
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("КоэффициентПересчетаВТонны", ДоставкаТоваров.КоэффициентПересчетаВТонны());
Запрос.УстановитьПараметр("КоэффициентПересчетаВКубическиеМетры", ДоставкаТоваров.КоэффициентПересчетаВКубическиеМетры());
Запрос.УстановитьПараметр("ВидДоставки", ВидДоставки);
Запрос.УстановитьПараметр("ОтборПоТипуИсполнителей", ОтборПоТипуИсполнителей);
Результат = Запрос.ВыполнитьПакет();
Выборка = Результат[0].Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
СтрокаЗадание = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(СтрокаЗадание, Выборка);
СтрокаЗадание.ПорядокВМаршруте = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Выборка.НомерЗадания, Истина, Истина);
СтрокаЗадание.ВремяС = Выборка.ДатаВремяРейсаПланС;
СтрокаЗадание.ВремяПо = Выборка.ДатаВремяРейсаПланПо;
СтрокаЗадание.ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(СтрокаЗадание.ВремяС);
СтрокаЗадание.ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(СтрокаЗадание.ВремяПо);
СтрокаЗадание.ДополнительнаяИнформация = Выборка.ДополнительнаяИнформацияЗадание;
СтрокаЗадание.Вес = 0;
СтрокаЗадание.Объем = 0;
СтрокаЗадание.КлючСвязи = "";
СтрокаЗадание.ВидДоставки = ВидДоставки;
ПредыдущаяЗона = Выборка.Зона;
ЗонаИзменилась = Ложь;
Пока Выборка.СледующийПоЗначениюПоля("ПорядокВМаршруте")
И ЗначениеЗаполнено(Выборка.КлючСвязи) Цикл
СтрокаПункт = СтрокаЗадание.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПункт, Выборка);
СтрокаПункт.ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(СтрокаПункт.ВремяС);
СтрокаПункт.ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(СтрокаПункт.ВремяПо);
СтрокаЗадание.Вес = СтрокаЗадание.Вес + СтрокаПункт.Вес;
СтрокаЗадание.Объем = СтрокаЗадание.Объем + СтрокаПункт.Объем;
ЗонаИзменилась = Макс(ЗонаИзменилась, ПредыдущаяЗона <> Выборка.Зона);
СтрокаПункт.ЭтоНашаДоставка = 1;
Пока Выборка.Следующий() Цикл
СтрокаРаспоряжение = Объект.РаспоряженияВЗаданияхНаПеревозку.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРаспоряжение, Выборка);
СтрокаРаспоряжение.Склад = Выборка.РаспоряжениеСклад;
СтрокаРаспоряжение.Вес = Выборка.РаспоряжениеВес;
СтрокаРаспоряжение.Объем = Выборка.РаспоряжениеОбъем;
СтрокаРаспоряжение.Перевозчик = Выборка.РаспоряжениеПеревозчик;
СтрокаРаспоряжение.ВремяС = Выборка.РаспоряжениеВремяС;
СтрокаРаспоряжение.ВремяПо = Выборка.РаспоряжениеВремяПо;
СтрокаРаспоряжение.ДополнительнаяИнформация = Выборка.РаспоряжениеДополнительнаяИнформация;
СтрокаПункт.КоличествоРаспоряжений = СтрокаПункт.КоличествоРаспоряжений + 1;
КонецЦикла;
СтрокаЗадание.КоличествоРаспоряжений = СтрокаЗадание.КоличествоРаспоряжений + СтрокаПункт.КоличествоРаспоряжений;
КонецЦикла;
Если ЗонаИзменилась Тогда
СтрокаЗадание.Зона = Справочники.ЗоныДоставки.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
ЗаполнитьПризнакиПереходаДат();
ТоварыКДоставке.Загрузить(Результат[1].Выгрузить());
ЗаполнитьСкладыПунктовИЗаданий(Истина);
ДоставкаТоваров.ОбновитьСписокРаспоряженийНаДоставку(ЭтотОбъект);
ЗаданияМодифицированы = Ложь;
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаСервере
Процедура СохранитьЗаданияНаПеревозкуСервер(ПомечаемыеНаУдалениеСтрокиЗадания = Неопределено)
Если ЗаданияМодифицированы Тогда
Для Каждого Стр Из ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы() Цикл
ПометитьНаУдаление = Ложь;
Если Стр.Модифицирован Тогда
НовоеЗадание = НЕ ЗначениеЗаполнено(Стр.Ссылка);
Если ПомечаемыеНаУдалениеСтрокиЗадания <> Неопределено
И ПомечаемыеНаУдалениеСтрокиЗадания.Найти(Стр) <> Неопределено Тогда
ПометитьНаУдаление = Истина;
КонецЕсли;
СохранитьЗаданиеВСтроке(Стр, ПометитьНаУдаление);
Если НовоеЗадание И ЗначениеЗаполнено(Стр.Ссылка) Тогда
НовыеЗадания.Добавить(Стр.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗаданияМодифицированы = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьЗаданиеВСтроке(СтрокаЗадание, ПометитьНаУдаление = Ложь)
Если СтрокаЗадание = Неопределено Тогда
СтрокаЗадание = СтрокаЗаданиеПоСтрокеПункта(ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока));
КонецЕсли;
Если Не СтрокаЗадание.Модифицирован Тогда
Возврат;
КонецЕсли;
ИДСтрокаЗадание = СтрокаЗадание.ПолучитьИдентификатор();
НовоеЗадание = НЕ ЗначениеЗаполнено(СтрокаЗадание.Ссылка)
Или НЕ ОбщегоНазначения.СсылкаСуществует(СтрокаЗадание.Ссылка);
Если НовоеЗадание Тогда
ДокОбъект = Документы.ЗаданиеНаПеревозку.СоздатьДокумент();
Если ЗначениеЗаполнено(СтрокаЗадание.Ссылка) Тогда
ДокОбъект.УстановитьСсылкуНового(СтрокаЗадание.Ссылка);
КонецЕсли;
ДокОбъект.Заполнить(Неопределено);
ДокОбъект.Дата = ТекущаяДатаСеанса();
ДокОбъект.Приоритет = ЗначениеНастроекПовтИсп.ПолучитьПриоритетПоУмолчанию(ДокОбъект.Приоритет);
ДокОбъект.Статус = Перечисления.СтатусыЗаданийНаПеревозку.Формируется;
ДокОбъект.Операция = СтрокаЗадание.ВидДоставки;
Иначе
Попытка
ДокОбъект = СтрокаЗадание.Ссылка.ПолучитьОбъект();
Если ПроверитьСообщитьЗаданиеИзменено(СтрокаЗадание) Тогда
УстановитьМодифицированность(СтрокаЗадание, ЗаданияМодифицированы, Ложь);
Возврат;
КонецЕсли;
ДокОбъект.Заблокировать();
Исключение
Текст = НСтр("ru = 'Не удалось заблокировать %Задание% для изменений.'");
Текст = СтрЗаменить(Текст,"%Задание%", ДокОбъект.Ссылка);
ОбщегоНазначения.СообщитьПользователю(Текст, ДокОбъект.Ссылка);
Возврат;
КонецПопытки;
КонецЕсли;
ДокОбъект.ТранспортноеСредство = СтрокаЗадание.Транспорт;
ДокОбъект.ДатаВремяРейсаПланС = СтрокаЗадание.ВремяС;
ДокОбъект.ДатаВремяРейсаПланПо = СтрокаЗадание.ВремяПо;
ДокОбъект.ДополнительнаяИнформация = СтрокаЗадание.ДополнительнаяИнформация;
ДокОбъект.Перевозчик = СтрокаЗадание.Перевозчик;
ДокОбъект.Контрагент = СтрокаЗадание.Контрагент;
ДокОбъект.БанковскийСчетПеревозчика = СтрокаЗадание.БанковскийСчетПеревозчика;
ДокОбъект.ЗаданиеВыполняет = СтрокаЗадание.ЗаданиеВыполняет;
ДокОбъект.Статус = Перечисления.СтатусыЗаданийНаПеревозку.Формируется;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТранспортныеСредства.Код КАК АвтомобильГосударственныйНомер,
| ТранспортныеСредства.Марка КАК АвтомобильМарка,
| ТранспортныеСредства.ВидПеревозки КАК ВидПеревозки,
| ТранспортныеСредства.Тип КАК АвтомобильТип,
| ТранспортныеСредства.ВместимостьВКубическихМетрах КАК АвтомобильВместимостьВКубическихМетрах,
| ТранспортныеСредства.ГрузоподъемностьВТоннах КАК АвтомобильГрузоподъемностьВТоннах,
| ТранспортныеСредства.ЛицензионнаяКарточкаВид КАК ЛицензионнаяКарточкаВид,
| ТранспортныеСредства.ЛицензионнаяКарточкаНомер КАК ЛицензионнаяКарточкаНомер,
| ТранспортныеСредства.ЛицензионнаяКарточкаРегистрационныйНомер КАК ЛицензионнаяКарточкаРегистрационныйНомер,
| ТранспортныеСредства.ЛицензионнаяКарточкаСерия КАК ЛицензионнаяКарточкаСерия,
| ТранспортныеСредства.Прицеп КАК Прицеп,
| ТранспортныеСредства.ГосударственныйНомерПрицепа КАК ГосударственныйНомерПрицепа
|ИЗ
| Справочник.ТранспортныеСредства КАК ТранспортныеСредства
|ГДЕ
| ТранспортныеСредства.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО,
| ТипыТранспортныхСредств.Наименование,
| ТипыТранспортныхСредств.ВместимостьВКубическихМетрах,
| ТипыТранспортныхСредств.ГрузоподъемностьВТоннах,
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО
|ИЗ
| Справочник.ТипыТранспортныхСредств КАК ТипыТранспортныхСредств
|ГДЕ
| ТипыТранспортныхСредств.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СтрокаЗадание.Транспорт);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(ДокОбъект, Выборка);
КонецЕсли;
Если ТипЗнч(СтрокаЗадание.Склад) = Тип("Строка")
ИЛИ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаЗадание.Склад,"ЭтоГруппа") = Истина Тогда
ДокОбъект.Склад = Склад;
Иначе
ДокОбъект.Склад = СтрокаЗадание.Склад;
КонецЕсли;
ДокОбъект.Маршрут.Очистить();
Для Каждого ПунктЗадания Из СтрокаЗадание.ПолучитьЭлементы() Цикл
СтрокаТЧ = ДокОбъект.Маршрут.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, ПунктЗадания);
КонецЦикла;
ДокОбъект.Распоряжения.Загрузить(Объект.РаспоряженияВЗаданияхНаПеревозку.Выгрузить(Новый Структура("Ссылка",СтрокаЗадание.Ссылка)));
ДокОбъект.ДополнительныеСвойства.Вставить("ТоварыКДоставке", ТоварыКДоставке.Выгрузить((Новый Структура("ЗаданиеНаПеревозку",СтрокаЗадание.Ссылка))));
Если ПометитьНаУдаление Тогда
ДокОбъект.ПометкаУдаления = Истина;
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Если НовоеЗадание Тогда
ИсторияРаботыПользователя.Добавить(ДокОбъект.Ссылка);
КонецЕсли;
ДокОбъект.Разблокировать();
СтрокаЗадание.ПорядокВМаршруте = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокОбъект.Ссылка, "Номер"), Истина, Истина);
СтрокаЗадание.Ссылка = ДокОбъект.Ссылка;
СтрокаЗадание.ВерсияДанных = ДокОбъект.ВерсияДанных;
СтрокаЗадание.Модифицирован = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтрокиОбработчикОжидания()
СтрокаПункта = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
Если СтрокаПункта = Неопределено Тогда
ДоставкаТоваровКлиентСервер.ОтобразитьНедогрузПерегруз(ЭтотОбъект, Неопределено);
Иначе
ДоставкаТоваровКлиентСервер.ОтобразитьНедогрузПерегруз(ЭтотОбъект, СтрокаЗаданиеПоСтрокеПункта(СтрокаПункта));
КонецЕсли;
Если СтрокаПункта = Неопределено
Или СтрокаПункта.КоличествоРаспоряжений = 0 Тогда
Элементы.СтраницыРаспоряжения.ТекущаяСтраница = Элементы.СтраницаРаспоряженийНет;
Иначе
Элементы.СтраницыРаспоряжения.ТекущаяСтраница = Элементы.СтраницаРаспоряженияЕсть;
Текст = НСтр("ru = 'Распоряжения (%количество%)'");
НадписьРаспоряжения = СтрЗаменить(Текст, "%количество%", СтрокаПункта.КоличествоРаспоряжений);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСкладов()
ФлагВидимости = Склад.Пустая() ИЛИ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Склад,"ЭтоГруппа");
Элементы.РаспоряженияНаДоставкуСклад.Видимость = ФлагВидимости;
Элементы.ЗаданияНаПеревозкуВРаботеСклад.Видимость = ФлагВидимости;
Элементы.ДокументыДляПеревозчиковСклад.Видимость = ФлагВидимости;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборЗаданияНаПеревозкуВРаботе()
Если Статус = "ВсеВРаботе" Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Статус", Перечисления.СтатусыЗаданийНаПеревозку.Закрыто, ВидСравненияКомпоновкиДанных.НеРавно,,Истина);
ИначеЕсли ЗначениеЗаполнено(Статус) Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Статус", Перечисления.СтатусыЗаданийНаПеревозку[Статус], ВидСравненияКомпоновкиДанных.Равно,,Истина);
ИначеЕсли Не ЗначениеЗаполнено(Статус) Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Статус",,,,Ложь);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Проведен", Истина, ВидСравненияКомпоновкиДанных.Равно,,ЗначениеЗаполнено(Статус));
Если ЗначениеЗаполнено(Склад) Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Склад", Склад, ВидСравненияКомпоновкиДанных.ВИерархии,,Истина);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Склад", Склад, ВидСравненияКомпоновкиДанных.Равно,,Истина);
КонецЕсли;
Если ЗонаГруппаИлиПустая Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Зона", Зона, ВидСравненияКомпоновкиДанных.ВИерархии,,ЗначениеЗаполнено(Зона));
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Зона", Зона, ВидСравненияКомпоновкиДанных.Равно,,Истина);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"ЗаданиеВыполняет", ОтборПоТипуИсполнителей, ВидСравненияКомпоновкиДанных.Равно,,ЗначениеЗаполнено(ОтборПоТипуИсполнителей));
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияНаПеревозкуВРаботе,
"Операция", ВидДоставки, ВидСравненияКомпоновкиДанных.Равно,,Истина);
КонецПроцедуры
&НаКлиенте
Процедура УбратьСтрокиИзЗаданийКлиент(ИсточникНакладные = Ложь, ПометитьЗаданияНаУдаление = Ложь)
УбратьСтрокиИзЗаданийСервер(ИсточникНакладные, ПометитьЗаданияНаУдаление);
ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтрокиОбработчикОжидания();
РаспоряженияНаДоставкуПриАктивизацииСтрокиОбработчикОжидания();
КонецПроцедуры
&НаСервере
Процедура УбратьСтрокиИзЗаданийСервер(ИсточникНакладные, ПометитьЗаданияНаУдаление)
УдаляемыеИзЗаданийРаспоряжения = ТаблицаОбновляемыеРаспоряжения();
ПомечаемыеНаУдалениеСтрокиЗадания = Новый Массив;
Для Каждого ИД Из Элементы.ЗаданияНаПеревозкуПланируемые.ВыделенныеСтроки Цикл
ТекущаяСтрока = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИД);
Если ТекущаяСтрока = Неопределено Тогда
Продолжить;
КонецЕсли;
ИтогоВес = ИтогоВес + ТекущаяСтрока.Вес;
ИтогоОбъем = ИтогоОбъем + ТекущаяСтрока.Объем;
Если ТекущаяСтрока.ПолучитьРодителя() = Неопределено Тогда
СтрокаЗадание = ТекущаяСтрока;
Если Не ПопытатьсяЗаблокироватьПолучитьСсылкуПоСтрокеЗадания(СтрокаЗадание) Тогда
Возврат;
КонецЕсли;
УстановитьМодифицированность(ТекущаяСтрока, ЗаданияМодифицированы);
Ветка = СтрокаЗадание.ПолучитьЭлементы();
Для Каждого СтрокаПункт Из Ветка Цикл
Для Каждого СтрокаРаспоряжение Из Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(Новый Структура("КлючСвязи",СтрокаПункт.КлючСвязи)) Цикл
СтрокаДляОбновления = УдаляемыеИзЗаданийРаспоряжения.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДляОбновления, СтрокаРаспоряжение);
Объект.РаспоряженияВЗаданияхНаПеревозку.Удалить(СтрокаРаспоряжение);
КонецЦикла;
КонецЦикла;
Ветка.Очистить();
СтрокаЗадание.Вес = 0;
СтрокаЗадание.Объем = 0;
ЗаданиеИзменено = ПроверитьСообщитьЗаданиеИзменено(СтрокаЗадание);
Если ПометитьЗаданияНаУдаление
И ЗначениеЗаполнено(СтрокаЗадание.Ссылка)
И Не ЗаданиеИзменено Тогда
ПомечаемыеНаУдалениеСтрокиЗадания.Добавить(СтрокаЗадание);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Ссылка) Тогда
ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
КонецЕсли;
ТоварыПоЗаданию = ТоварыКДоставке.НайтиСтроки(Новый Структура("ЗаданиеНаПеревозку",СтрокаЗадание.Ссылка));
Для Каждого СтрокаТовары Из ТоварыПоЗаданию Цикл
ТоварыКДоставке.Удалить(СтрокаТовары);
КонецЦикла;
СтрокаЗадание.КоличествоРаспоряжений = 0;
Иначе
СтрокаПункт = ТекущаяСтрока;
СтрокаЗадание = СтрокаПункт.ПолучитьРодителя();
ЗаданиеИзменено = ПроверитьСообщитьЗаданиеИзменено(СтрокаЗадание);
Если Не ПопытатьсяЗаблокироватьПолучитьСсылкуПоСтрокеЗадания(СтрокаЗадание)
Или ЗаданиеИзменено Тогда
Возврат;
КонецЕсли;
УстановитьМодифицированность(ТекущаяСтрока, ЗаданияМодифицированы);
Ветка = СтрокаЗадание.ПолучитьЭлементы();
Для Каждого СтрокаРаспоряжение Из Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(Новый Структура("КлючСвязи",СтрокаПункт.КлючСвязи)) Цикл
СтрокаДляОбновления = УдаляемыеИзЗаданийРаспоряжения.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДляОбновления, СтрокаРаспоряжение);
ТоварыПоРаспоряжению = ТоварыКДоставке.НайтиСтроки(Новый Структура("ЗаданиеНаПеревозку,Распоряжение,Склад",СтрокаРаспоряжение.Ссылка, СтрокаРаспоряжение.Распоряжение, СтрокаРаспоряжение.Склад));
Для Каждого СтрокаТовары Из ТоварыПоРаспоряжению Цикл
ТоварыКДоставке.Удалить(СтрокаТовары);
КонецЦикла;
Объект.РаспоряженияВЗаданияхНаПеревозку.Удалить(СтрокаРаспоряжение);
КонецЦикла;
СтрокаЗадание.Вес = СтрокаЗадание.Вес - СтрокаПункт.Вес;
СтрокаЗадание.Объем = СтрокаЗадание.Объем - СтрокаПункт.Объем;
СтрокаЗадание.КоличествоРаспоряжений = СтрокаЗадание.КоличествоРаспоряжений - СтрокаПункт.КоличествоРаспоряжений;
Ветка.Удалить(СтрокаПункт);
КонецЕсли;
КонецЦикла;
СохранитьЗаданияНаПеревозкуСервер(ПомечаемыеНаУдалениеСтрокиЗадания);
Для Каждого Стр Из ПомечаемыеНаУдалениеСтрокиЗадания Цикл
ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Удалить(Стр);
КонецЦикла;
ДоставкаТоваров.ОбновитьСписокРаспоряженийНаДоставку(ЭтотОбъект, УдаляемыеИзЗаданийРаспоряжения);
ПеренумероватьИЗаполнитьПризнакиПереходаДатВСпискеЗаданий();
ЗаполнитьСкладыПунктовИЗаданий(Истина);
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ТаблицаОбновляемыеРаспоряжения(СтрокаРаспоряжение = Неопределено)
ОбновляемыеРаспоряжения = Новый ТаблицаЗначений;
ОбновляемыеРаспоряжения.Колонки.Добавить("Распоряжение", Метаданные.ОпределяемыеТипы.РаспоряжениеНаДоставку.Тип);
ОбновляемыеРаспоряжения.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
Если СтрокаРаспоряжение <> Неопределено Тогда
НоваяСтрока = ОбновляемыеРаспоряжения.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРаспоряжение);
КонецЕсли;
Возврат ОбновляемыеРаспоряжения;
КонецФункции
&НаСервере
Функция НоваяТаблицаПланируемыхЗаданий()
Результат = Новый ТаблицаЗначений();
Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ДокументСсылка.ЗаданиеНаПеревозку"));
Результат.Колонки.Добавить("Транспорт", Новый ОписаниеТипов("СправочникСсылка.ТранспортныеСредства"));
Результат.Колонки.Добавить("Статус", Новый ОписаниеТипов("ПеречислениеСсылка.СтатусыЗаданийНаПеревозку"));
Результат.Колонки.Добавить("ВремяС", Новый ОписаниеТипов("Дата"));
Результат.Колонки.Добавить("ВремяПо", Новый ОписаниеТипов("Дата"));
Возврат Результат;
КонецФункции
&НаСервере
Функция ПоместитьЗаданияВХранилище()
ТаблицаЗаданийПланируемых = НоваяТаблицаПланируемыхЗаданий();
Для Каждого Задание Из ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы() Цикл
Если ТипЗнч(Задание.Транспорт) = Тип("СправочникСсылка.ТранспортныеСредства") Тогда
Стр = ТаблицаЗаданийПланируемых.Добавить();
ЗаполнитьЗначенияСвойств(Стр, Задание);
КонецЕсли;
КонецЦикла;
ТаблицаЗаданийПланируемых.ЗаполнитьЗначения(Перечисления.СтатусыЗаданийНаПеревозку.Формируется,"Статус");
ТаблицаЗаданийПланируемых.Колонки.Транспорт.Имя = "ТранспортноеСредство";
Возврат ПоместитьВоВременноеХранилище(ТаблицаЗаданийПланируемых, УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция ПоместитьВХранилищеРаспоряжения(КлючОтбора)
Если ТипЗнч(КлючОтбора) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
СтруктураПоиск = Новый Структура("Ссылка", КлючОтбора);
Иначе
СтруктураПоиск = Новый Структура("КлючСвязи", КлючОтбора);
КонецЕсли;
РаспоряженияДляВыбора = Объект.РаспоряженияВЗаданияхНаПеревозку.Выгрузить(СтруктураПоиск);
Возврат ПоместитьВоВременноеХранилище(РаспоряженияДляВыбора, УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ПроверитьУстановитьДопустимостьПеретаскивания(Элемент, ПараметрыПеретаскивания)
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Если НачалиПеретаскивание
И ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив")
И ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда
Если Элемент = Элементы.ЗаданияНаПеревозкуПланируемые
И ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Число") Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение;
ИначеЕсли ((ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("ДанныеФормыЭлементКоллекции")
ИЛИ ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("ДанныеФормыЭлементДерева"))) Тогда
ИсточникЗадания = ПараметрыПеретаскивания.Значение[0].Свойство("ПереходДаты");
ИсточникНакладныеВЗаданиях = ПараметрыПеретаскивания.Значение[0].Свойство("КлючСвязи");
ИсточникРаспоряжения = ((НЕ ПараметрыПеретаскивания.Значение[0].Свойство("ПереходДаты"))
И (НЕ ПараметрыПеретаскивания.Значение[0].Свойство("КлючСвязи")));
Если (Элемент = Элементы.РаспоряженияНаДоставку И (ИсточникЗадания ИЛИ ИсточникНакладныеВЗаданиях))
ИЛИ (Элемент = Элементы.ЗаданияНаПеревозкуПланируемые И ИсточникРаспоряжения)
ИЛИ (Элемент = Элементы.ЗаданияНаПеревозкуПланируемые И ИсточникЗадания)
Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСпискиДляТекущейСтраницы()
ОтключитьОбработчикОжидания("ПроверкаНеобходимостиПересчитатьИтогиПоРаспоряжениямНаДоставкуОбработчикОжидания");
СохранитьЗаданияОбновитьСписки();
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаФормированиеЗаданийНаПеревозку Тогда
РаспоряженияРазвернуть();
ЗаданияПланируемыеРазвернуть();
ПодключитьОбработчикОжидания("ПроверкаНеобходимостиПересчитатьИтогиПоРаспоряжениямНаДоставкуОбработчикОжидания",1.3,Ложь);
КонецЕсли;
ОповеститьОСозданныхЗаданиях();
КонецПроцедуры
&НаСервере
Процедура СохранитьЗаданияОбновитьСписки()
СохранитьЗаданияНаПеревозкуСервер();
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаФормированиеЗаданийНаПеревозку Тогда
ОбновитьСтраницуФормированияЗаданий();
ИначеЕсли Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаДокументыДляПеревозчиков Тогда
ОбновитьДокументыДляПеревозчиковСервер();
Иначе
ОбновитьЗаданияВРаботеСервер();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементов()
ЗаданияЗаполнены = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Количество() > 0;
Элементы.ЗаданияНаПеревозкуПланируемыеЗаданияВверх.Доступность = ЗаданияЗаполнены;
Элементы.ЗаданияНаПеревозкуПланируемыеЗаданияВниз.Доступность = ЗаданияЗаполнены;
Элементы.ДеревоФормированиеДоставкиРазбить.Доступность = ЗаданияЗаполнены;
Элементы.ДеревоФормированиеДоставкиОбъединить.Доступность = ЗаданияЗаполнены;
Элементы.ЗаданияНаПеревозкуПланируемыеОткрытьЗадание.Доступность = ЗаданияЗаполнены;
Элементы.УбратьСтрокиИзРейса.Доступность = ЗаданияЗаполнены;
РаспоряженияЗаполнены = РаспоряженияНаДоставку.ПолучитьЭлементы().Количество() > 0;
Элементы.ПеренестиСтрокиВРейс.Доступность = РаспоряженияЗаполнены;
КонецПроцедуры
&НаСервере
Процедура ОбновитьЗаданияВРаботеСервер()
УстановитьВидимостьСкладов();
УстановитьОтборЗаданияНаПеревозкуВРаботе();
КонецПроцедуры
&НаСервере
Функция ПроверитьРазбитьПунктДоставкиСервер()
КлючСвязи = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока).КлючСвязи;
КоличествоРаспоряжений = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(Новый Структура("КлючСвязи",КлючСвязи)).Количество();
Если КоличествоРаспоряжений < 2 Тогда
Текст = НСтр("ru = 'Разбиение строки возможно для адресов, к которым относится более одного распоряжения'");
ОбщегоНазначения.СообщитьПользователю(Текст);
Возврат Истина;
КонецЕсли;
Если КоличествоРаспоряжений > 2 Тогда
Возврат Ложь;
КонецЕсли;
РазбитьПунктДоставкиСервер();
Возврат Истина;
КонецФункции
&НаСервере
Процедура РазбитьПунктДоставкиСервер(ВыбранноеЗначение = Неопределено)
ИДТекущейСтроки = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока;
Если ВыбранноеЗначение <> Неопределено Тогда
МассивРаспоряжений = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресРаспоряжений);
Иначе
МассивРаспоряжений = Новый Массив();
Отбор = Новый Структура("КлючСвязи", ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИДТекущейСтроки).КлючСвязи);
МассивРаспоряжений.Добавить(Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(Отбор)[1]);
КонецЕсли;
ТекущаяСтрока = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИДТекущейСтроки);
ВеткаРодитель = ТекущаяСтрока.ПолучитьРодителя().ПолучитьЭлементы();
НоваяСтрокаПункт = ВеткаРодитель.Вставить(ВеткаРодитель.Индекс(ТекущаяСтрока)+1);
ЗаполнитьЗначенияСвойств(НоваяСтрокаПункт, ТекущаяСтрока);
НоваяСтрокаПункт.КлючСвязи = Новый УникальныйИдентификатор;
Вес = 0;
Объем = 0;
Для Каждого Стр Из МассивРаспоряжений Цикл
СтрокаРаспоряжение = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(Новый Структура("Распоряжение, Склад", Стр.Распоряжение, Стр.Склад))[0];
СтрокаРаспоряжение.КлючСвязи = НоваяСтрокаПункт.КлючСвязи;
Вес = Вес + СтрокаРаспоряжение.Вес;
Объем = Объем + СтрокаРаспоряжение.Объем;
КонецЦикла;
НоваяСтрокаПункт.Вес = Вес;
НоваяСтрокаПункт.Объем = Объем;
НоваяСтрокаПункт.КоличествоРаспоряжений = МассивРаспоряжений.Количество();
ТекущаяСтрока.Вес = ТекущаяСтрока.Вес - Вес;
ТекущаяСтрока.Объем = ТекущаяСтрока.Объем - Объем;
ТекущаяСтрока.КоличествоРаспоряжений = ТекущаяСтрока.КоличествоРаспоряжений - МассивРаспоряжений.Количество();
УстановитьМодифицированность(ТекущаяСтрока,ЗаданияМодифицированы);
УстановитьМодифицированность(НоваяСтрокаПункт, ЗаданияМодифицированы);
Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока = НоваяСтрокаПункт.ПолучитьИдентификатор();
ЗаполнитьСкладыПунктовИЗаданий(Ложь);
ПеренумероватьИЗаполнитьПризнакиПереходаДатВСпискеЗаданий(ИДТекущейСтроки);
КонецПроцедуры
&НаСервере
Функция ОбъединитьПоВремениСервер()
ФлагПерваяСтрока = Истина;
Объединили = Ложь;
Вес = 0;
Объем = 0;
КоличествоРаспоряжений = 0;
ПредыдущийАдрес = "";
МассивИД = Элементы.ЗаданияНаПеревозкуПланируемые.ВыделенныеСтроки;
Для Каждого ИД Из МассивИД Цикл
Строка = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИД);
Родитель = Строка.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если НЕ ФлагПерваяСтрока И ВРег(СокрЛП(Строка.Адрес)) <> ПредыдущийАдрес Тогда
Возврат Ложь;
КонецЕсли;
ИндексРодителя = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Индекс(Родитель);
ИндексСтроки = Родитель.ПолучитьЭлементы().Индекс(Строка);
Если ФлагПерваяСтрока Тогда
ФлагПерваяСтрока = Ложь;
МинИндексРодителя = ИндексРодителя;
МинИндексСтроки = ИндексСтроки;
Иначе
Если МинИндексРодителя > ИндексРодителя Тогда
МинИндексРодителя = ИндексРодителя;
МинИндексСтроки = ИндексСтроки;
ИначеЕсли (МинИндексРодителя = ИндексРодителя) И (МинИндексСтроки > ИндексСтроки) Тогда
МинИндексСтроки = ИндексСтроки;
КонецЕсли;
КонецЕсли;
Вес = Вес + Строка.Вес;
Объем = Объем + Строка.Объем;
ПредыдущийАдрес = ВРег(СокрЛП(Строка.Адрес));
Объединили = Истина;
КонецЦикла;
Если Объединили Тогда
СтрокаРезультат = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы()[МинИндексРодителя].ПолучитьЭлементы()[МинИндексСтроки];
СтрокаРезультат.Вес = Вес;
СтрокаРезультат.Объем = Объем;
МассивИД.Удалить(МассивИД.Найти(СтрокаРезультат.ПолучитьИдентификатор()));
КлючСвязи = СтрокаРезультат.КлючСвязи;
ЗаданиеНаПеревозку = СтрокаРезультат.Ссылка;
Для Каждого ИД Из МассивИД Цикл
Строка = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИД);
Ветка = Строка.ПолучитьРодителя().ПолучитьЭлементы();
ПоляПоиска = Новый Структура("КлючСвязи", Строка.КлючСвязи);
МассивРаспоряжений = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(ПоляПоиска);
Для Каждого СтрокаРаспоряжение Из МассивРаспоряжений Цикл
СтрокаРаспоряжение.КлючСвязи = КлючСвязи;
СтрокаРаспоряжение.Ссылка = ЗаданиеНаПеревозку;
КонецЦикла;
Ветка.Удалить(Строка);
КонецЦикла;
РаспоряженияВЗаданияхНаПеревозку = Объект.РаспоряженияВЗаданияхНаПеревозку.Выгрузить();
РаспоряженияВЗаданияхНаПеревозку.Свернуть(
"Распоряжение,КлючСвязи,ВремяС,ВремяПо,Ссылка,ДополнительнаяИнформация,Адрес,Склад,ПолучательОтправитель,Перевозчик,ДоставляетсяПолностью",
"Вес,Объем");
Объект.РаспоряженияВЗаданияхНаПеревозку.Загрузить(РаспоряженияВЗаданияхНаПеревозку);
СтрокаЗадание = СтрокаЗаданиеПоСтрокеПункта(СтрокаРезультат);
ПоляПоиска = Новый Структура("Ссылка", ЗаданиеНаПеревозку);
МассивРаспоряжений = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(ПоляПоиска);
СтрокаЗадание.КоличествоРаспоряжений = МассивРаспоряжений.Количество();
ПоляПоиска = Новый Структура("КлючСвязи", КлючСвязи);
МассивРаспоряжений = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(ПоляПоиска);
СтрокаРезультат.КоличествоРаспоряжений = МассивРаспоряжений.Количество();
УстановитьМодифицированность(СтрокаРезультат, ЗаданияМодифицированы);
ЗаполнитьСкладыПунктовИЗаданий(Ложь);
ПеренумероватьИЗаполнитьПризнакиПереходаДатВСпискеЗаданий();
КонецЕсли;
Возврат Объединили;
КонецФункции
&НаСервере
Процедура ЗаполнитьПрошлымиРейсамиСервер(ДатаЗаданий = Неопределено)
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| НАЧАЛОПЕРИОДА(ЗаданиеНаПеревозку.Дата, ДЕНЬ) КАК МаксДень
|ПОМЕСТИТЬ ВТМаксДень
|ИЗ
| Документ.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку
|ГДЕ
| ЗаданиеНаПеревозку.Проведен
| И ЗаданиеНаПеревозку.Дата < НАЧАЛОПЕРИОДА(&ТекущаяДата, ДЕНЬ)
|
|УПОРЯДОЧИТЬ ПО
| ЗаданиеНаПеревозку.Дата УБЫВ
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаданиеНаПеревозку.ТранспортноеСредство КАК Транспорт,
| ЗаданиеНаПеревозку.ТранспортноеСредство.ВместимостьПредставление КАК ВместимостьПредставление,
| ЗаданиеНаПеревозку.ДатаВремяРейсаПланС КАК ДатаВремяРейсаПланС,
| ЗаданиеНаПеревозку.Дата КАК Дата,
| ЗаданиеНаПеревозку.ЗаданиеВыполняет КАК ЗаданиеВыполняет,
| ЗаданиеНаПеревозку.Перевозчик КАК Перевозчик,
| ЗаданиеНаПеревозку.Контрагент КАК Контрагент,
| ЗаданиеНаПеревозку.БанковскийСчетПеревозчика КАК БанковскийСчетПеревозчика
|ИЗ
| Документ.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку
| ЛЕВОЕ СОЕДИНЕНИЕ ВТМаксДень КАК ВТМаксДень
| ПО (ВТМаксДень.МаксДень = НАЧАЛОПЕРИОДА(ЗаданиеНаПеревозку.Дата, ДЕНЬ))
|ГДЕ
| ЗаданиеНаПеревозку.Склад В ИЕРАРХИИ(&Склад)
| И (ЗаданиеНаПеревозку.ЗаданиеВыполняет = &ТипИсполнителей
| ИЛИ &ТипИсполнителей = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.ПустаяСсылка))
| И ЗаданиеНаПеревозку.Операция = &ВидДоставки
| И ЗаданиеНаПеревозку.Проведен
| И НАЧАЛОПЕРИОДА(ЗаданиеНаПеревозку.Дата, ДЕНЬ) = &ДатаЗаданий";
Если ДатаЗаданий = Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЛЕВОЕ СОЕДИНЕНИЕ", "ВНУТРЕННЕЕ СОЕДИНЕНИЕ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "НАЧАЛОПЕРИОДА(ЗаданиеНаПеревозку.Дата, ДЕНЬ)", "&ДатаЗаданий");
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ДатаЗаданий", ДатаЗаданий);
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ВидДоставки", ВидДоставки);
Запрос.УстановитьПараметр("ТипИсполнителей", ОтборПоТипуИсполнителей);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Результат.Пустой() Тогда
Текст = НСтр("ru = 'На указанную дату нет проведенных заданий на перевозку'");
ОбщегоНазначения.СообщитьПользователю(Текст);
Возврат;
КонецЕсли;
Пока Выборка.Следующий() Цикл
НоваяСтрока = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Добавить();
НоваяСтрока.Транспорт = Выборка.Транспорт;
Если НачалоДня(Выборка.ДатаВремяРейсаПланС) > НачалоДня(Выборка.Дата) Тогда
НоваяСтрока.ВремяС = НачалоДня(ТекущаяДатаСеанса) + (Выборка.ДатаВремяРейсаПланС - НачалоДня(Выборка.Дата));
ИначеЕсли Выборка.ДатаВремяРейсаПланС - НачалоДня(Выборка.Дата) > ТекущаяДатаСеанса - НачалоДня(ТекущаяДатаСеанса) + 60*60 Тогда
НоваяСтрока.ВремяС = НачалоДня(ТекущаяДатаСеанса) + (Выборка.ДатаВремяРейсаПланС - НачалоДня(Выборка.ДатаВремяРейсаПланС));
Иначе
НоваяСтрока.ВремяС = ТекущаяДатаСеанса + 60*60;
КонецЕсли;
НоваяСтрока.ВремяПо = НоваяСтрока.ВремяС;
НоваяСтрока.ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(НоваяСтрока.ВремяС);
НоваяСтрока.ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(НоваяСтрока.ВремяПо);
НоваяСтрока.Склад = Склад;
НоваяСтрока.ВидДоставки = ВидДоставки;
ЗаполнитьЗначенияСвойств(НоваяСтрока, РеквизитыТС(Выборка.Транспорт));
НоваяСтрока.ЗаданиеВыполняет = Выборка.ЗаданиеВыполняет;
НоваяСтрока.Перевозчик = Выборка.Перевозчик;
НоваяСтрока.Контрагент = Выборка.Контрагент;
НоваяСтрока.БанковскийСчетПеревозчика = Выборка.БанковскийСчетПеревозчика;
НоваяСтрока.ЭтоНашаДоставка =
(Выборка.ЗаданиеВыполняет = Перечисления.ТипыИсполнителейЗаданийНаПеревозку.НашаТранспортнаяСлужба);
УстановитьМодифицированность(НоваяСтрока, ЗаданияМодифицированы);
КонецЦикла;
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаСервере
Процедура ПеренумероватьИЗаполнитьПризнакиПереходаДатВСпискеЗаданий(ИДСтрокиНазначения = Неопределено)
ПеренумероватьПунктыЗаданий(ИДСтрокиНазначения);
ЗаполнитьПризнакиПереходаДат(ИДСтрокиНазначения);
КонецПроцедуры
&НаСервере
Процедура ПеренумероватьПунктыЗаданий(ИДСтрокиНазначения = Неопределено)
ТекВетка = Неопределено;
ТекущееЗадание = Неопределено;
Если ЗначениеЗаполнено(ИДСтрокиНазначения) Тогда
ТекСтрока = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИДСтрокиНазначения);
ТекущееЗадание = ?(ТекСтрока.ПолучитьРодителя() = Неопределено, ТекСтрока, ТекСтрока.ПолучитьРодителя());
КонецЕсли;
ТекВетка = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы();
Для Каждого СтрЗадание Из ТекВетка Цикл
Если ТекущееЗадание <> Неопределено И ТекущееЗадание <> СтрЗадание Тогда
Продолжить;
КонецЕсли;
Если СтрЗадание.Модифицирован Тогда
Для Каждого СтрПункт Из СтрЗадание.ПолучитьЭлементы() Цикл
СтрПункт.ПорядокВМаршруте = СтрЗадание.ПолучитьЭлементы().Индекс(СтрПункт)+1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаданияОтсортироватьПеренумероватьЗаполнитьПризнакиПереходаДат();
ТекСтрока = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока);
Родитель = ТекСтрока.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
ТекВетка = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы();
Иначе
ТекВетка = Родитель.ПолучитьЭлементы();
КонецЕсли;
ТекИндекс = ТекВетка.Индекс(ТекСтрока);
Позиция = 0;
Пока Позиция < ТекВетка.Количество()
И (Позиция = ТекИндекс
ИЛИ (ТекСтрока.ВремяС > ТекВетка[Позиция].ВремяС
ИЛИ (ТекСтрока.ВремяС = ТекВетка[Позиция].ВремяС
И ТекСтрока.ВремяПо > ТекВетка[Позиция].ВремяПо))) Цикл
Позиция = Позиция + 1;
КонецЦикла;
Если Позиция > ТекИндекс Тогда
ТекВетка.Сдвинуть(ТекИндекс,Позиция-ТекИндекс-1);
Иначе
ТекВетка.Сдвинуть(ТекИндекс,Позиция-ТекИндекс);
КонецЕсли;
Если Родитель <> Неопределено Тогда
ПеренумероватьПунктыЗаданий();
КонецЕсли;
ЗаполнитьПризнакиПереходаДат();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСоответствиеВремени(Источник);
ТекСтрока = Элементы.ЗаданияНаПеревозкуПланируемые.ТекущиеДанные;
Родитель = ТекСтрока.ПолучитьРодителя();
Если (ТекСтрока.ВремяС > ТекСтрока.ВремяПо) Тогда
Если Источник = "ВремяС" Тогда
ТекСтрока.ВремяПо = ТекСтрока.ВремяС;
ТекСтрока.ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(ТекСтрока.ВремяПо);
Иначе
ТекСтрока.ВремяС = ТекСтрока.ВремяПо;
ТекСтрока.ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(ТекСтрока.ВремяС);
КонецЕсли;
КонецЕсли;
Если Родитель <> Неопределено
И (ТекСтрока.ВремяС < Родитель.ВремяС
ИЛИ ТекСтрока.ВремяПо > Родитель.ВремяПо) Тогда
Родитель.ВремяС = Мин(ТекСтрока.ВремяС,Родитель.ВремяС);
Родитель.ВремяПо = Макс(ТекСтрока.ВремяПо,Родитель.ВремяПо);
Родитель.ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Родитель.ВремяС);
Родитель.ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Родитель.ВремяПо);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаданияПроверитьОтсортироватьЗаполнитьПризнакиПерехода();
ТекСтрока = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока);
ТекИндекс = ЗаданияНаПеревозкуПланируемые.ПолучитьЭлементы().Индекс(ТекСтрока);
Для Каждого Стр Из ТекСтрока.ПолучитьЭлементы() Цикл
Если Стр.ВремяС < ТекСтрока.ВремяС Тогда
Стр.ВремяС = ТекСтрока.ВремяС;
КонецЕсли;
Если Стр.ВремяПо < ТекСтрока.ВремяС Тогда
Стр.ВремяПо = ТекСтрока.ВремяС;
КонецЕсли;
Если Стр.ВремяС > ТекСтрока.ВремяПо Тогда
Стр.ВремяС = ТекСтрока.ВремяПо;
КонецЕсли;
Стр.ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Стр.ВремяС);
Стр.ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(Стр.ВремяПо);
КонецЦикла;
ЗаданияОтсортироватьПеренумероватьЗаполнитьПризнакиПереходаДат();
КонецПроцедуры
&НаСервере
Процедура ПеренестиСтрокиВнутриСпискаЗаданийФормируемыхСервер(МассивИДСтрок,ИДСтрокиНазначения)
СтрокаПриемник = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИДСтрокиНазначения);
СтрокаРодитель = СтрокаПриемник.ПолучитьРодителя();
Если СтрокаРодитель = Неопределено Тогда
СтрокаРодитель = СтрокаПриемник;
ИндексДляВставки = СтрокаРодитель.ПолучитьЭлементы().Количество();
Иначе
ИндексДляВставки = СтрокаРодитель.ПолучитьЭлементы().Индекс(СтрокаПриемник);
КонецЕсли;
Если Не ПопытатьсяЗаблокироватьПолучитьСсылкуПоСтрокеЗадания(СтрокаРодитель) Тогда
Возврат;
КонецЕсли;
ИзмененныеДобавленныеСтрокиРаспоряжений = Новый Массив;
Для Каждого ИДСтроки Из МассивИДСтрок Цикл
ПеретаскиваемаяСтрока = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(ИДСтроки);
БывшийРодитель = ПеретаскиваемаяСтрока.ПолучитьРодителя();
Если БывшийРодитель = Неопределено
Или Не ПопытатьсяЗаблокироватьПолучитьСсылкуПоСтрокеЗадания(БывшийРодитель)
Или ПроверитьСообщитьЗаданиеИзменено(БывшийРодитель) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = СтрокаРодитель.ПолучитьЭлементы().Вставить(ИндексДляВставки);
ЗаполнитьЗначенияСвойств(НоваяСтрока,ПеретаскиваемаяСтрока);
БывшийРодитель.Вес = БывшийРодитель.Вес - НоваяСтрока.Вес;
БывшийРодитель.Объем = БывшийРодитель.Объем - НоваяСтрока.Объем;
БывшийРодитель.КоличествоРаспоряжений = БывшийРодитель.КоличествоРаспоряжений - НоваяСтрока.КоличествоРаспоряжений;
СтрокаРодитель.Вес = СтрокаРодитель.Вес + НоваяСтрока.Вес;
СтрокаРодитель.Объем = СтрокаРодитель.Объем + НоваяСтрока.Объем;
СтрокаРодитель.КоличествоРаспоряжений = СтрокаРодитель.КоличествоРаспоряжений + СтрокаРодитель.КоличествоРаспоряжений;
НоваяСтрока.Ссылка = СтрокаРодитель.Ссылка;
Если ИндексДляВставки > 0 Тогда
Если ИндексДляВставки + 1 < СтрокаРодитель.ПолучитьЭлементы().Количество() Тогда
НоваяСтрока.ВремяС = Мин(СтрокаРодитель.ПолучитьЭлементы()[ИндексДляВставки - 1].ВремяПо,
СтрокаРодитель.ПолучитьЭлементы()[ИндексДляВставки + 1].ВремяС);
НоваяСтрока.ВремяПо = СтрокаРодитель.ПолучитьЭлементы()[ИндексДляВставки + 1].ВремяС;
Иначе
НоваяСтрока.ВремяС = СтрокаРодитель.ПолучитьЭлементы()[ИндексДляВставки - 1].ВремяПо;
НоваяСтрока.ВремяПо = НоваяСтрока.ВремяС;
КонецЕсли;
Иначе
НоваяСтрока.ВремяС = СтрокаРодитель.ВремяС;
Если СтрокаРодитель.ПолучитьЭлементы().Количество() > 1 Тогда
НоваяСтрока.ВремяПо = СтрокаРодитель.ПолучитьЭлементы()[ИндексДляВставки + 1].ВремяС;
Иначе
НоваяСтрока.ВремяПо = НоваяСтрока.ВремяС;
КонецЕсли;
НоваяСтрока.ВремяПо = НоваяСтрока.ВремяС;
КонецЕсли;
НоваяСтрока.ВремяСБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(НоваяСтрока.ВремяС);
НоваяСтрока.ВремяПоБезДаты = ДоставкаТоваровКлиентСервер.ВремяБезДаты(НоваяСтрока.ВремяПо);
БывшийРодитель.ПолучитьЭлементы().Удалить(ПеретаскиваемаяСтрока);
УстановитьМодифицированность(НоваяСтрока, ЗаданияМодифицированы);
УстановитьМодифицированность(БывшийРодитель, ЗаданияМодифицированы);
ИндексДляВставки = ИндексДляВставки + 1;
НакладныеПоПункту = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(Новый Структура("КлючСвязи",НоваяСтрока.КлючСвязи));
Для Каждого Стр Из НакладныеПоПункту Цикл
Стр.Ссылка = НоваяСтрока.Ссылка;
ИзмененныеДобавленныеСтрокиРаспоряжений.Добавить(Стр);
ТоварыПоРаспоряжению = ТоварыКДоставке.НайтиСтроки(Новый Структура("ЗаданиеНаПеревозку,Распоряжение,Склад",БывшийРодитель.Ссылка, Стр.Распоряжение, Стр.Склад));
Для Каждого СтрокаТовары Из ТоварыПоРаспоряжению Цикл
СтрокаТовары.ЗаданиеНаПеревозку = Стр.Ссылка;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ЗаполнитьСкладыПунктовИЗаданий(Истина);
СохранитьЗаданияНаПеревозкуСервер();
ДоставкаТоваров.ЗаполнитьПризнакДоставляетсяПолностью(ТоварыКДоставке.Выгрузить((Новый Структура("ЗаданиеНаПеревозку",СтрокаРодитель.Ссылка))),
Объект.РаспоряженияВЗаданияхНаПеревозку, ИзмененныеДобавленныеСтрокиРаспоряжений);
ПеренумероватьИЗаполнитьПризнакиПереходаДатВСпискеЗаданий(ИДСтрокиНазначения);
КонецПроцедуры
&НаСервере
Процедура СтатусПриИзмененииСервер()
УстановитьОтборЗаданияНаПеревозкуВРаботе();
Если Статус = "ВсеВРаботе" ИЛИ НЕ ЗначениеЗаполнено(Статус) Тогда
Элементы.ЗаданияНаПеревозкуВРаботеСтатус.Видимость = Истина;
Иначе
Элементы.ЗаданияНаПеревозкуВРаботеСтатус.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДокументыДляПеревозчиковПриАктивизацииСтроки(Элемент)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДокументыДляПеревозчиковВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ДокументыДляПеревозчиков.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено И ТипЗнч(ТекущиеДанные) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
ПоказатьЗначение(Неопределено, ТекущиеДанные.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуЗадания(СтрокаЗадание)
Если ЗаданияМодифицированы Тогда
СохранитьЗаданияНаПеревозкуСервер();
ОповеститьОСозданныхЗаданиях();
КонецЕсли;
ПоказатьЗначение(Неопределено, СтрокаЗадание.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОСозданныхЗаданиях()
Если НовыеЗадания.Количество() > 0 Тогда
Если НовыеЗадания.Количество() > 1 Тогда
ТекстСообщения = НСтр("ru='Создано %КоличествоЗаданий% на перевозку'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%КоличествоЗаданий%",
СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(НовыеЗадания.Количество(),
"задание,задания,заданий"));
ПоказатьОповещениеПользователя(,, ТекстСообщения, БиблиотекаКартинок.Информация32);
Иначе
ТекстЗаголовка = НСтр("ru = 'Создание:'");
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(НовыеЗадания[0].Значение);
ПоказатьОповещениеПользователя(
ТекстЗаголовка,
НавигационнаяСсылка,
Строка(НовыеЗадания[0].Значение),
БиблиотекаКартинок.Информация32);
КонецЕсли;
НовыеЗадания.Очистить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаданияНаПеревозкуПланируемыеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
КонецПроцедуры
&НаСервере
Процедура ДатаРаспоряженийПриИзмененииСервер()
ДоставкаТоваров.ОбновитьСписокРаспоряженийНаДоставку(ЭтотОбъект);
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаСервере
Процедура ЗонаПриИзмененииСервер()
ЗонаГруппаИлиПустая = (НЕ ЗначениеЗаполнено(Зона)
ИЛИ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Зона,"ЭтоГруппа"));
СохранитьЗаданияОбновитьСписки();
Если ЗонаГруппаИлиПустая Тогда
Элементы.РаспоряженияНаДоставкуАдрес.Заголовок = НСтр("ru = 'Зона/Адрес'");
Иначе
Элементы.РаспоряженияНаДоставкуАдрес.Заголовок = НСтр("ru = 'Адрес'");
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СтрокаЗаданиеПоСтрокеПункта(СтрокаМаршрута)
РодительСтрокиМаршрута = СтрокаМаршрута.ПолучитьРодителя();
Если РодительСтрокиМаршрута <> Неопределено Тогда
Возврат РодительСтрокиМаршрута;
Иначе
Возврат СтрокаМаршрута;
КонецЕсли;
КонецФункции
&НаСервере
Функция ПоместитьВХранилищеТоварыКДоставке(ЗаданиеНаПеревозку)
Возврат ПоместитьВоВременноеХранилище(ТоварыКДоставке.Выгрузить(Новый Структура("ЗаданиеНаПеревозку",ЗаданиеНаПеревозку)),УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция ПопытатьсяЗаблокироватьПолучитьСсылкуПоСтрокеЗадания(СтрокаЗадание)
Если Не ЗначениеЗаполнено(СтрокаЗадание.Ссылка) Тогда
СтрокаЗадание.Ссылка = Документы.ЗаданиеНаПеревозку.ПолучитьСсылку();
НовыеЗадания.Добавить(СтрокаЗадание.Ссылка);
Возврат Истина;
КонецЕсли;
Попытка
ДокОбъект = СтрокаЗадание.Ссылка.ПолучитьОбъект();
ДокОбъект.Заблокировать();
ДокОбъект.Разблокировать();
Возврат Истина;
Исключение
Текст = НСтр("ru = 'Не удалось заблокировать %Задание% для изменений.'");
Текст = СтрЗаменить(Текст,"%Задание%", СтрокаЗадание.Ссылка);
ОбщегоНазначения.СообщитьПользователю(Текст, СтрокаЗадание.Ссылка);
Возврат Ложь;
КонецПопытки;
КонецФункции
&НаСервере
Процедура ВидДоставкиПриИзмененииСервер()
НастроитьФормуПоВидуДоставки();
СохранитьЗаданияОбновитьСписки();
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаСервере
Процедура НастроитьФормуПоВидуДоставки()
Если ВидДоставки = Перечисления.ВидыДоставки.СоСклада Тогда
Элементы.РаспоряженияНаДоставкуДата.Заголовок = НСтр("ru = 'Дата отгрузки'");
Элементы.РаспоряженияНаДоставкуВремя.Заголовок = НСтр("ru = 'Время доставки (желаемое)'");
Элементы.РаспоряженияНаДоставкуПолучательОтправитель.Заголовок = НСтр("ru = 'Получатель'");
Элементы.СтраницаДокументыДляПеревозчиков.Видимость = Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками");
Элементы.ЗаданияНаПеревозкуВРаботеУстановитьСтатусКПогрузке.Видимость = Истина;
Если Элементы.Статус.СписокВыбора.НайтиПоЗначению("КПогрузке") = Неопределено Тогда
ЗначенияПеречисления = Метаданные.Перечисления.СтатусыЗаданийНаПеревозку.ЗначенияПеречисления;
Элементы.Статус.СписокВыбора.Вставить(2, ЗначенияПеречисления.КПогрузке.Имя, ЗначенияПеречисления.КПогрузке.Синоним);
КонецЕсли;
Иначе
Элементы.РаспоряженияНаДоставкуДата.Заголовок = НСтр("ru = 'Дата поступления'");
Элементы.РаспоряженияНаДоставкуВремя.Заголовок = НСтр("ru = 'Время передачи товара'");
Элементы.РаспоряженияНаДоставкуПолучательОтправитель.Заголовок = НСтр("ru = 'Отправитель'");
Если Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаДокументыДляПеревозчиков Тогда
Элементы.ГлавныеСтраницы.ТекущаяСтраница = Элементы.СтраницаФормированиеЗаданийНаПеревозку;
КонецЕсли;
Элементы.СтраницаДокументыДляПеревозчиков.Видимость = Ложь;
Элементы.ЗаданияНаПеревозкуВРаботеУстановитьСтатусКПогрузке.Видимость = Ложь;
ЭлементСписка = Элементы.Статус.СписокВыбора.НайтиПоЗначению("КПогрузке");
Если ЭлементСписка <> Неопределено Тогда
Элементы.Статус.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
НастроитьФормуПоВидуДоставкиЛокализация()
КонецПроцедуры
&НаСервере
Процедура ПеревозчикПриИзмененииСервер()
ОбновитьДокументыДляПеревозчиковСервер();
Элементы.ДокументыДляПеревозчиковПеревозчик.Видимость = Не ЗначениеЗаполнено(Перевозчик);
КонецПроцедуры
&НаСервере
Процедура ИсключитьИзДоставкиНаСервере()
РежимыФормированияРасходныхОрдеровАвтоматически = Константы.РежимФормированияРасходныхОрдеров.Получить() = Перечисления.РежимыФормированияРасходныхОрдеров.Автоматически;
РаспоряжениеНаОтгрузкуТип = Метаданные.ОпределяемыеТипы.РаспоряжениеНаОтгрузку.Тип;
МассивИДВыбранныхСтрок = Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки;
РаспоряженияКорневыеСтроки = РаспоряженияНаДоставку.ПолучитьЭлементы();
ИзмененныеДобавленныеСтрокиРаспоряжений = Новый Массив;
Для каждого ИДСтроки Из МассивИДВыбранныхСтрок Цикл
ТекущаяСтрокаРаспоряжений = РаспоряженияНаДоставку.НайтиПоИдентификатору(ИДСтроки);
Если ТекущаяСтрокаРаспоряжений = Неопределено Тогда
Продолжить;
КонецЕсли;
ВершинаТекущейВеткиРаспоряжений = ТекущаяСтрокаРаспоряжений.ПолучитьРодителя();
Если ВершинаТекущейВеткиРаспоряжений <> Неопределено
И МассивИДВыбранныхСтрок.Найти(ВершинаТекущейВеткиРаспоряжений.ПолучитьИдентификатор())<>Неопределено Тогда
Продолжить;
КонецЕсли;
Если ВершинаТекущейВеткиРаспоряжений = Неопределено Тогда
ТекущаяВеткаРаспоряжений = ТекущаяСтрокаРаспоряжений.ПолучитьЭлементы();
ВершинаТекущейВеткиРаспоряжений = ТекущаяСтрокаРаспоряжений;
Иначе
ТекущаяВеткаРаспоряжений = ВершинаТекущейВеткиРаспоряжений.ПолучитьЭлементы();
КонецЕсли;
КоллекцияПодчиненныхСтрок = ТекущаяСтрокаРаспоряжений.ПолучитьЭлементы();
Если КоллекцияПодчиненныхСтрок.Количество() = 0 Тогда
КоллекцияПодчиненныхСтрок = Новый Массив(1);
КоллекцияПодчиненныхСтрок[0] = ТекущаяСтрокаРаспоряжений;
Если ЗонаГруппаИлиПустая Тогда
ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Вес = ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Вес - ТекущаяСтрокаРаспоряжений.Вес;
ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Объем = ТекущаяСтрокаРаспоряжений.ПолучитьРодителя().Объем - ТекущаяСтрокаРаспоряжений.Объем;
КонецЕсли;
КонецЕсли;
ИтогоВес = ИтогоВес - ТекущаяСтрокаРаспоряжений.Вес;
ИтогоОбъем = ИтогоОбъем - ТекущаяСтрокаРаспоряжений.Объем;
Для Каждого СтрокаРаспоряжений Из КоллекцияПодчиненныхСтрок Цикл
СтруктураПоиска = Новый Структура("ИдентификаторВДеревеРаспоряжений", СтрокаРаспоряжений.ПолучитьИдентификатор());
СтрокиРаспоряженийСТоварами = ТоварыРаспоряженийКДоставке.НайтиСтроки(СтруктураПоиска);
ПоляРегистра = "Распоряжение, Склад, Номенклатура, Характеристика, Назначение, Серия, ПолучательОтправитель";
ЧисловыеПоляРегистра = "Количество, Вес, Объем";
СвернутыеТоварыРаспоряженийНаДоставку = ТоварыРаспоряженийКДоставке.Выгрузить(
СтрокиРаспоряженийСТоварами,
ПоляРегистра + ", " + ЧисловыеПоляРегистра);
СвернутыеТоварыРаспоряженийНаДоставку.Свернуть(ПоляРегистра, ЧисловыеПоляРегистра);
НачатьТранзакцию();
Попытка
Для Каждого СтрокаИсключение Из СвернутыеТоварыРаспоряженийНаДоставку Цикл
НоваяЗапись = РегистрыСведений.ТоварыКДоставке.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(НоваяЗапись, СтрокаИсключение);
НоваяЗапись.Записать();
КонецЦикла;
Если РежимыФормированияРасходныхОрдеровАвтоматически
И РаспоряжениеНаОтгрузкуТип.СодержитТип(ТипЗнч(СтрокаРаспоряжений.Распоряжение)) Тогда
Если СкладыСервер.ТребуетсяПереоформитьРасходныеОрдера(СтрокаРаспоряжений.Склад, СтрокаРаспоряжений.ПолучательОтправитель) Тогда
СкладыСервер.ДобавитьВОчередьФормированияРасходныхОрдеров(СтрокаРаспоряжений.Склад, СтрокаРаспоряжений.ПолучательОтправитель);
КонецЕсли;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Не удалось исключить %Распоряжение% из доставки.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Распоряжение%", Строка(СтрокаРаспоряжений.Распоряжение));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось исключить распоряжение из доставки.'", КодОсновногоЯзыка),
УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
Если ВершинаТекущейВеткиРаспоряжений = ТекущаяСтрокаРаспоряжений Тогда
РаспоряженияКорневыеСтроки.Удалить(ТекущаяСтрокаРаспоряжений);
Иначе
ТекущаяВеткаРаспоряжений.Удалить(ТекущаяСтрокаРаспоряжений);
Если ТекущаяВеткаРаспоряжений.Количество() = 0 Тогда
РаспоряженияКорневыеСтроки.Удалить(ВершинаТекущейВеткиРаспоряжений);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПеренумероватьИЗаполнитьПризнакиПереходаДатВСпискеЗаданий();
ДоставкаТоваров.ЗаполнитьПризнакиОформленияРаспоряжений(РаспоряженияНаДоставку, ЗонаГруппаИлиПустая);
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокРаспоряженийНаДоставку(РаспоряжениеАдресИлиСсылка = Неопределено)
ОбновляемыеРаспоряжения = Неопределено;
Если РаспоряжениеАдресИлиСсылка <> Неопределено Тогда
Если ТипЗнч(РаспоряжениеАдресИлиСсылка) = Тип("Строка") Тогда
ОбновляемыеРаспоряжения = ПолучитьИзВременногоХранилища(РаспоряжениеАдресИлиСсылка);
Иначе
ОбновляемыеРаспоряжения = ТаблицаОбновляемыеРаспоряжения();
НоваяСтрока = ОбновляемыеРаспоряжения.Добавить();
НоваяСтрока.Распоряжение = РаспоряжениеАдресИлиСсылка;
НоваяСтрока.Склад = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РаспоряжениеАдресИлиСсылка,"Склад");
КонецЕсли;
КонецЕсли;
ДоставкаТоваров.ОбновитьСписокРаспоряженийНаДоставку(ЭтотОбъект, ОбновляемыеРаспоряжения);
КонецПроцедуры
&НаКлиенте
Процедура ПослеРедактированияРаспоряжений(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ПослеРедактированияРаспоряженийСервер(Результат);
ЗаданияНаПеревозкуПланируемыеПриАктивизацииСтрокиОбработчикОжидания();
КонецПроцедуры
&НаСервере
Процедура ПослеРедактированияРаспоряженийСервер(Результат)
СтрокаПункт = ЗаданияНаПеревозкуПланируемые.НайтиПоИдентификатору(Элементы.ЗаданияНаПеревозкуПланируемые.ТекущаяСтрока);
СтрокаЗадание = СтрокаЗаданиеПоСтрокеПункта(СтрокаПункт);
УстановитьМодифицированность(СтрокаПункт, ЗаданияМодифицированы);
Если СтрокаПункт = СтрокаЗадание Тогда
СтруктураПоискаРаспоряжения = Новый Структура("Ссылка",СтрокаЗадание.Ссылка);
Иначе
СтруктураПоискаРаспоряжения = Новый Структура("Ссылка,КлючСвязи", СтрокаПункт.Ссылка,СтрокаПункт.КлючСвязи);
КонецЕсли;
ТаблицаОбновляемыеРаспоряжения = ТаблицаОбновляемыеРаспоряжения();
НайденныеСтрокиРаспоряжений = Объект.РаспоряженияВЗаданияхНаПеревозку.НайтиСтроки(СтруктураПоискаРаспоряжения);
Для Каждого СтрокаРаспоряжение Из НайденныеСтрокиРаспоряжений Цикл
Если СтрокаПункт <> СтрокаЗадание Тогда
СтруктураПоискаТовары = Новый Структура("ЗаданиеНаПеревозку,Распоряжение,Склад",
СтрокаРаспоряжение.Ссылка, СтрокаРаспоряжение.Распоряжение, СтрокаРаспоряжение.Склад);
НайденныеСтрокиТоваров = ТоварыКДоставке.НайтиСтроки(СтруктураПоискаТовары);
Для Каждого СтрокаТовары Из НайденныеСтрокиТоваров Цикл
ТоварыКДоставке.Удалить(СтрокаТовары);
КонецЦикла;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТаблицаОбновляемыеРаспоряжения.Добавить(), СтрокаРаспоряжение);
Объект.РаспоряженияВЗаданияхНаПеревозку.Удалить(СтрокаРаспоряжение);
КонецЦикла;
Если СтрокаПункт = СтрокаЗадание Тогда
СтруктураПоискаТовары = Новый Структура("ЗаданиеНаПеревозку",СтрокаЗадание.Ссылка);
НайденныеСтрокиТоваров = ТоварыКДоставке.НайтиСтроки(СтруктураПоискаТовары);
Для Каждого СтрокаТовары Из НайденныеСтрокиТоваров Цикл
ТоварыКДоставке.Удалить(СтрокаТовары);
КонецЦикла;
СтрокаЗадание.Вес = Результат.Вес;
СтрокаЗадание.Объем = Результат.Объем;
Иначе
СтрокаПункт.Вес = Результат.Вес;
СтрокаПункт.Объем = Результат.Объем;
КонецЕсли;
ОтредактированныеТовары = ПолучитьИзВременногоХранилища(Результат.АдресТоваровКДоставке);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ОтредактированныеТовары, ТоварыКДоставке);
ОтредактированныеРаспоряжения = ПолучитьИзВременногоХранилища(Результат.АдресРаспоряжений);
СоответствиеПунктов = Новый Соответствие;
Для Каждого Стр Из ОтредактированныеРаспоряжения Цикл
ЗаполнитьЗначенияСвойств(Объект.РаспоряженияВЗаданияхНаПеревозку.Добавить(),Стр);
Если СоответствиеПунктов[Стр.КлючСвязи] = Неопределено Тогда
СоответствиеПунктов.Вставить(Стр.КлючСвязи, 1);
Иначе
СоответствиеПунктов[Стр.КлючСвязи] = СоответствиеПунктов[Стр.КлючСвязи] + 1;
КонецЕсли;
КонецЦикла;
ПунктыЗадания = СтрокаЗадание.ПолучитьЭлементы();
Если СтрокаПункт = СтрокаЗадание Тогда
ПунктыДляОбхода = ПунктыЗадания;
СтрокаЗадание.КоличествоРаспоряжений = 0;
Иначе
ПунктыДляОбхода = Новый Массив;
ПунктыДляОбхода.Добавить(СтрокаПункт);
СтрокаЗадание.КоличествоРаспоряжений = СтрокаЗадание.КоличествоРаспоряжений - СтрокаПункт.КоличествоРаспоряжений;
КонецЕсли;
КоличествоСтрок = ПунктыДляОбхода.Количество();
Для Счет = 1 По КоличествоСтрок Цикл
Стр = ПунктыДляОбхода[КоличествоСтрок - Счет];
Если СоответствиеПунктов[Стр.КлючСвязи] <> Неопределено Тогда
Стр.КоличествоРаспоряжений = СоответствиеПунктов[Стр.КлючСвязи];
СтрокаЗадание.КоличествоРаспоряжений = СтрокаЗадание.КоличествоРаспоряжений + Стр.КоличествоРаспоряжений;
Иначе
ПунктыЗадания.Удалить(Стр);
КонецЕсли;
КонецЦикла;
ДоставкаТоваров.ЗаполнитьПризнакДоставляетсяПолностью(ТоварыКДоставке.Выгрузить(), Объект.РаспоряженияВЗаданияхНаПеревозку);
СохранитьЗаданияНаПеревозкуСервер();
ДоставкаТоваров.ОбновитьСписокРаспоряженийНаДоставку(ЭтаФорма,ТаблицаОбновляемыеРаспоряжения);
УстановитьДоступностьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура ПроверкаНеобходимостиПересчитатьИтогиПоРаспоряжениямНаДоставкуОбработчикОжидания()
КоличествоВыделенных = Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки.Количество();
Если КоличествоВыделенныхСтрокРаспоряжений <> КоличествоВыделенных Тогда
ПересчитатьИтогиПоРаспоряжениямНаДоставку();
КоличествоВыделенныхСтрокРаспоряжений = КоличествоВыделенных;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаДоставкуПриАктивизацииСтрокиОбработчикОжидания()
ПересчитатьИтогиПоРаспоряжениямНаДоставку();
КоличествоВыделенныхСтрокРаспоряжений = Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки.Количество();
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьИтогиПоРаспоряжениямНаДоставку()
Вес = 0;
Объем = 0;
ИДТекущейСтроки = Элементы.РаспоряженияНаДоставку.ТекущаяСтрока;
ТекущаяСтрока = Неопределено;
Если ИДТекущейСтроки <> Неопределено Тогда
ТекущаяСтрока = РаспоряженияНаДоставку.НайтиПоИдентификатору(ИДТекущейСтроки);
КонецЕсли;
Если ТекущаяСтрока <> Неопределено Тогда
Если Не ЗонаГруппаИлиПустая Тогда
Для Каждого ИД Из Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки Цикл
Стр = РаспоряженияНаДоставку.НайтиПоИдентификатору(ИД);
Вес = Вес + Стр.Вес;
Объем = Объем + Стр.Объем;
КонецЦикла;
Иначе
УчтенныйВесПоЗонам = Новый Структура;
УчтенныйОбъемПоЗонам = Новый Структура;
УчтенныеРодители = Новый Структура;
Для Каждого ИД Из Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки Цикл
Стр = РаспоряженияНаДоставку.НайтиПоИдентификатору(ИД);
ИДСтрокой = "ИД" + СтрЗаменить(Строка(ИД),Символы.НПП,"");
СтрРодитель = Стр.ПолучитьРодителя();
Если СтрРодитель = Неопределено Тогда
УчтенныеРодители.Вставить(ИДСтрокой,Истина);
Если УчтенныйВесПоЗонам.Свойство(ИДСтрокой) Тогда
Вес = Вес + Стр.Вес - УчтенныйВесПоЗонам[ИДСтрокой];
Объем = Объем + Стр.Объем - УчтенныйОбъемПоЗонам[ИДСтрокой];
Иначе
Вес = Вес + Стр.Вес;
Объем = Объем + Стр.Объем;
КонецЕсли;
Иначе
ИДСтрокой = "ИД" + СтрЗаменить(Строка(СтрРодитель.ПолучитьИдентификатор()),Символы.НПП,"");
Если Не УчтенныеРодители.Свойство(ИДСтрокой) Тогда
Если УчтенныйВесПоЗонам.Свойство(ИДСтрокой) Тогда
УчтенныйВесПоЗонам[ИДСтрокой] = УчтенныйВесПоЗонам[ИДСтрокой] + Стр.Вес;
УчтенныйОбъемПоЗонам[ИДСтрокой] = УчтенныйОбъемПоЗонам[ИДСтрокой] + Стр.Объем;
Иначе
УчтенныйВесПоЗонам.Вставить(ИДСтрокой, Стр.Вес);
УчтенныйОбъемПоЗонам.Вставить(ИДСтрокой, Стр.Объем);
КонецЕсли;
Вес = Вес + Стр.Вес;
Объем = Объем + Стр.Объем;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Шаблон = НСтр("ru = '%Количество% %ЕдиницаИзмерения%'");
Текст = СтрЗаменить(Шаблон, "%Количество%", Окр(Вес));
Текст = СтрЗаменить(Текст, "%ЕдиницаИзмерения%", ЕдиницаИзмеренияВеса);
НадписьВесВыделенных = Новый ФорматированнаяСтрока(Текст, Новый Шрифт(, , Истина));
Текст = СтрЗаменить(Шаблон, "%Количество%", Окр(Объем));
Текст = СтрЗаменить(Текст, "%ЕдиницаИзмерения%", ЕдиницаИзмеренияОбъема);
НадписьОбъемВыделенных = Новый ФорматированнаяСтрока(Текст, Новый Шрифт(, , Истина));
Картинка = Новый Картинка;
Текст = "";
Если ТекущаяСтрока <> Неопределено
И ТекущаяСтрока.ОформлениеСтроки <> 5 Тогда
Если ТекущаяСтрока.Картинка = 4 Тогда
Картинка = БиблиотекаКартинок.Предупреждение;
Текст = НСтр("ru = 'Особые условия перевозки.'");
ИначеЕсли ТекущаяСтрока.Картинка = 2 Тогда
Картинка = БиблиотекаКартинок.Вопрос;
Текст = НСтр("ru = 'Не указан способ доставки.'");
ИначеЕсли ТекущаяСтрока.Картинка = 5 Тогда
Картинка = БиблиотекаКартинок.ВопросСПредупреждением;
Текст = НСтр("ru = 'Не указан способ доставки. Особые условия перевозки.'");
ИначеЕсли ТекущаяСтрока.Картинка = 0 Тогда
Картинка = БиблиотекаКартинок.ЗаданиеВыполняетПеревозчик;
Текст = НСтр("ru = 'Везет перевозчик.'");
ИначеЕсли ТекущаяСтрока.Картинка = 3 Тогда
Картинка = БиблиотекаКартинок.ЗаданиеВыполняетПеревозчикОсобыеУсловия;
Текст = НСтр("ru = 'Везет перевозчик. Особые условия перевозки.'");
КонецЕсли;
КонецЕсли;
НадписьПодвалЛегенда = Текст;
Элементы.ДекорацияПодвалЛегенда.Картинка = Картинка;
КонецПроцедуры
&НаСервереБезКонтекста
Функция РеквизитыТС(ТранспортноеСредство)
Возврат ДоставкаТоваров.РеквизитыТС(ТранспортноеСредство);
КонецФункции
&НаКлиенте
Процедура ЗаданияНаПеревозкуВРаботеПриАктивизацииСтроки(Элемент)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция СоответствиеКомандСтатусам()
СоответствиеКомандСтатусам = Новый Соответствие();
СоответствиеКомандСтатусам.Вставить("УстановитьСтатусЗакрыто", "Закрыто");
СоответствиеКомандСтатусам.Вставить("УстановитьСтатусЗакрытоПолностьюДоставленныхЗаданий", "Закрыто");
СоответствиеКомандСтатусам.Вставить("УстановитьСтатусКПогрузке", "КПогрузке");
СоответствиеКомандСтатусам.Вставить("УстановитьСтатусОтправлено", "Отправлено");
СоответствиеКомандСтатусам.Вставить("УстановитьСтатусФормируется", "Формируется");
Возврат СоответствиеКомандСтатусам;
КонецФункции
#КонецОбласти
#Область Локализация
&НаСервере
Процедура НастроитьФормуПоВидуДоставкиЛокализация()
Если ВидДоставки = Перечисления.ВидыДоставки.СоСклада Тогда
Элементы.ДокументТранспортнаяНакладнаяОформитьТранспортныеНакладныеПоЗаданиямНаПеревозку.Видимость = Истина;
Иначе
Элементы.ДокументТранспортнаяНакладнаяОформитьТранспортныеНакладныеПоЗаданиямНаПеревозку.Видимость = Ложь;
КонецЕсли;
Возврат;
КонецПроцедуры
#КонецОбласти
#КонецОбласти