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