Дополнительные сведения по товарам заказов торговых площадок / Выбор варианта переноса товаров / Модуль формы

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	УстановитьВидимостьДоступностьЭлементов();

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

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

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

&НаКлиенте
Процедура ВариантПереноса1ПриИзменении(Элемент)

	НомерОтправления = "";
	УстановитьВидимостьДоступностьЭлементов();

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

&НаКлиенте
Процедура ВариантПереноса2ПриИзменении(Элемент)

	НомерОтправления = "";
	УстановитьВидимостьДоступностьЭлементов();

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

&НаКлиенте
Процедура НомерОтправленияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)

	ВариантПереноса = "ВыбранноеОтправление";

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

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

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

&НаКлиенте
Процедура ВыполнитьПеренос(Команда)

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

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

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

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

&НаКлиенте
Процедура УстановитьВидимостьДоступностьЭлементов()

	ЕстьВыборЗначений = (Элементы.НомерОтправления.СписокВыбора.Количество() > 0);
	Элементы.ВариантПереноса2.Доступность = ЕстьВыборЗначений;
	Элементы.НомерОтправления.Доступность = ЕстьВыборЗначений;
	
	Если ЕстьВыборЗначений Тогда
		ПодсказкаВвода = НСтр("ru = 'Выберите отправление'");
	Иначе
		ПодсказкаВвода = НСтр("ru = 'Нет доступных отправлений'");
	КонецЕсли;
	Элементы.НомерОтправления.ПодсказкаВвода = ПодсказкаВвода;

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

&НаСервереБезКонтекста
Функция НомераОтправленийЗаказа(Заказ, ДокументОтгрузки = Неопределено)

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

КонецФункции

&НаСервереБезКонтекста
Функция ТекстЗапросаНомеровОтправлений()

	ТекстЗапроса =
		"ВЫБРАТЬ
		|	ЗаказыТорговыхПлощадок.Заказ КАК Заказ,
		|	ЗаказыТорговыхПлощадок.ДокументОтгрузки КАК ДокументОтгрузки,
		|	ЗаказыТорговыхПлощадок.ДокументОтгрузки <> НЕОПРЕДЕЛЕНО
		|		И ЗаказыТорговыхПлощадок.ДокументОтгрузки = &ДокументОтгрузки КАК ЭтоОтправлениеДокументаОтгрузки,
		|	ЗаказыТорговыхПлощадок.НомерОтправления КАК НомерОтправления,
		|	ЗаказыТорговыхПлощадок.Статус КАК Статус
		|ПОМЕСТИТЬ ЗаказыТорговыхПлощадок
		|ИЗ
		|	РегистрСведений.ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок
		|ГДЕ
		|	ЗаказыТорговыхПлощадок.Заказ = &Заказ
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	СведенияПоТоварам.Заказ КАК Заказ,
		|	СведенияПоТоварам.НомерОтправления КАК НомерОтправления,
		|	СУММА(ВЫРАЗИТЬ(1 КАК ЧИСЛО(17, 0))) КАК КоличествоЭкземпляров
		|ПОМЕСТИТЬ НомераОтправленийСведенийПоТоварам
		|ИЗ
		|	РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок КАК СведенияПоТоварам
		|ГДЕ
		|	СведенияПоТоварам.Заказ = &Заказ
		|
		|СГРУППИРОВАТЬ ПО
		|	СведенияПоТоварам.Заказ,
		|	СведенияПоТоварам.НомерОтправления
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	НомераОтправленийСведенийПоТоварам.НомерОтправления КАК НомерОтправления,
		|	ЕСТЬNULL(ЗаказыТорговыхПлощадок.ЭтоОтправлениеДокументаОтгрузки, ЛОЖЬ) КАК ЭтоОтправлениеДокументаОтгрузки,
		|	НомераОтправленийСведенийПоТоварам.КоличествоЭкземпляров КАК КоличествоЭкземпляров
		|ИЗ
		|	НомераОтправленийСведенийПоТоварам КАК НомераОтправленийСведенийПоТоварам
		|		ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок
		|		ПО НомераОтправленийСведенийПоТоварам.Заказ = ЗаказыТорговыхПлощадок.Заказ
		|			И НомераОтправленийСведенийПоТоварам.НомерОтправления = ЗаказыТорговыхПлощадок.НомерОтправления
		|ГДЕ
		|	ЕСТЬNULL(ЗаказыТорговыхПлощадок.Статус, &СтатусСборки) = &СтатусСборки
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ЗаказыТорговыхПлощадок.НомерОтправления,
		|	ЗаказыТорговыхПлощадок.ЭтоОтправлениеДокументаОтгрузки,
		|	0
		|ИЗ
		|	ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок
		|		ЛЕВОЕ СОЕДИНЕНИЕ НомераОтправленийСведенийПоТоварам КАК НомераОтправленийСведенийПоТоварам
		|		ПО ЗаказыТорговыхПлощадок.Заказ = НомераОтправленийСведенийПоТоварам.Заказ
		|			И ЗаказыТорговыхПлощадок.НомерОтправления = НомераОтправленийСведенийПоТоварам.НомерОтправления
		|ГДЕ
		|	ЗаказыТорговыхПлощадок.Статус = &СтатусСборки
		|	И НомераОтправленийСведенийПоТоварам.НомерОтправления ЕСТЬ NULL
		|
		|УПОРЯДОЧИТЬ ПО
		|	НомерОтправления";
	
	Возврат ТекстЗапроса;

КонецФункции

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

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