Доставка товаров / Форма отмены исключения из доставки / Модуль формы

файл
// @strict-types

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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