Задание на перевозку / Форма подбора распоряжений / Модуль формы

файл
// @strict-types

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ГуидВладельца = ВладелецФормы.УникальныйИдентификатор;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыРаспоряженияНаДоставку

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

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

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

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

&НаКлиенте
Процедура ОбновитьСпискиДоставки(Команда)
	
	ОбновитьСписокРаспоряженийНаДоставку();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьЗаголовкиПоВидуДоставки()
	
	Если ВидДоставки = Перечисления.ВидыДоставки.СоСклада Тогда
		
		Элементы.РаспоряженияНаДоставкуДата.Заголовок = НСтр("ru = 'Дата отгрузки'");
		Элементы.РаспоряженияНаДоставкуВремя.Заголовок = НСтр("ru = 'Желаемое время доставки'");
		Элементы.РаспоряженияНаДоставкуПолучательОтправитель.Заголовок = НСтр("ru = 'Получатель'");
		
	Иначе
		
		Элементы.РаспоряженияНаДоставкуДата.Заголовок = НСтр("ru = 'Дата поступления'");
		Элементы.РаспоряженияНаДоставкуВремя.Заголовок = НСтр("ru = 'Время передачи товара'");
		Элементы.РаспоряженияНаДоставкуПолучательОтправитель.Заголовок = НСтр("ru = 'Отправитель'");
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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