#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
КоэффициентПересчетаВТонны = ДоставкаТоваров.КоэффициентПересчетаВТонны();
КоэффициентПересчетаВКубическиеМетры = ДоставкаТоваров.КоэффициентПересчетаВКубическиеМетры();
Склад = Параметры.Склад;
Зона = Параметры.Зона;
ВидДоставки = Параметры.ВидДоставки;
ЗаданиеНаПеревозку = Параметры.ЗаданиеНаПеревозку;
ОтборПоТипуИсполнителей = Параметры.ОтборПоТипуИсполнителей;
ОбновитьСписокРаспоряженийНаДоставку();
ЕдиницаИзмеренияВеса = Константы.ЕдиницаИзмеренияВеса.Получить();
ЕдиницаИзмеренияОбъема = Константы.ЕдиницаИзмеренияОбъема.Получить();
УстановитьЗаголовкиКолонокВесОбъемСервер();
Элементы.РаспоряженияНаДоставкуСклад.Видимость = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Склад,"ЭтоГруппа");
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
УстановитьЗаголовкиПоВидуДоставки();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ГуидВладельца = ВладелецФормы.УникальныйИдентификатор;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ДатаРаспоряженийПриИзменении(Элемент)
ОбновитьСписокРаспоряженийНаДоставку();
КонецПроцедуры
&НаКлиенте
Процедура ЗонаДоставкиПриИзменении(Элемент)
ОбновитьСписокРаспоряженийНаДоставку();
КонецПроцедуры
&НаКлиенте
Процедура ДатаРаспоряженийРегулирование(Элемент, Направление, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(ДатаРаспоряжений) Тогда
ДатаРаспоряжений = ТекущаяДатаСеанса;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаРаспоряженийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(ДатаРаспоряжений) Тогда
ДатаРаспоряжений = ТекущаяДатаСеанса;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоТипуИсполнителейПриИзменении(Элемент)
ОбновитьСписокРаспоряженийНаДоставку();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыРаспоряженияНаДоставку
&НаКлиенте
Процедура РаспоряженияНаДоставкуВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ПроверитьВыбраныГруппировки() Тогда
Возврат
КонецЕсли;
Если Поле = Элементы.РаспоряженияНаДоставкуНомер Тогда
ПоказатьЗначение(,Элементы.РаспоряженияНаДоставку.ТекущиеДанные.Распоряжение);
Иначе
Результат = СохранитьРезультаты();
ОповеститьОВыборе(Результат);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Выбрать(Команда)
Если Элементы.РаспоряженияНаДоставку.ТекущиеДанные = Неопределено Тогда
Возврат;
Иначе
Если Не ЗонаГруппаИлиПустая
Или ПроверитьВыбраныГруппировки() Тогда
Результат = СохранитьРезультаты();
ОповеститьОВыборе(Результат);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСпискиДоставки(Команда)
ОбновитьСписокРаспоряженийНаДоставку();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспоряженияНаДоставкуАдрес.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.Зона");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.ЗоныДоставки.ПустаяСсылка();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.ОформлениеСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 5;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont,,, Ложь, Истина, Ложь, Ложь, ));
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<зона доставки не указана>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспоряженияНаДоставку.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.ОформлениеСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 5;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ReportGroup1BackColor);
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont,,, Истина, Ложь, Ложь, Ложь, ));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспоряженияНаДоставку.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспоряженияНаДоставку.ОформлениеСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.КолонкаЦенРассчитыватьПоФормуламОтДругихВидовЦен);
КонецПроцедуры
#Область Прочее
&НаСервере
Процедура УстановитьЗаголовкиКолонокВесОбъемСервер()
ТекстВес = НСтр("ru = 'Вес брутто,'") + " " + ЕдиницаИзмеренияВеса;
ТекстОбъем = НСтр("ru = 'Объем,'") + " " + ЕдиницаИзмеренияОбъема;
Элементы.РаспоряженияНаДоставкуВес.Заголовок = ТекстВес;
Элементы.РаспоряженияНаДоставкуОбъем.Заголовок = ТекстОбъем;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокРаспоряженийНаДоставку()
ЗонаГруппаИлиПустая = (НЕ ЗначениеЗаполнено(Зона) ИЛИ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Зона,"ЭтоГруппа"));
ДоставкаТоваров.ОбновитьСписокРаспоряженийНаДоставку(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция ПроверитьВыбраныГруппировки()
Если Не ЗонаГруппаИлиПустая Тогда
Возврат Истина;
КонецЕсли;
Для Каждого Идентификатор Из Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки Цикл
Если РаспоряженияНаДоставку.НайтиПоИдентификатору(Идентификатор).ПолучитьРодителя() = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Выберите строки с распоряжениями'");
ПоказатьПредупреждение(, ТекстСообщения);
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
&НаСервере
Процедура УстановитьЗаголовкиПоВидуДоставки()
Если ВидДоставки = Перечисления.ВидыДоставки.СоСклада Тогда
Элементы.РаспоряженияНаДоставкуДата.Заголовок = НСтр("ru = 'Дата отгрузки'");
Элементы.РаспоряженияНаДоставкуВремя.Заголовок = НСтр("ru = 'Желаемое время доставки'");
Элементы.РаспоряженияНаДоставкуПолучательОтправитель.Заголовок = НСтр("ru = 'Получатель'");
Иначе
Элементы.РаспоряженияНаДоставкуДата.Заголовок = НСтр("ru = 'Дата поступления'");
Элементы.РаспоряженияНаДоставкуВремя.Заголовок = НСтр("ru = 'Время передачи товара'");
Элементы.РаспоряженияНаДоставкуПолучательОтправитель.Заголовок = НСтр("ru = 'Отправитель'");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СохранитьРезультаты()
Товары = ДоставкаТоваров.СкопироватьКолонкиКоллекции(ТоварыРаспоряженийКДоставке,
"Распоряжение,Склад,ПолучательОтправитель,Номенклатура,Характеристика,Назначение,Серия,Количество,ВсеТовары");
Распоряжения = ДоставкаТоваров.СкопироватьКолонкиКоллекции(РаспоряженияНаДоставку,
"Распоряжение,Склад,Вес,Объем,ВремяС,ВремяПо,ПолучательОтправитель,Перевозчик,ДополнительнаяИнформация,
|Зона,Адрес,АдресЗначенияПолей");
СтруктураПоиска = Новый Структура("ИдентификаторВДеревеРаспоряжений", 0);
ВыделенныеСтроки = Элементы.РаспоряженияНаДоставку.ВыделенныеСтроки;
Для Каждого Идентификатор Из ВыделенныеСтроки Цикл
СтруктураПоиска.ИдентификаторВДеревеРаспоряжений = Идентификатор;
СтрокаРаспоряжение = Распоряжения.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРаспоряжение, РаспоряженияНаДоставку.НайтиПоИдентификатору(Идентификатор));
НайденныеСтрокиТоваров = ТоварыРаспоряженийКДоставке.НайтиСтроки(СтруктураПоиска);
Для Каждого Стр Из НайденныеСтрокиТоваров Цикл
ЗаполнитьЗначенияСвойств(Товары.Добавить(), Стр);
КонецЦикла;
КонецЦикла;
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("АдресРаспоряжений", ПоместитьВоВременноеХранилище(Распоряжения, ГуидВладельца));
СтруктураВозврата.Вставить("АдресТоваров", ПоместитьВоВременноеХранилище(Товары, ГуидВладельца));
Возврат СтруктураВозврата;
КонецФункции
#КонецОбласти
#КонецОбласти