#Область ОписаниеПеременных
&НаКлиенте
Перем ТекущиеРаспоряжения;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
УстановитьУсловноеОформление();
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма,"ПанельОтгрузкиАвтоматическоеСоздание,ПанельОтгрузки");
ЗаполнитьСкладПоУмолчанию();
ДатаОтгрузки = ТекущаяДатаСеанса();
СостояниеОтбора = "";
УстановитьЗаголовкиКолонокВесОбъем();
Параметры.Свойство("СтруктураБыстрогоОтбора", СтруктураБыстрогоОтбора);
Если СтруктураБыстрогоОтбора <> Неопределено Тогда
СтруктураБыстрогоОтбора.Свойство("Склад", Склад);
СтруктураБыстрогоОтбора.Свойство("ОтборРаспоряжений", ОтборРаспоряжений);
КонецЕсли;
УстановитьОтборыВОсновныхСписках();
УстановитьВидимостьПомещений();
ИспользоватьУпаковочныеЛисты = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковочныеЛисты");
РежимФормированияРасходныхОрдеров = Константы.РежимФормированияРасходныхОрдеров.Получить();
АвтоматическоеФормированиеРасходныхОрдеров = РежимФормированияРасходныхОрдеров = Перечисления.РежимыФормированияРасходныхОрдеров.Автоматически;
ДоступноСозданиеРасходныхОрдеров = РежимФормированияРасходныхОрдеров = Перечисления.РежимыФормированияРасходныхОрдеров.Кладовщиком;
СкладПомещениеПриИзмененииСервер();
УстановитьВидимостьНеДоступноСозданиеРасходныхОрдеров();
СписокТипов = ОрдераВРаботе.КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Ссылка")).Тип;
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.Источники = СписокТипов;
ПараметрыРазмещения.КоманднаяПанель = Элементы.ОрдераВРаботеГруппаКоманднаяПанельИзменить;
ПараметрыРазмещения.ПрефиксГрупп = "ОрдераВРаботе";
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбновитьСостоянияРаспоряженийНаОтборКлиент",120);
Если АвтоматическоеФормированиеРасходныхОрдеров Тогда
КонтрольРаботыФоновыхЗаданийФормированияОчереди();
ПодключитьОбработчикОжидания("КонтрольРаботыФоновыхЗаданийФормированияОчереди", 300);
КонецЕсли;
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВСтруктуру(Параметр));
КонецЕсли;
КонецЕсли;
Если ИмяСобытия = "ИзменениеСписка_ОрдераВРаботе"
ИЛИ ИмяСобытия = "ИзменениеСписка_ЗаданияВРаботе"
ИЛИ ИмяСобытия = "Запись_ВозвратТоваровПоставщику"
ИЛИ ИмяСобытия = "Запись_ПеремещениеТоваров"
ИЛИ ИмяСобытия = "Запись_РеализацияТоваровУслуг"
ИЛИ ИмяСобытия = "Запись_ПередачаСырьяПереработчику"
ИЛИ ИмяСобытия = "Запись_СборкаТоваров"
ИЛИ ИмяСобытия = "Запись_ВнутреннееПотребление"
ИЛИ ИмяСобытия = "Запись_РасходныйОрдерНаТовары"
ИЛИ ИмяСобытия = "Запись_ОрдерНаПеремещениеТоваров"
ИЛИ ИмяСобытия = "Запись_ЗаявкаНаВозвратТоваровОтКлиента"
ИЛИ ИмяСобытия = "Запись_ЗаказНаСборку"
ИЛИ ИмяСобытия = "Запись_ЗаказНаПеремещение"
ИЛИ ИмяСобытия = "Запись_ЗаказКлиента"
ИЛИ ИмяСобытия = "Запись_ЗаказНаВнутреннееПотребление"
ИЛИ ИмяСобытия = "Запись_ОтгрузкаТоваровСХранения"
Тогда
ОбработкаОповещенияСервер(ИмяСобытия,ТекущиеРаспоряжения());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)
ОбщегоНазначенияУТ.ОчиститьНастройкиИлиРеквизитыФормыОтНесуществующихСсылок(Настройки);
ПолучатьСкладИзНастроек =
Склад = Настройки.Получить("Склад")
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов");
Если ПолучатьСкладИзНастроек Тогда
Если СтруктураБыстрогоОтбора = Неопределено Тогда
Склад = Настройки.Получить("Склад");
Помещение = Настройки.Получить("Помещение");
ЗонаОтгрузки = Настройки.Получить("ЗонаОтгрузки");
Иначе
Если Не СтруктураБыстрогоОтбора.Свойство("Склад") Тогда
Склад = Настройки.Получить("Склад");
КонецЕсли;
Если Не СтруктураБыстрогоОтбора.Свойство("Помещение") Тогда
Помещение = Настройки.Получить("Помещение");
КонецЕсли;
Если Не СтруктураБыстрогоОтбора.Свойство("ЗонаОтгрузки") Тогда
ЗонаОтгрузки = Настройки.Получить("ЗонаОтгрузки");
КонецЕсли;
КонецЕсли;
КонецЕсли;
ФильтрЗаданий = Настройки.Получить("ФильтрЗаданий");
ФильтрОрдеров = Настройки.Получить("ФильтрОрдеров");
Настройки.Удалить("Склад");
Настройки.Удалить("Помещение");
Настройки.Удалить("ЗонаОтгрузки");
Настройки.Удалить("ФильтрЗаданий");
Настройки.Удалить("ФильтрОрдеров");
СкладПомещениеПриИзмененииСервер();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПомещениеПриИзменении(Элемент)
СкладПомещениеПриИзмененииСервер();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецПроцедуры
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.УправлениеОтгрузкой.Форма.Элемент.Склад.ПриИзменении");
ОтображениеДеталейОтгрузка = Ложь;
СкладПомещениеПриИзмененииСервер();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонтрольРаботыФоновыхЗаданийФормированияОчереди();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОтгрузкиПриИзменении(Элемент)
ДатаОтгрузкиПриИзмененииСервер();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецПроцедуры
&НаКлиенте
Процедура СостояниеОтгрузкиПриИзменении(Элемент)
УстановитьОтборыВОсновныхСписках();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецПроцедуры
&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
ОбновитьСостоянияРаспоряженийНаОтборКлиент();
ГруппаСтраницыПриСменеСтраницыСервер(ТекущиеРаспоряжения(), ТекущаяСтраница.Имя);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрОрдеровПриИзменении(Элемент)
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецПроцедуры
&НаКлиенте
Процедура ФильтрЗаданийПриИзменении(Элемент)
ФильтрОрдеровПриИзменении(ТекущиеРаспоряжения());
КонецПроцедуры
&НаКлиенте
Процедура ПроблемаСФоновымиЗаданиямиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылка = "ЗапуститьФормированиеОрдеров" Тогда
ОчиститьСообщения();
ЗапуститьФормированиеОрдеров();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыРаспоряженияНаОтгрузку
&НаКлиенте
Процедура РаспоряженияНаОтгрузкуПриАктивизацииСтроки(Элемент)
ТекущиеРаспоряжения = ТекущиеРаспоряжения();
ПодключитьОбработчикОжидания("ОсновнойСписокПриАктивацииСтрокиКлиент",0.2,Истина);
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаОтгрузкуВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если ТипЗнч(Элемент.ТекущиеДанные.Распоряжение) = Тип("ДокументСсылка.ЗаданиеНаПеревозку")
И Поле <> Элементы.РаспоряженияНаОтгрузкуСостояние Тогда
Если Поле = Элементы.РаспоряженияНаОтгрузкуРаспоряжениеНомер
И Не ОтображениеДеталейОтгрузка Тогда
ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Распоряжение);
Иначе
ТекущееЗаданиеНаПеревозкуОтгрузка = Элемент.ТекущиеДанные.Распоряжение;
ОтображениеДеталейОтгрузка = Не ОтображениеДеталейОтгрузка;
УстановитьОтборыВОсновныхСписках();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецЕсли;
ИначеЕсли Поле = Элементы.РаспоряженияНаОтгрузкуСостояние Тогда
Если ТипЗнч(Элемент.ТекущиеДанные.Распоряжение) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
Отбор = Новый Структура("Склад, ЗаданиеНаПеревозку", Склад, Элемент.ТекущиеДанные.Распоряжение);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ВыполнениеСборкиТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("КлючВарианта", "ВыполнениеСборкиТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ТоварыКОтгрузке.Форма",
ПараметрыФормы,
ЭтаФорма);
Иначе
Отбор = Новый Структура("Склад, ДокументОтгрузки", Склад, Элемент.ТекущиеДанные.Распоряжение);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ВыполнениеСборкиТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("КлючВарианта", "ВыполнениеСборкиТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ТоварыКОтгрузке.Форма",
ПараметрыФормы,
ЭтаФорма);
КонецЕсли;
Иначе
ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Распоряжение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаОтгрузкуРаспоряжениеНомерНажатие(Элемент, СтандартнаяОбработка)
ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Распоряжение);
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаОтгрузкуПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаОтгрузкуПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыРаспоряженияНаОтбор
&НаКлиенте
Процедура РаспоряженияНаОтборПриАктивизацииСтроки(Элемент)
ТекущиеРаспоряжения = ТекущиеРаспоряжения();
ПодключитьОбработчикОжидания("ОсновнойСписокПриАктивацииСтрокиКлиент",0.2,Истина);
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаОтборВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если ТипЗнч(Элемент.ТекущиеДанные.Распоряжение) = Тип("ДокументСсылка.ЗаданиеНаПеревозку")
И Поле <> Элементы.РаспоряженияНаОтборСостояние Тогда
Если Поле = Элементы.РаспоряженияНаОтборНомер
И Не ОтображениеДеталейОтгрузка Тогда
ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Распоряжение);
Иначе
ТекущееЗаданиеНаПеревозкуОтбор = Элемент.ТекущиеДанные.Распоряжение;
ОтображениеДеталейОтбор = Не ОтображениеДеталейОтбор;
ОбновитьСостоянияРаспоряженийНаОтбор();
КонецЕсли;
ИначеЕсли Поле = Элементы.РаспоряженияНаОтборСостояние Тогда
Если ТипЗнч(Элемент.ТекущиеДанные.Распоряжение) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
Отбор = Новый Структура("ЗаданиеНаПеревозку", Элемент.ТекущиеДанные.Распоряжение);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ВыполнениеОтбораТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("КлючВарианта", "ВыполнениеОтбораТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ТоварыКОтбору.Форма",
ПараметрыФормы,
ЭтаФорма);
Иначе
Отбор = Новый Структура("Распоряжение", Элемент.ТекущиеДанные.Распоряжение);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ВыполнениеОтбораТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("КлючВарианта", "ВыполнениеОтбораТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ТоварыКОтбору.Форма",
ПараметрыФормы,
ЭтаФорма);
КонецЕсли;
Иначе
ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Распоряжение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспоряженияНаОтборНомерНажатие(Элемент, СтандартнаяОбработка)
ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Распоряжение);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОрдераВРаботе
&НаКлиенте
Процедура ОрдераВРаботеПриИзменении(Элемент)
Оповестить("ИзменениеСписка_ОрдераВРаботе", Новый Структура);
Оповестить("Запись_РасходныйОрдерНаТовары", Новый Структура);
КонецПроцедуры
&НаКлиенте
Процедура ОрдераВРаботеПриАктивизацииСтроки(Элемент)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЗаданияВРаботе
&НаКлиенте
Процедура ЗаданияВРаботеПриИзменении(Элемент)
Оповестить("ИзменениеСписка_ЗаданияВРаботе", Новый Структура);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура СоздатьЗаданияНаОтбор(Команда)
СоздатьЗаданияНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗаданияНаПереупаковку(Команда)
СоздатьЗаданияНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьОрдера(Команда)
ОчиститьСообщения();
Отказ = Ложь;
ПроверитьСкладПомещение(Отказ);
СоздатьОрдераФрагмент(Отказ);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьОрдераФрагмент(Знач Отказ)
Перем ФормаПараметры;
Если Не Отказ Тогда
Если ИспользоватьАдресноеХранение Тогда
НазначитьЗонуОтгрузки = Истина;
ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("Операция", "ФормированиеОрдеровАдресныйСклад");
ФормаПараметры.Вставить("Склад", Склад);
ФормаПараметры.Вставить("Помещение", Помещение);
ФормаПараметры.Вставить("ИспользоватьСкладскиеПомещения", ИспользоватьСкладскиеПомещения);
Иначе
ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("Операция", "ФормированиеОрдеров");
ФормаПараметры.Вставить("Склад", Склад);
ФормаПараметры.Вставить("Помещение", Помещение);
ФормаПараметры.Вставить("ИспользоватьСкладскиеПомещения", ИспользоватьСкладскиеПомещения);
НазначитьЗонуОтгрузки = Ложь;
КонецЕсли;
ОткрытьФорму("Обработка.УправлениеОтгрузкой.Форма.ФормаНастроек",ФормаПараметры,ЭтаФорма,,,, Новый ОписаниеОповещения("СоздатьОрдераЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьОрдераЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.УправлениеОтгрузкой.Форма.Оповещение.СоздатьОрдераЗавершение");
Ответ = Результат;
Если Ответ = КодВозвратаДиалога.ОК Тогда
СоздатьОрдераСервер();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьЗонуОтгрузки(Команда)
ОчиститьСообщения();
Отказ = Ложь;
ПроверитьСкладПомещение(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
МассивДокументов = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.ОрдераВРаботе);
Если МассивДокументов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ФормаПараметры = Новый Структура("Операция, Склад, Помещение", "ВыборЗоныОтгрузки", Склад, Помещение);
Ответ = Неопределено;
ОткрытьФорму("Обработка.УправлениеОтгрузкой.Форма.ФормаНастроек",ФормаПараметры,ЭтаФорма,,,, Новый ОписаниеОповещения("НазначитьЗонуОтгрузкиЗавершение", ЭтотОбъект, Новый Структура("МассивДокументов", МассивДокументов)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьЗонуОтгрузкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
МассивДокументов = ДополнительныеПараметры.МассивДокументов;
Ответ = Результат;
Если Ответ <> КодВозвратаДиалога.ОК Тогда
Возврат;
КонецЕсли;
МассивИзмененныхДокументов = УстановитьЗоныОтгрузкиСервер(МассивДокументов);
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
ТекстСообщения = НСтр("ru='Для %КоличествоОбработанных% из %КоличествоВсего% выделенных в списке ордеров на отгрузку товаров назначена зона отгрузки ""Зона отгрузки""'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоОбработанных%", МассивИзмененныхДокументов.Количество());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоВсего%", МассивДокументов.Количество());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ЗонаОтгрузки%", ЗонаОтгрузки);
ТекстЗаголовка = НСтр("ru='Зона отгрузки ""%ЗонаОтгрузки%"" назначена'");
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%ЗонаОтгрузки%", ЗонаОтгрузки);
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
Иначе
ТекстСообщения = НСтр("ru='Зона отгрузки ""%ЗонаОтгрузки%"" не назначена ни для одного ордере на отгрузку товаров'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ЗонаОтгрузки%", ЗонаОтгрузки);
ТекстЗаголовка = НСтр("ru='Зона отгрузки ""%ЗонаОтгрузки%"" не назначена'");
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%ЗонаОтгрузки%", ЗонаОтгрузки);
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьЗаданиеНаПеревозку(Команда)
ОчиститьСообщения();
Ордера = Новый Массив;
МассивДокументов = Новый Массив;
НеобработанныеСтроки = Новый Массив;
СписокОрдеров = Элементы.ОрдераВРаботе;
ВыделенныеСтроки = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(СписокОрдеров);
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
СтрокаОрдеров = СписокОрдеров.ДанныеСтроки(ВыделеннаяСтрока);
Если Не СтрокаОрдеров.ОтгрузкаПоЗаданиюНаПеревозку
Или ТипЗнч(ВыделеннаяСтрока) <> Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
ПараметрыСтроки = Новый Структура("Ссылка, ОтгрузкаПоЗаданиюНаПеревозку");
ЗаполнитьЗначенияСвойств(ПараметрыСтроки, СтрокаОрдеров);
НеобработанныеСтроки.Добавить(ПараметрыСтроки);
Иначе
ПараметрыСтроки = Новый Структура("Ссылка, Статус");
ЗаполнитьЗначенияСвойств(ПараметрыСтроки, СтрокаОрдеров);
Ордера.Добавить(ПараметрыСтроки);
МассивДокументов.Добавить(ВыделеннаяСтрока);
КонецЕсли;
КонецЦикла;
Если МассивДокументов.Количество() = 0 Тогда
ОповеститьОбОшибкахВыбораЗаданияНаПеревозку(НеобработанныеСтроки);
Возврат;
ИначеЕсли МассивДокументов.Количество() = 1 Тогда
ПараметрыФормы = Новый Структура("Ордер", МассивДокументов[0]);
Иначе
ПараметрыФормы = Новый Структура("Ордера, Склад", МассивДокументов, Склад);
КонецЕсли;
ДополнительныеПараметры = Новый Структура("Ордера, НеобработанныеОрдера", Ордера, НеобработанныеСтроки);
ОписаниеОповещения = Новый ОписаниеОповещения("НазначитьЗаданиеНаПеревозкуЗавершение", ЭтотОбъект,
ДополнительныеПараметры);
ФормаВыбора = ОткрытьФорму("Документ.РасходныйОрдерНаТовары.Форма.ФормаВыбораЗаданияНаПеревозку",
ПараметрыФормы, ЭтотОбъект, , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьЗаданиеНаПеревозкуЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
НазначитьЗаданиеНаПеревозкуСервер(Результат, ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьПриоритетОтгрузки(Команда)
ОчиститьСообщения();
МассивДокументов = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.ОрдераВРаботе);
Если МассивДокументов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("Заголовок", НСтр("ru = 'Выберите приоритет отгрузки'"));
Приоритет = Неопределено;
ОткрытьФорму("Справочник.Приоритеты.ФормаВыбора",ФормаПараметры,ЭтаФорма,,,, Новый ОписаниеОповещения("НазначитьПриоритетОтгрузкиЗавершение", ЭтотОбъект, Новый Структура("МассивДокументов", МассивДокументов)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьПриоритетОтгрузкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
МассивДокументов = ДополнительныеПараметры.МассивДокументов;
Приоритет = Результат;
Если Не ЗначениеЗаполнено(Приоритет) Тогда
Возврат;
КонецЕсли;
МассивИзмененныхДокументов = НазначитьПриоритетОтгрузкиСервер(МассивДокументов, Приоритет);
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
ТекстСообщения = НСтр("ru='Для %КоличествоОбработанных% из %КоличествоВсего% выделенных в списке ордеров на отгрузку товаров назначен приоритет отгрузки ""%Приоритет%""'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоОбработанных%", МассивИзмененныхДокументов.Количество());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоВсего%", МассивДокументов.Количество());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Приоритет%", Приоритет);
ТекстЗаголовка = НСтр("ru='Приоритет отгрузки ""%Приоритет%"" назначен'");
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%Приоритет%", Приоритет);
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
Иначе
ТекстСообщения = НСтр("ru='Приоритет отгрузки ""%Приоритет%"" не назначен ни для одного ордера на отгрузку товаров'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Приоритет%", Приоритет);
ТекстЗаголовка = НСтр("ru='Приоритет ""%Приоритет%"" не назначена'");
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%Приоритет%", Приоритет);
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОрдераОтгрузить(Команда)
ОчиститьСообщения();
МассивДокументов = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.ОрдераВРаботе);
Если МассивДокументов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
МассивИзмененныхДокументов = ОрдераИзменитьСтатусСервер(МассивДокументов,"Отгружен");
Если МассивИзмененныхДокументов.Количество() Тогда
Оповестить("Запись_РасходныйОрдерНаТовары", Новый Структура);
КонецЕсли;
ОповеститьПользователяОбУстановкеСтатусаОрдеров(МассивИзмененныхДокументов.Количество(), МассивДокументов.Количество(),
ПредопределенноеЗначение("Перечисление.СтатусыРасходныхОрдеров.Отгружен"));
КонецПроцедуры
&НаКлиенте
Процедура ОрдераКОтгрузке(Команда)
ОчиститьСообщения();
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаОтгрузка Тогда
МассивДокументов = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.ОрдераВРаботе);
Иначе
МассивДокументов = Новый Массив;
МассивСтрок = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.РаспоряженияНаОтбор);
Для Каждого СтрМас Из МассивСтрок Цикл
Если ТипЗнч(Элементы.РаспоряженияНаОтбор.ДанныеСтроки(СтрМас).Распоряжение) <> Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
МассивДокументов.Добавить(Элементы.РаспоряженияНаОтбор.ДанныеСтроки(СтрМас).Распоряжение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если МассивДокументов.Количество() = 0 Тогда
ТекстПредупреждения = НСтр("ru='Команда не может быть выполнена для указанного объекта!'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
КонецЕсли;
МассивИзмененныхДокументов = ОрдераИзменитьСтатусСервер(МассивДокументов,"КОтгрузке");
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
Если ОтображениеДеталейОтбор И РаспоряженияНаОтбор.Количество() <= 1 Тогда
ОтображениеДеталейОтбор = Ложь;
КонецЕсли;
ОбновитьСостоянияРаспоряженийНаОтбор();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецЕсли;
ОповеститьПользователяОбУстановкеСтатусаОрдеров(МассивИзмененныхДокументов.Количество(), МассивДокументов.Количество(),
ПредопределенноеЗначение("Перечисление.СтатусыРасходныхОрдеров.КОтгрузке"));
КонецПроцедуры
&НаКлиенте
Процедура ОрдераКПроверке(Команда)
ОчиститьСообщения();
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаОтгрузка Тогда
МассивДокументов = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.ОрдераВРаботе);
Иначе
МассивДокументов = Новый Массив;
МассивСтрок = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.РаспоряженияНаОтбор);
Для Каждого СтрМас Из МассивСтрок Цикл
Если ТипЗнч(Элементы.РаспоряженияНаОтбор.ДанныеСтроки(СтрМас).Распоряжение) <> Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
МассивДокументов.Добавить(Элементы.РаспоряженияНаОтбор.ДанныеСтроки(СтрМас).Распоряжение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если МассивДокументов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
МассивИзмененныхДокументов = ОрдераИзменитьСтатусСервер(МассивДокументов,"КПроверке");
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
Если ОтображениеДеталейОтбор И РаспоряженияНаОтбор.Количество() <= 1 Тогда
ОтображениеДеталейОтбор = Ложь;
КонецЕсли;
ОбновитьСостоянияРаспоряженийНаОтбор();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецЕсли;
ОповеститьПользователяОбУстановкеСтатусаОрдеров(МассивИзмененныхДокументов.Количество(), МассивДокументов.Количество(),
ПредопределенноеЗначение("Перечисление.СтатусыРасходныхОрдеров.КПроверке"));
КонецПроцедуры
&НаКлиенте
Процедура ОрдераКОтбору(Команда)
ОчиститьСообщения();
МассивДокументов = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.ОрдераВРаботе);
Если МассивДокументов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
МассивИзмененныхДокументов = ОрдераИзменитьСтатусСервер(МассивДокументов,"КОтбору");
ОповеститьПользователяОбУстановкеСтатусаОрдеров(МассивИзмененныхДокументов.Количество(), МассивДокументов.Количество(),
ПредопределенноеЗначение("Перечисление.СтатусыРасходныхОрдеров.КОтбору"));
КонецПроцедуры
&НаКлиенте
Процедура ВзятьЗаданияВРаботу(Команда)
Оповещение = Новый ОписаниеОповещения("ВзятьЗаданияВРаботуЗавершение", ЭтотОбъект);
СкладыКлиент.ВзятьЗаданияВРаботу(ЭтаФорма, Элементы.ЗаданияВРаботе , "УправлениеОтгрузкой", Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ВзятьЗаданияВРаботуЗавершение(Результат, ДополнительныеПараметры) Экспорт
УстановитьОтборыВОсновныхСписках();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗадания(Команда)
Оповещение = Новый ОписаниеОповещения("ВыполнитьЗаданияЗавершение", ЭтотОбъект);
СкладыКлиент.ОтметитьВыполнениеЗаданийБезОшибок(ЭтаФорма, Элементы.ЗаданияВРаботе, "УправлениеОтгрузкой", Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗаданияЗавершение(Результат, ДополнительныеПараметры) Экспорт
УстановитьОтборыВОсновныхСписках();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСписки(Команда)
УстановитьОтборыВОсновныхСписках();
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецПроцедуры
&НаКлиенте
Процедура ОтчетПоСостояниюСборки(Команда)
Отбор = Новый Структура("Склад", Склад);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ВыполнениеСборкиТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("КлючВарианта", "ВыполнениеСборкиТоваровПоСкладуКонтекст");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", "Истина");
ОткрытьФорму("Отчет.ТоварыКОтгрузке.Форма",
ПараметрыФормы,
ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьОрдерНаПеремещение(Команда)
Основание = Новый Структура;
Основание.Вставить("Склад", Склад);
Основание.Вставить("ПомещениеОтправитель", Помещение);
ОткрытьФорму("Документ.ОрдерНаПеремещениеТоваров.Форма.ФормаДокумента",Новый Структура("Основание",Основание));
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКоличество(Команда)
Если Элементы.ОрдераВРаботе.ТекущиеДанные <> Неопределено Тогда
Если Не Элементы.ОрдераВРаботе.ТекущиеДанные.Свойство("Ссылка") Тогда
ТекстСообщения = НСтр("ru = 'Действие недоступно для строки группировки списка.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.ОрдераВРаботе.ТекущиеДанные;
ЭтоРасходныйОрдер = (ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.РасходныйОрдерНаТовары"));
ИспользоватьУпаковочныеЛистыДляДокумента = ИспользоватьУпаковочныеЛисты;
Если ЭтоРасходныйОрдер И ИспользоватьУпаковочныеЛисты Тогда
ИспользоватьУпаковочныеЛистыДляДокумента = Не ЕстьМаркированнаяПродукцияСервер(ТекущиеДанные.Ссылка);
КонецЕсли;
Если ЭтоРасходныйОрдер
И ИспользоватьУпаковочныеЛистыДляДокумента Тогда
Действие = НСтр("ru = 'Проверка количества и упаковка'");
Иначе
Действие = НСтр("ru = 'Проверка количества'");
КонецЕсли;
ПараметрЗаголовок = НСтр("ru = '%ПроверкаУпаковка% товаров в документе %Документ%'");
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", ТекущиеДанные.Ссылка);
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%ПроверкаУпаковка%", Действие);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Заголовок", ПараметрЗаголовок);
ПараметрыФормы.Вставить("Ордер", ТекущиеДанные.Ссылка);
ПараметрыФормы.Вставить("Склад", Склад);
ПараметрыФормы.Вставить("ИспользоватьУпаковочныеЛисты", ИспользоватьУпаковочныеЛистыДляДокумента);
ОткрытьФорму("Обработка.ПроверкаКоличестваТоваровВДокументе.Форма.Форма", ПараметрыФормы, ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсправитьКоличество(Команда)
Если Элементы.ОрдераВРаботе.ТекущиеДанные <> Неопределено Тогда
Если Не Элементы.ОрдераВРаботе.ТекущиеДанные.Свойство("Ссылка") Тогда
ТекстСообщения = НСтр("ru = 'Действие недоступно для строки группировки списка.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.ОрдераВРаботе.ТекущиеДанные;
ЭтоРасходныйОрдер = (ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.РасходныйОрдерНаТовары"));
ИспользоватьУпаковочныеЛистыДляДокумента = ИспользоватьУпаковочныеЛисты;
Если ЭтоРасходныйОрдер И ИспользоватьУпаковочныеЛисты Тогда
ИспользоватьУпаковочныеЛистыДляДокумента = Не ЕстьМаркированнаяПродукцияСервер(ТекущиеДанные.Ссылка);
КонецЕсли;
Если ЭтоРасходныйОрдер
И ИспользоватьУпаковочныеЛистыДляДокумента Тогда
Действие = НСтр("ru = 'Исправление количества и упаковка'");
Иначе
Действие = НСтр("ru = 'Исправление количества'");
КонецЕсли;
ПараметрЗаголовок = НСтр("ru = '%ИсправлениеУпаковка% товаров в документе %Документ%'");
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", ТекущиеДанные.Ссылка);
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%ИсправлениеУпаковка%", Действие);
Помещение = ?(ТекущиеДанные.Свойство("ПомещениеОтправитель"), ТекущиеДанные.ПомещениеОтправитель, Неопределено);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Заголовок", ПараметрЗаголовок);
ПараметрыФормы.Вставить("Ордер", ТекущиеДанные.Ссылка);
ПараметрыФормы.Вставить("Склад", Склад);
ПараметрыФормы.Вставить("Помещение", Помещение);
ПараметрыФормы.Вставить("РежимИсправления", Истина);
ПараметрыФормы.Вставить("ИспользоватьУпаковочныеЛисты", ИспользоватьУпаковочныеЛистыДляДокумента);
ОткрытьФорму("Обработка.ПроверкаКоличестваТоваровВДокументе.Форма.Форма", ПараметрыФормы, ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьДанныеВТСД(Команда)
ПараметрыФормы = Новый Структура("ВариантЗаполнения, СкладОтгрузки, ДатаОтгрузки", "ПоРаспоряжениямНаОтгрузку", Склад, ДатаОтгрузки);
ОткрытьФорму("Обработка.ВыгрузкаБазыТоваровВТСД.Форма", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура УменьшитьОрдера(Команда)
ОчиститьСообщения();
МассивСтрок = ОбщегоНазначенияУТКлиент.ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.РаспоряженияНаОтбор);
МассивДокументов = Новый Массив;
Для каждого СтрМас Из МассивСтрок Цикл
МассивДокументов.Добавить(Элементы.РаспоряженияНаОтбор.ДанныеСтроки(СтрМас).Распоряжение);
КонецЦикла;
Если МассивДокументов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
МассивИзмененныхДокументов = УменьшитьОрдераСервер(МассивДокументов);
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
ТекстСообщения = НСтр("ru='Для %КоличествоОбработанных% из %КоличествоВсего% выделенных в списке распоряжений на отбор количество заполнено в соотвестии с количеством отобранных товаров'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоОбработанных%", МассивИзмененныхДокументов.Количество());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоВсего%", МассивДокументов.Количество());
ТекстЗаголовка = НСтр("ru='Заполнение ордеров по отобранным товарам'");
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
Иначе
ТекстСообщения = НСтр("ru='Количество товаров не перезаполнялось ни в одном распоряжения на отбор товаров'");
ТекстЗаголовка = НСтр("ru='Заполнение ордеров от отобранным товарам'");
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.ОрдераВРаботе);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.ОрдераВРаботе, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.ОрдераВРаботе);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
КонецПроцедуры
#Область ЗаполнениеИИнициализация
&НаСервере
Процедура ЗаполнитьСкладПоУмолчанию()
СтруктураЗаполнения = Новый Структура("Склад");
ОбщегоНазначенияУТ.ОбработкаЗаполнения(СтруктураЗаполнения, Неопределено, Неопределено);
Склад = СтруктураЗаполнения.Склад;
Если НЕ ЗначениеЗаполнено(Склад) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ШтрихкодыИТорговоеОборудование
&НаСервере
Функция СсылкаНаЭлементСпискаПоШтрихкоду(Штрихкод)
Менеджеры = Новый Массив();
Менеджеры.Добавить(ПредопределенноеЗначение("Документ.ОрдерНаПеремещениеТоваров.ПустаяСсылка"));
Менеджеры.Добавить(ПредопределенноеЗначение("Документ.ОтборРазмещениеТоваров.ПустаяСсылка"));
Менеджеры.Добавить(ПредопределенноеЗначение("Документ.РасходныйОрдерНаТовары.ПустаяСсылка"));
МассивСсылок = ШтрихкодированиеПечатныхФорм.ПолучитьСсылкуПоШтрихкодуТабличногоДокумента(Штрихкод, Менеджеры);
Если МассивСсылок.Количество() > 0 Тогда
СсылкаДокумента = МассивСсылок[0];
Если ТипЗнч(СсылкаДокумента) = Тип("ДокументСсылка.ОтборРазмещениеТоваров")
И Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаОтгрузка Тогда
СсылкаРаспоряжения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаДокумента, "Распоряжение");
Элементы.ОрдераВРаботе.ТекущаяСтрока = СсылкаРаспоряжения;
Возврат СсылкаРаспоряжения;
Иначе
Если ТипЗнч(СсылкаДокумента) = Тип("ДокументСсылка.ОтборРазмещениеТоваров") Тогда
Элементы.ЗаданияВРаботе.ТекущаяСтрока = СсылкаДокумента;
ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаОтбор Тогда
Элементы.РаспоряженияНаОтбор.ТекущаяСтрока = СсылкаДокумента;
Иначе
Элементы.ОрдераВРаботе.ТекущаяСтрока = СсылкаДокумента;
КонецЕсли;
Возврат СсылкаДокумента;
КонецЕсли;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ОбработатьШтрихкоды(Данные)
Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(Данные) Тогда
Возврат;
КонецЕсли;
СсылкаДокумента = СсылкаНаЭлементСпискаПоШтрихкоду(Данные.Штрихкод);
Если СсылкаДокумента <> Неопределено Тогда
ПоказатьЗначение(Неопределено, СсылкаДокумента);
Иначе
ШтрихкодированиеПечатныхФормКлиент.ОбъектНеНайден(Данные.Штрихкод);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Интерфейс
&НаКлиенте
Процедура ОсновнойСписокПриАктивацииСтрокиКлиент()
Если ТекущееРаспоряжениеНаОтбор <> ТекущиеРаспоряжения.РаспоряжениеНаОтбор
ИЛИ ТекущееРаспоряжениеНаОтгрузку <> ТекущиеРаспоряжения.РаспоряжениеНаОтгрузку Тогда
ВыделенныеСтрокиНаОтгрузку = Новый Массив;
Для Каждого СтрокаТаблицы Из Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки Цикл
СтрокаТаблицы = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(СтрокаТаблицы);
Если СтрокаТаблицы <> Неопределено Тогда
СтрокаТаблицы = СтрокаТаблицы.Распоряжение;
КонецЕсли;
ВыделенныеСтрокиНаОтгрузку.Добавить(СтрокаТаблицы);
КонецЦикла;
ВыделенныеСтрокиНаОтбор = Новый Массив;
Для Каждого СтрокаТаблицы Из Элементы.РаспоряженияНаОтбор.ВыделенныеСтроки Цикл
СтрокаТаблицы = РаспоряженияНаОтбор.НайтиПоИдентификатору(СтрокаТаблицы);
Если СтрокаТаблицы <> Неопределено Тогда
СтрокаТаблицы = СтрокаТаблицы.Распоряжение;
КонецЕсли;
ВыделенныеСтрокиНаОтбор.Добавить(СтрокаТаблицы);
КонецЦикла;
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения);
СтрокиТаблицы = РаспоряженияНаОтгрузку.НайтиСтроки(Новый Структура("Распоряжение", ТекущиеРаспоряжения.РаспоряжениеНаОтгрузку));
Если СтрокиТаблицы.Количество() > 0 Тогда
Элементы.РаспоряженияНаОтгрузку.ТекущаяСтрока = СтрокиТаблицы[0].ПолучитьИдентификатор();
КонецЕсли;
Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки.Очистить();
Для Каждого СтрокаТаблицы Из ВыделенныеСтрокиНаОтгрузку Цикл
СтрокиТаблицы = РаспоряженияНаОтгрузку.НайтиСтроки(Новый Структура("Распоряжение", СтрокаТаблицы));
Если СтрокиТаблицы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки.Добавить(СтрокиТаблицы[0].ПолучитьИдентификатор());
КонецЦикла;
СтрокиТаблицы = РаспоряженияНаОтбор.НайтиСтроки(Новый Структура("Распоряжение", ТекущиеРаспоряжения.РаспоряжениеНаОтбор));
Если СтрокиТаблицы.Количество() > 0 Тогда
Элементы.РаспоряженияНаОтбор.ТекущаяСтрока = СтрокиТаблицы[0].ПолучитьИдентификатор();
КонецЕсли;
Элементы.РаспоряженияНаОтбор.ВыделенныеСтроки.Очистить();
Для Каждого СтрокаТаблицы Из ВыделенныеСтрокиНаОтбор Цикл
СтрокиТаблицы = РаспоряженияНаОтбор.НайтиСтроки(Новый Структура("Распоряжение", СтрокаТаблицы));
Если СтрокиТаблицы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Элементы.РаспоряженияНаОтбор.ВыделенныеСтроки.Добавить(СтрокиТаблицы[0].ПолучитьИдентификатор());
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ТекущиеРаспоряжения()
СтруктураВозврата = Новый Структура("РаспоряжениеНаОтбор, РаспоряжениеНаОтгрузку");
Если Элементы.РаспоряженияНаОтгрузку.ТекущиеДанные <> Неопределено Тогда
СтруктураВозврата.РаспоряжениеНаОтгрузку = Элементы.РаспоряженияНаОтгрузку.ТекущиеДанные.Распоряжение;
КонецЕсли;
Если Элементы.РаспоряженияНаОтбор.ТекущиеДанные <> Неопределено Тогда
СтруктураВозврата.РаспоряжениеНаОтбор = Элементы.РаспоряженияНаОтбор.ТекущиеДанные.Распоряжение;
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
&НаСервере
Процедура СкладПомещениеПриИзмененииСервер()
СтруктураУстанавливаемыхПараметров = Новый Структура;
Если ЗначениеЗаполнено(Склад) Тогда
СтруктураУстанавливаемыхПараметров.Вставить("Склад",Склад);
СтруктураУстанавливаемыхПараметров.Вставить("Помещение",Помещение);
ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Склад, Помещение);
Если ИспользоватьАдресноеХранение Тогда
ЗонаОтгрузки = Справочники.СкладскиеЯчейки.ЗонаОтгрузкиПоУмолчанию(Склад, Помещение);
Элементы.ГруппаСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
Иначе
Элементы.ГруппаСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Элементы.ОрдераВРаботеПорядокДоставки.Видимость = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Склад, "НачинатьОтгрузкуПослеФормированияЗаданияНаПеревозку");
УстановитьПривилегированныйРежим(Ложь);
Иначе
СтруктураУстанавливаемыхПараметров.Вставить("Склад",Неопределено);
СтруктураУстанавливаемыхПараметров.Вставить("Помещение",Неопределено);
Элементы.ГруппаСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
ИспользоватьАдресноеХранение = Ложь;
КонецЕсли;
УстановитьПараметрыФункциональныхОпцийФормы(СтруктураУстанавливаемыхПараметров);
ИспользоватьСтатусыРасходныхОрдеров = ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыРасходныхОрдеров",
Новый Структура("Склад", Склад));
Элементы.ОрдераВРаботеСтатус.Видимость = ИспользоватьСтатусыРасходныхОрдеров;
Элементы.Состояние.СписокВыбора.Очистить();
Если ИспользоватьСтатусыРасходныхОрдеров Тогда
Элементы.Состояние.СписокВыбора.Добавить("ВсеВРаботе", НСтр("ru = 'Все в работе'"));
Элементы.Состояние.СписокВыбора.Добавить("ОжидаетсяОтбор", НСтр("ru = 'Ожидается отбор'"));
Элементы.Состояние.СписокВыбора.Добавить("ОжидаетсяОтгрузка", НСтр("ru = 'Ожидается отгрузка'"));
Элементы.Состояние.СписокВыбора.Добавить("ОжидаетсяОформлениеНакладных", НСтр("ru = 'Ожидается оформление накладных'"));
Элементы.Состояние.СписокВыбора.Добавить("", НСтр("ru = 'Все'"));
СостояниеОтгрузки = "ВсеВРаботе";
Иначе
Элементы.Состояние.СписокВыбора.Добавить("ОжидаетсяОтбор", НСтр("ru = 'Ожидается отбор'"));
Элементы.Состояние.СписокВыбора.Добавить("ОжидаетсяОформлениеНакладных", НСтр("ru = 'Ожидается оформление накладных'"));
Элементы.Состояние.СписокВыбора.Добавить("", НСтр("ru = 'Все'"));
СостояниеОтгрузки = "ОжидаетсяОтбор";
КонецЕсли;
РабочийУчасток = Справочники.РабочиеУчастки.ПустаяСсылка();
НазначитьЗонуОтгрузки = Ложь;
ПоказыватьГиперссылки = СкладыСервер.НачинатьОтгрузкуПослеФормированияЗаданияНаПеревозку(Склад);
Элементы.РаспоряженияНаОтгрузкуРаспоряжениеНомер.ГиперссылкаЯчейки = ПоказыватьГиперссылки;
Элементы.РаспоряженияНаОтборНомер.ГиперссылкаЯчейки = ПоказыватьГиперссылки;
УстановитьОтборыВОсновныхСписках();
ЗаполнитьСписокВыбораФильтраОрдеров();
УстановитьВидимостьПомещений();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьНеДоступноСозданиеРасходныхОрдеров()
Если Не ДоступноСозданиеРасходныхОрдеров Тогда
Элементы.ГруппаРасходныеОрдера.ОтображатьЗаголовок = Ложь;
Элементы.ГруппаРасходныеОрдера.Отображение = ОтображениеОбычнойГруппы.Нет;
Элементы.ФильтрОрдеров.Видимость = Ложь;
Элементы.ГруппаОтборКоманднаяПанельРаспоряженияНаОтгрузку.Видимость = Ложь;
Элементы.ГруппаРаспоряженияНаОтгрузку.Видимость = Ложь;
Элементы.ГруппаШапкаОтгрузкиРасходныеОрдера.Видимость = Истина;
Элементы.АвтоматическоеФормированиеРасходныхОрдеров.Видимость = Истина;
Элементы.ИзменитьФорму2.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ГруппаСтраницыПриСменеСтраницыСервер(ТекущиеРаспоряжения, ИмяТекущейСтраницы);
ТекущаяСтраница = Элементы[ИмяТекущейСтраницы];
Если ТекущаяСтраница = Элементы.ГруппаОтгрузка Тогда
Элементы.Склад.Доступность = Истина;
Элементы.Помещение.Доступность = Истина;
ИначеЕсли ТекущаяСтраница = Элементы.ГруппаОтбор Тогда
Элементы.Склад.Доступность = Ложь;
Элементы.Помещение.Доступность = Ложь;
КонецЕсли;
УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения);
УстановитьВидимостьПомещений();
КонецПроцедуры
&НаСервере
Процедура ДатаОтгрузкиПриИзмененииСервер()
УстановитьОтборыВОсновныхСписках();
УстановитьВидимостьПомещений();
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовкиКолонокВесОбъем()
ЕдиницаИзмеренияОбъема = Строка(Константы.ЕдиницаИзмеренияОбъема.Получить());
ЕдиницаИзмеренияВеса = Строка(Константы.ЕдиницаИзмеренияВеса.Получить());
ЗаголовокЭлемента = НСтр("ru='Объем, %ЕдиницаИзмерения%'");
ЗаголовокЭлемента = СтрЗаменить(ЗаголовокЭлемента, "%ЕдиницаИзмерения%", ЕдиницаИзмеренияОбъема);
Элементы.ЗаданияВРаботе.ПодчиненныеЭлементы.ПеремещенияВРаботеОбъемОтбор.Заголовок = ЗаголовокЭлемента;
ЗаголовокЭлемента = НСтр("ru='Вес (брутто), %ЕдиницаИзмерения%'");
ЗаголовокЭлемента = СтрЗаменить(ЗаголовокЭлемента, "%ЕдиницаИзмерения%", ЕдиницаИзмеренияВеса);
Элементы.ЗаданияВРаботе.ПодчиненныеЭлементы.ПеремещенияВРаботеВесОтбор.Заголовок = ЗаголовокЭлемента;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборыВОсновныхСписках()
ЗаполнитьРаспоряженияНаОтгрузку();
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаОтбор Тогда
ОбновитьСостоянияРаспоряженийНаОтбор();
Элементы.ЗаданияВРаботе.Обновить();
Иначе
Элементы.ОрдераВРаботе.Обновить();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения)
Если ТекущиеРаспоряжения = Неопределено Тогда
ТекущееРаспоряжениеНаОтбор = Неопределено;
ТекущееРаспоряжениеНаОтгрузку = Неопределено;
Иначе
ТекущееРаспоряжениеНаОтбор = ТекущиеРаспоряжения.РаспоряжениеНаОтбор;
ТекущееРаспоряжениеНаОтгрузку = ТекущиеРаспоряжения.РаспоряжениеНаОтгрузку;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Склад", Склад, ВидСравненияКомпоновкиДанных.Равно,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Помещение", Помещение, ВидСравненияКомпоновкиДанных.Равно,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Ссылка", Неопределено,,,Ложь);
Если ФильтрЗаданий = "" Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Статус", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Распоряжение", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "ЗаданиеНаПеревозку", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Проведен", Истина,,,Ложь);
ИначеЕсли ФильтрЗаданий = "ВсеНевыполненные" Тогда
СписокСтатусов = Новый СписокЗначений;
СписокСтатусов.Добавить(Перечисления.СтатусыОтборовРазмещенийТоваров.ВРаботе);
СписокСтатусов.Добавить(Перечисления.СтатусыОтборовРазмещенийТоваров.Подготовлено);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Статус", СписокСтатусов, ВидСравненияКомпоновкиДанных.ВСписке,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Распоряжение", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "ЗаданиеНаПеревозку", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Проведен", Истина,,,Истина);
ИначеЕсли ФильтрЗаданий = "ПоТекущемуРаспоряжению" Тогда
Если Не ТекущиеРаспоряжения = Неопределено Тогда
Если ТекущиеРаспоряжения.РаспоряжениеНаОтбор = Неопределено Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Ссылка", Документы.ОтборРазмещениеТоваров.ПустаяСсылка(),,,Истина);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Статус", Неопределено,,,Ложь);
Если ТипЗнч(ТекущиеРаспоряжения.РаспоряжениеНаОтбор) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Распоряжение", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "ЗаданиеНаПеревозку", ТекущиеРаспоряжения.РаспоряжениеНаОтбор,,,Истина);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Распоряжение", ТекущиеРаспоряжения.РаспоряжениеНаОтбор,,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "ЗаданиеНаПеревозку", Неопределено,,,Ложь);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ЗаданияВРаботе, "Проведен", Истина,,,Ложь);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Склад", Склад, ВидСравненияКомпоновкиДанных.Равно,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ПомещениеОтправитель", Помещение,
ВидСравненияКомпоновкиДанных.Равно,,ЗначениеЗаполнено(Помещение));
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ДатаОтгрузки", КонецДня(ДатаОтгрузки),
ВидСравненияКомпоновкиДанных.МеньшеИЛИРавно,,ЗначениеЗаполнено(ДатаОтгрузки));
ЗаполнитьРаспоряженияНаОтгрузку(Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Ссылка", Неопределено,,,Ложь);
Если ФильтрОрдеров = "" Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Статус", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Распоряжение", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ЗаданиеНаПеревозку", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Проведен", Истина,,,Ложь);
ИначеЕсли ФильтрОрдеров = "ВсеНеотгруженные" Тогда
СписокСтатусов = Новый СписокЗначений;
СписокСтатусов.Добавить(Перечисления.СтатусыРасходныхОрдеров.Подготовлен);
СписокСтатусов.Добавить(Перечисления.СтатусыРасходныхОрдеров.КОтбору);
СписокСтатусов.Добавить(Перечисления.СтатусыРасходныхОрдеров.КПроверке);
СписокСтатусов.Добавить(Перечисления.СтатусыРасходныхОрдеров.Проверен);
СписокСтатусов.Добавить(Перечисления.СтатусыРасходныхОрдеров.КОтгрузке);
СписокСтатусов.Добавить(Перечисления.СтатусыОрдеровНаПеремещение.КОтбору);
СписокСтатусов.Добавить(Перечисления.СтатусыОрдеровНаПеремещение.КПроверке);
СписокСтатусов.Добавить(Перечисления.СтатусыОрдеровНаПеремещение.КОтгрузке);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Статус", СписокСтатусов, ВидСравненияКомпоновкиДанных.ВСписке,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Распоряжение", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ЗаданиеНаПеревозку", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Проведен", Истина,,,Истина);
ИначеЕсли ФильтрОрдеров = "ПоТекущемуРаспоряжению" Тогда
Если Не ТекущиеРаспоряжения = Неопределено Тогда
Если ТекущиеРаспоряжения.РаспоряжениеНаОтгрузку = Неопределено Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Ссылка", Документы.РасходныйОрдерНаТовары.ПустаяСсылка(),,,Истина);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Статус", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Проведен", Истина,,,Ложь);
Если ТипЗнч(ТекущиеРаспоряжения.РаспоряжениеНаОтгрузку) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Ссылка", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ЗаданиеНаПеревозку", ТекущиеРаспоряжения.РаспоряжениеНаОтгрузку,,,Истина);
Иначе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Ссылка КАК Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК РасходныйОрдерНаТоварыТоварыПоРаспоряжениям
|ГДЕ
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение = &Распоряжение";
Запрос.УстановитьПараметр("Распоряжение", ТекущиеРаспоряжения.РаспоряжениеНаОтгрузку);
РасходныеОрдера = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Ссылка", РасходныеОрдера, ВидСравненияКомпоновкиДанных.ВСписке,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ЗаданиеНаПеревозку", Неопределено,,,Ложь);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьРаспоряженияНаОтгрузку(ПроверятьИзменениеПараметров = Ложь)
Если Не ЗначениеЗаполнено(Склад) Тогда
РаспоряженияНаОтгрузку.Очистить();
Возврат;
КонецЕсли;
Если Не Пользователи.ЭтоПолноправныйПользователь(Неопределено) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| Склады.Ссылка = &Склад";
Запрос.УстановитьПараметр("Склад", Склад);
Если Запрос.Выполнить().Пустой() Тогда
РаспоряженияНаОтгрузку.Очистить();
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ЗаданиеНаПеревозку", ТекущееЗаданиеНаПеревозкуОтгрузка);
Запрос.УстановитьПараметр("ДатаОтгрузки", ?(ЗначениеЗаполнено(ДатаОтгрузки), КонецДня(ДатаОтгрузки) + 1, ДатаОтгрузки));
ОформлятьСначалаНакладные = Константы.ПорядокОформленияНакладныхРасходныхОрдеров.Получить() = Перечисления.ПорядокОформленияНакладныхРасходныхОрдеров.СначалаНакладные;
Запрос.УстановитьПараметр("ОформлятьСначалаНакладные", ОформлятьСначалаНакладные);
Запрос.УстановитьПараметр("ОтображениеДеталейОтгрузка", ОтображениеДеталейОтгрузка);
Состояния = Новый Массив;
Если СостояниеОтгрузки = "ВсеВРаботе" Тогда
Состояния.Добавить(Перечисления.СостоянияОтбораТоваров.ВПроцессеОтбора);
Состояния.Добавить(Перечисления.СостоянияОтбораТоваров.ОжидаетсяОтбор);
Состояния.Добавить(Перечисления.СостоянияОтбораТоваров.ОжидаетсяОтгрузка);
ИначеЕсли СостояниеОтгрузки = "" Тогда
Для Каждого Значение Из Перечисления.СостоянияОтбораТоваров Цикл
Состояния.Добавить(Значение);
КонецЦикла;
Иначе
Состояния.Добавить(Перечисления.СостоянияОтбораТоваров[СостояниеОтгрузки]);
КонецЕсли;
Запрос.УстановитьПараметр("Состояния", Состояния);
Если ПроверятьИзменениеПараметров
И ТипЗнч(ПараметрыРаспоряженияНаОтгрузку) = Тип("ФиксированнаяСтруктура")
И ОбщегоНазначенияУТКлиентСервер.СтруктурыРавны(ПараметрыРаспоряженияНаОтгрузку, Запрос.Параметры, "") Тогда
Возврат;
КонецЕсли;
ПараметрыРаспоряженияНаОтгрузку = Новый Структура("Склад, ЗаданиеНаПеревозку, ДатаОтгрузки");
ЗаполнитьЗначенияСвойств(ПараметрыРаспоряженияНаОтгрузку, Запрос.Параметры);
ПараметрыРаспоряженияНаОтгрузку.Вставить("ОтображениеДеталейОтгрузка", ОтображениеДеталейОтгрузка);
ПараметрыРаспоряженияНаОтгрузку = Новый ФиксированнаяСтруктура(ПараметрыРаспоряженияНаОтгрузку);
ТекстЗапроса = "";
ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров =
Константы.ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров.Получить();
Если ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров <> 0 Тогда
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| ТоварыКОтгрузкеОбороты.ДокументОтгрузки КАК ДокументОтгрузки,
| ТоварыКОтгрузкеОбороты.Номенклатура КАК Номенклатура,
| ТоварыКОтгрузкеОбороты.Характеристика КАК Характеристика,
| ТоварыКОтгрузкеОбороты.Назначение КАК Назначение,
| ТоварыКОтгрузкеОбороты.Серия КАК Серия,
| ТоварыКОтгрузкеОбороты.Склад КАК Склад,
| ТоварыКОтгрузкеОбороты.Получатель КАК Получатель,
| ТоварыКОтгрузкеОбороты.КОтгрузкеПриход КАК Количество
|
|ПОМЕСТИТЬ ТоварыКОтгрузкеОбороты
|ИЗ
| РегистрНакопления.ТоварыКОтгрузке.Обороты(
| ,
| ,
| ,
| &УсловиеСоединенияОбороты) КАК ТоварыКОтгрузкеОбороты
|
|ИНДЕКСИРОВАТЬ ПО
| Склад,
| Получатель,
| ДокументОтгрузки,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия
|;
|
|
|";
КонецЕсли;
Если НЕ ОтображениеДеталейОтгрузка Тогда
Если СкладыСервер.НачинатьОтгрузкуПослеФормированияЗаданияНаПеревозку(Склад) Тогда
ТекстЗапроса = ТекстЗапроса +
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СостоянияИРеквизитыДоставки.Распоряжение КАК ДокументОтгрузки,
| СостоянияИРеквизитыДоставки.ПолучательОтправитель КАК Получатель
|ПОМЕСТИТЬ ВТРаспоряженияСДоставкойПоЗаданиям
|ИЗ
| РегистрСведений.СостоянияИРеквизитыДоставки КАК СостоянияИРеквизитыДоставки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварыКДоставке КАК ОтказОтПеревозки
| ПО (ОтказОтПеревозки.ЗаданиеНаПеревозку = ЗНАЧЕНИЕ(Документ.ЗаданиеНаПеревозку.ПустаяСсылка))
| И СостоянияИРеквизитыДоставки.Склад = ОтказОтПеревозки.Склад
| И (ОтказОтПеревозки.Распоряжение = СостоянияИРеквизитыДоставки.Распоряжение)
|ГДЕ
| СостоянияИРеквизитыДоставки.Склад = &Склад
| И СостоянияИРеквизитыДоставки.СпособДоставки В(&СпособыДоставки)
| И ОтказОтПеревозки.Распоряжение ЕСТЬ NULL
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВложенныйЗапрос.ДокументОтгрузки КАК ДокументОтгрузки,
| ВложенныйЗапрос.Получатель КАК Получатель,
| МИНИМУМ(ВложенныйЗапрос.Состояние) КАК Состояние
|ПОМЕСТИТЬ ВТРаспоряженияКОтгрузке
|ИЗ
| (ВЫБРАТЬ
| РаспоряженияКОтгрузке.ДокументОтгрузки КАК ДокументОтгрузки,
| РаспоряженияКОтгрузке.Получатель КАК Получатель,
| РаспоряженияКОтгрузке.Номенклатура КАК Номенклатура,
| РаспоряженияКОтгрузке.Характеристика КАК Характеристика,
| РаспоряженияКОтгрузке.Назначение КАК Назначение,
| РаспоряженияКОтгрузке.Серия КАК Серия,
| ВЫБОР
| КОГДА &ОжидаетсяОтбор
| ТОГДА 0
| КОГДА РаспоряженияКОтгрузке.СобираетсяОстаток <> 0
| ТОГДА 1
| КОГДА РаспоряженияКОтгрузке.СобраноОстаток <> 0
| ТОГДА 2
| КОГДА РаспоряженияКОтгрузке.КОформлениюОстаток <> 0
| ТОГДА 3
| ИНАЧЕ 404
| КОНЕЦ КАК Состояние
| ИЗ
| РегистрНакопления.ТоварыКОтгрузке.Остатки(&ДатаОтгрузки, Склад = &Склад) КАК РаспоряженияКОтгрузке
| ГДЕ &УсловиеТоварыКОтбору) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ДокументОтгрузки,
| ВложенныйЗапрос.Получатель
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументОтгрузки
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка КАК Ссылка,
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение КАК Распоряжение,
| ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК ПолучательОтправитель
|ПОМЕСТИТЬ ВТОтборЗаданияНаПеревозку
|ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
|ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Проведен
| И ЗаданиеНаПеревозкуРаспоряжения.Склад = &Склад
| И ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыЗаданийНаПеревозку.КПогрузке))
|
|ИНДЕКСИРОВАТЬ ПО
| Распоряжение
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТИПЗНАЧЕНИЯ(ЗаданияНаПеревозку.Ссылка) КАК ТипДокумента,
| ЗаданияНаПеревозку.Ссылка КАК Распоряжение,
| ЗаданияНаПеревозку.Ссылка КАК ЗаданиеНаПеревозку,
| ЗаданияНаПеревозку.Ссылка.Номер КАК Номер,
| ЗаданияНаПеревозку.Ссылка.ДатаВремяРейсаПланС КАК Дата,
| НЕОПРЕДЕЛЕНО КАК Получатель,
| ВЫБОР
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ КАК Состояние,
| 1 КАК ИндексКартинки
|ИЗ
| ВТОтборЗаданияНаПеревозку КАК ЗаданияНаПеревозку
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРаспоряженияКОтгрузке КАК ВТРаспоряженияКОтгрузке
| ПО (ВТРаспоряженияКОтгрузке.ДокументОтгрузки = ЗаданияНаПеревозку.Распоряжение)
|
|СГРУППИРОВАТЬ ПО
| ЗаданияНаПеревозку.Ссылка,
| ЗаданияНаПеревозку.Ссылка.Номер,
| ЗаданияНаПеревозку.Ссылка.ДатаВремяРейсаПланС,
| ЗаданияНаПеревозку.Ссылка
|
|ИМЕЮЩИЕ
| ВЫБОР
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА МИНИМУМ(ВТРаспоряженияКОтгрузке.Состояние) = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ В (&Состояния)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТИПЗНАЧЕНИЯ(РаспоряженияКОтгрузке.ДокументОтгрузки)
|,
| РаспоряженияКОтгрузке.ДокументОтгрузки,
| ЗНАЧЕНИЕ(Документ.ЗаданиеНаПеревозку.ПустаяСсылка),
| ЕСТЬNULL(РеестрДокументов.НомерДокументаИБ, """"),
| ЕСТЬNULL(РеестрДокументов.ДатаДокументаИБ, ДАТАВРЕМЯ(1,1,1)),
| РаспоряженияКОтгрузке.Получатель,
| ВЫБОР
| КОГДА РаспоряженияКОтгрузке.Состояние = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА РаспоряженияКОтгрузке.Состояние = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА РаспоряженияКОтгрузке.Состояние = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА РаспоряженияКОтгрузке.Состояние = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ,
| 0
|ИЗ
| ВТРаспоряженияКОтгрузке КАК РаспоряженияКОтгрузке
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументов
| ПО РаспоряженияКОтгрузке.ДокументОтгрузки = РеестрДокументов.Ссылка
| И (НЕ РеестрДокументов.ДополнительнаяЗапись)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТРаспоряженияСДоставкойПоЗаданиям КАК ВТРаспоряженияСДоставкойПоЗаданиям
| ПО РаспоряженияКОтгрузке.ДокументОтгрузки = ВТРаспоряженияСДоставкойПоЗаданиям.ДокументОтгрузки
|ГДЕ
| ВТРаспоряженияСДоставкойПоЗаданиям.ДокументОтгрузки ЕСТЬ NULL
| И ВЫБОР
| КОГДА РаспоряженияКОтгрузке.Состояние = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА РаспоряженияКОтгрузке.Состояние = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА РаспоряженияКОтгрузке.Состояние = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА РаспоряженияКОтгрузке.Состояние = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ В (&Состояния)
|
|УПОРЯДОЧИТЬ ПО
| Дата";
СпособыДоставки = ДоставкаТоваровКлиентСервер.СпособыДоставкиДоКлиентаСНашимУчастием(
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками"));
Запрос.УстановитьПараметр("СпособыДоставки", СпособыДоставки);
Иначе
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВложенныйЗапрос.ДокументОтгрузки КАК Распоряжение,
| ВложенныйЗапрос.Получатель КАК Получатель,
| ВЫБОР
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ КАК Состояние
|ПОМЕСТИТЬ РаспоряженияИСостояния
|ИЗ
| (ВЫБРАТЬ
| РаспоряженияКОтгрузке.ДокументОтгрузки КАК ДокументОтгрузки,
| РаспоряженияКОтгрузке.Получатель КАК Получатель,
| РаспоряженияКОтгрузке.Номенклатура КАК Номенклатура,
| РаспоряженияКОтгрузке.Характеристика КАК Характеристика,
| РаспоряженияКОтгрузке.Назначение КАК Назначение,
| РаспоряженияКОтгрузке.Серия КАК Серия,
| ВЫБОР
| КОГДА &ОжидаетсяОтбор
| ТОГДА 0
| КОГДА РаспоряженияКОтгрузке.СобираетсяОстаток <> 0
| ТОГДА 1
| КОГДА РаспоряженияКОтгрузке.СобраноОстаток <> 0
| ТОГДА 2
| КОГДА РаспоряженияКОтгрузке.КОформлениюОстаток <> 0
| ТОГДА 3
| ИНАЧЕ 404
| КОНЕЦ КАК Состояние
| ИЗ
| РегистрНакопления.ТоварыКОтгрузке.Остатки(&ДатаОтгрузки, Склад = &Склад) КАК РаспоряженияКОтгрузке
| ГДЕ &УсловиеТоварыКОтбору) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ДокументОтгрузки,
| ВложенныйЗапрос.Получатель
|
|ИМЕЮЩИЕ
| ВЫБОР
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ В (&Состояния)
|;
|
|
|ВЫБРАТЬ
| РаспоряженияИСостояния.Распоряжение КАК Распоряжение,
| РаспоряженияИСостояния.Получатель КАК Получатель,
| ЕСТЬNULL(РеестрДокументов.НомерДокументаИБ, """") КАК Номер,
| ЕСТЬNULL(РеестрДокументов.ДатаДокументаИБ, ДАТАВРЕМЯ(1,1,1)) КАК Дата,
| ТИПЗНАЧЕНИЯ(РаспоряженияИСостояния.Распоряжение)
| КАК ТипДокумента,
| РаспоряженияИСостояния.Состояние,
| 0 КАК ИндексКартинки
|ИЗ
| РаспоряженияИСостояния КАК РаспоряженияИСостояния
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументов
| ПО РаспоряженияИСостояния.Распоряжение = РеестрДокументов.Ссылка
| И (НЕ РеестрДокументов.ДополнительнаяЗапись)
|
|УПОРЯДОЧИТЬ ПО
| РеестрДокументов.ДатаДокументаИБ";
КонецЕсли;
Иначе
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВложенныйЗапрос.ДокументОтгрузки КАК Распоряжение,
| ВложенныйЗапрос.Получатель КАК Получатель,
| ВЫБОР
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ КАК Состояние
|ПОМЕСТИТЬ РаспоряженияИСостояния
|ИЗ
| (ВЫБРАТЬ
| РаспоряженияКОтгрузке.ДокументОтгрузки КАК ДокументОтгрузки,
| РаспоряженияКОтгрузке.Получатель КАК Получатель,
| РаспоряженияКОтгрузке.Номенклатура КАК Номенклатура,
| РаспоряженияКОтгрузке.Характеристика КАК Характеристика,
| РаспоряженияКОтгрузке.Назначение КАК Назначение,
| РаспоряженияКОтгрузке.Серия КАК Серия,
| ВЫБОР
| КОГДА &ОжидаетсяОтбор
| ТОГДА 0
| КОГДА РаспоряженияКОтгрузке.СобираетсяОстаток <> 0
| ТОГДА 1
| КОГДА РаспоряженияКОтгрузке.СобраноОстаток <> 0
| ТОГДА 2
| КОГДА РаспоряженияКОтгрузке.КОформлениюОстаток <> 0
| ТОГДА 3
| ИНАЧЕ 404
| КОНЕЦ КАК Состояние
| ИЗ
| РегистрНакопления.ТоварыКОтгрузке.Остатки(
| &ДатаОтгрузки,
| Склад = &Склад
| И ДокументОтгрузки В
| (ВЫБРАТЬ
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение КАК ДокументОтгрузки
| ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка = &ЗаданиеНаПеревозку)) КАК РаспоряженияКОтгрузке
| ГДЕ &УсловиеТоварыКОтбору) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ДокументОтгрузки,
| ВложенныйЗапрос.Получатель
|
|ИМЕЮЩИЕ
| ВЫБОР
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 0
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтбор)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 1
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ВПроцессеОтбора)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 2
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОтгрузка)
| КОГДА МИНИМУМ(ВложенныйЗапрос.Состояние) = 3
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ОжидаетсяОформлениеНакладных)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка)
| КОНЕЦ В (&Состояния)
|;
|
|
|ВЫБРАТЬ
| ТИПЗНАЧЕНИЯ(РаспоряженияИСостояния.Распоряжение)
| КАК ТипДокумента,
| 3 КАК ИндексКартинки,
| РаспоряженияИСостояния.Распоряжение,
| &ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку,
| РаспоряженияИСостояния.Получатель,
| ЕСТЬNULL(РеестрДокументов.НомерДокументаИБ, """") КАК Номер,
| ЕСТЬNULL(РеестрДокументов.ДатаДокументаИБ, ДАТАВРЕМЯ(1,1,1)) КАК Дата,
| РаспоряженияИСостояния.Состояние,
| 1 КАК Порядок
|ИЗ
| РаспоряженияИСостояния КАК РаспоряженияИСостояния
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументов
| ПО РаспоряженияИСостояния.Распоряжение = РеестрДокументов.Ссылка
| И (НЕ РеестрДокументов.ДополнительнаяЗапись)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТИПЗНАЧЕНИЯ(ЗаданиеНаПеревозку.Ссылка),
| 2,
| ЗаданиеНаПеревозку.Ссылка,
| ЗаданиеНаПеревозку.Ссылка,
| НЕОПРЕДЕЛЕНО,
| """",
| ДАТАВРЕМЯ(1, 1, 1),
| ЗНАЧЕНИЕ(Перечисление.СостоянияОтбораТоваров.ПустаяСсылка),
| 0
|ИЗ
| Документ.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку
|ГДЕ
| ЗаданиеНаПеревозку.Ссылка = &ЗаданиеНаПеревозку
|
|УПОРЯДОЧИТЬ ПО
| Порядок,
| Дата";
КонецЕсли;
Если ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров <> 0 Тогда
ОжидаетсяОтбор =
" &ОформлятьСначалаНакладные
| И ВЫБОР
| КОГДА РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.КОформлениюОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток >= 0
| ТОГДА РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.КОформлениюОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток
| ИНАЧЕ -(РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.КОформлениюОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток)
| КОНЕЦ > ВЫБОР
| КОГДА РаспоряженияКОтгрузке.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&МерныеТипыЕдиницИзмерений)
| ТОГДА &ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров / 100 * ТоварыКОтгрузкеОбороты.Количество
| ИНАЧЕ 0
| КОНЕЦ
| ИЛИ НЕ &ОформлятьСначалаНакладные
| И ВЫБОР
| КОГДА РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток >= 0
| ТОГДА РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток
| ИНАЧЕ -(РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток)
| КОНЕЦ > ВЫБОР
| КОГДА РаспоряженияКОтгрузке.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&МерныеТипыЕдиницИзмерений)
| ТОГДА &ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров / 100 * ТоварыКОтгрузкеОбороты.Количество
| ИНАЧЕ 0
| КОНЕЦ";
УсловиеТоварыКОтбору = "
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварыКОтгрузкеОбороты КАК ТоварыКОтгрузкеОбороты
| ПО РаспоряженияКОтгрузке.ДокументОтгрузки = ТоварыКОтгрузкеОбороты.ДокументОтгрузки
| И РаспоряженияКОтгрузке.Номенклатура = ТоварыКОтгрузкеОбороты.Номенклатура
| И РаспоряженияКОтгрузке.Характеристика = ТоварыКОтгрузкеОбороты.Характеристика
| И РаспоряженияКОтгрузке.Назначение = ТоварыКОтгрузкеОбороты.Назначение
| И РаспоряженияКОтгрузке.Серия = ТоварыКОтгрузкеОбороты.Серия
| И РаспоряженияКОтгрузке.Склад = ТоварыКОтгрузкеОбороты.Склад
| И РаспоряженияКОтгрузке.Получатель = ТоварыКОтгрузкеОбороты.Получатель
|ГДЕ
|
| РаспоряженияКОтгрузке.КОформлениюОстаток >
| ВЫБОР
| КОГДА РаспоряженияКОтгрузке.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&МерныеТипыЕдиницИзмерений)
| ТОГДА &ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров / 100 * ТоварыКОтгрузкеОбороты.Количество
| ИНАЧЕ 0
| КОНЕЦ
|
| ИЛИ РаспоряженияКОтгрузке.СобираетсяОстаток <> 0
| ИЛИ РаспоряженияКОтгрузке.СобраноОстаток <> 0
| ИЛИ (&ОжидаетсяОтбор)";
УсловиеТоварыКОтбору = СтрЗаменить(УсловиеТоварыКОтбору,"&ОжидаетсяОтбор", ОжидаетсяОтбор);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"ГДЕ &УсловиеТоварыКОтбору", УсловиеТоварыКОтбору);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&ОжидаетсяОтбор", ОжидаетсяОтбор);
Запрос.УстановитьПараметр("ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров",ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров);
Запрос.УстановитьПараметр("МерныеТипыЕдиницИзмерений", Справочники.УпаковкиЕдиницыИзмерения.МерныеТипыЕдиницИзмерений());
Иначе
ОжидаетсяОтбор =
"&ОформлятьСначалаНакладные
| И РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.КОформлениюОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток > 0
| ИЛИ НЕ &ОформлятьСначалаНакладные
| И РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток > 0";
УсловиеТоварыКОтбору =
"ГДЕ
| (РаспоряженияКОтгрузке.КОформлениюОстаток <> 0
| ИЛИ (&ОжидаетсяОтбор)
| ИЛИ РаспоряженияКОтгрузке.СобираетсяОстаток <> 0
| ИЛИ РаспоряженияКОтгрузке.СобраноОстаток <> 0)";
УсловиеТоварыКОтбору = СтрЗаменить(УсловиеТоварыКОтбору,"&ОжидаетсяОтбор", ОжидаетсяОтбор);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"ГДЕ &УсловиеТоварыКОтбору", УсловиеТоварыКОтбору);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&ОжидаетсяОтбор", ОжидаетсяОтбор);
КонецЕсли;
Если ОтображениеДеталейОтгрузка Тогда
УсловиеСоединенияОбороты = "Склад = &Склад
| И ДокументОтгрузки В
| (ВЫБРАТЬ
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение КАК ДокументОтгрузки
| ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка = &ЗаданиеНаПеревозку)";
Иначе
УсловиеСоединенияОбороты = "Склад = &Склад";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеСоединенияОбороты", УсловиеСоединенияОбороты);
Запрос.Текст = ТекстЗапроса;
Если ЗначениеЗаполнено(Элементы.РаспоряженияНаОтгрузку.ТекущаяСтрока) Тогда
ТекущаяСтрокаРаспоряженияНаОтгрузку =
РаспоряженияНаОтгрузку.НайтиПоИдентификатору(Элементы.РаспоряженияНаОтгрузку.ТекущаяСтрока);
Если ТекущаяСтрокаРаспоряженияНаОтгрузку <> Неопределено Тогда
ТекущееРаспоряжение = ТекущаяСтрокаРаспоряженияНаОтгрузку.Распоряжение;
КонецЕсли;
Иначе
ТекущееРаспоряжение = Неопределено;
КонецЕсли;
РаспоряженияНаОтгрузку.Загрузить(Запрос.Выполнить().Выгрузить());
Если ЗначениеЗаполнено(ТекущееРаспоряжение) Тогда
Строки = РаспоряженияНаОтгрузку.НайтиСтроки(Новый Структура("Распоряжение", ТекущееРаспоряжение));
Если Строки.Количество() > 0 Тогда
Элементы.РаспоряженияНаОтгрузку.ТекущаяСтрока = Строки[0].ПолучитьИдентификатор();
КонецЕсли;
ИначеЕсли РаспоряженияНаОтгрузку.Количество() > 0 Тогда
Элементы.РаспоряженияНаОтгрузку.ТекущаяСтрока = РаспоряженияНаОтгрузку[0].ПолучитьИдентификатор();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаОповещенияСервер(ИмяСобытия, СтруктураРаспоряжений)
Если ИмяСобытия = "ИзменениеСписка_ОрдераВРаботе" Тогда
ЗаполнитьРаспоряженияНаОтгрузку(Истина);
ОбновитьСостоянияРаспоряженийНаОтбор();
Элементы.ОрдераВРаботе.Обновить();
ИначеЕсли ИмяСобытия = "ИзменениеСписка_ОрдераВРаботе"
Или ИмяСобытия = "Запись_РасходныйОрдерНаТовары"
Или ИмяСобытия = "Запись_ОрдерНаПеремещениеТоваров" Тогда
УстановитьОтборыВОсновныхСписках();
ИначеЕсли ИмяСобытия = "ИзменениеСписка_ЗаданияВРаботе" Тогда
ОбновитьСостоянияРаспоряженийНаОтбор();
КонецЕсли;
УстановитьОтборыВЗависимыхСписках(СтруктураРаспоряжений);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСостоянияРаспоряженийНаОтборКлиент()
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаОтбор Тогда
ОбновитьСостоянияРаспоряженийНаОтбор();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСостоянияРаспоряженийНаОтбор()
Перем ТекущееРаспоряжение;
Идентификатор = Элементы.РаспоряженияНаОтбор.ТекущаяСтрока;
Если Идентификатор <> Неопределено Тогда
ЭлементКоллекции = РаспоряженияНаОтбор.НайтиПоИдентификатору(Идентификатор);
Если ЭлементКоллекции <> Неопределено Тогда
ЭлементКоллекции.Свойство("Распоряжение", ТекущееРаспоряжение);
КонецЕсли;
КонецЕсли;
СкладыСервер.РассчитатьСостоянийРаспоряженийНаОтбор(
Склад,
Помещение,
РаспоряженияНаОтбор,
ОтображениеДеталейОтбор,
ТекущееЗаданиеНаПеревозкуОтбор,
СостояниеОтбора);
Если ЗначениеЗаполнено(ТекущееРаспоряжение) Тогда
Строки = РаспоряженияНаОтбор.НайтиСтроки(Новый Структура("Распоряжение", ТекущееРаспоряжение));
Если Строки.Количество() > 0 Тогда
Элементы.РаспоряженияНаОтбор.ТекущаяСтрока = Строки[0].ПолучитьИдентификатор();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораФильтраОрдеров()
Если Не ДоступноСозданиеРасходныхОрдеров Тогда
СписокВыбора = Элементы.ФильтрОрдеровАвтоматическоеФормированиеРасходныхОрдеров.СписокВыбора;
ЭлементСписокВыбора = Элементы.ФильтрОрдеровАвтоматическоеФормированиеРасходныхОрдеров;
Иначе
СписокВыбора = Элементы.ФильтрОрдеров.СписокВыбора;
ЭлементСписокВыбора = Элементы.ФильтрОрдеров;
КонецЕсли;
ЭлементСписка = СписокВыбора.НайтиПоЗначению("ВсеНеотгруженные");
Если СкладыСервер.ИспользоватьСтатусыОрдеров(Склад, Ложь, Истина) Тогда
Если ЭлементСписка = Неопределено Тогда
ЭлементСписка = СписокВыбора.Вставить(1, "ВсеНеотгруженные");
КонецЕсли;
ЭлементСписка.Представление = НСтр("ru = 'Все неотгруженные'");
Иначе
Если ЭлементСписка <> Неопределено Тогда
СписокВыбора.Удалить(ЭлементСписка);
Если ФильтрОрдеров = "ВсеНеотгруженные" Тогда
ФильтрОрдеров = СписокВыбора[0].Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ДоступноСозданиеРасходныхОрдеров Тогда
ЭлементСписка = СписокВыбора.НайтиПоЗначению("ПоТекущемуРаспоряжению");
Если ЭлементСписка <> Неопределено Тогда
СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
Если ФильтрОрдеров = "ПоТекущемуРаспоряжению" Тогда
ФильтрОрдеров = СписокВыбора[0].Значение;
КонецЕсли;
КонецЕсли;
Если СписокВыбора.Количество() = 1 Тогда
ЭлементСписокВыбора.Видимость = Ложь;
Иначе
ЭлементСписокВыбора.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработкиОрдеров
&НаСервере
Процедура СоздатьОрдераСервер()
Если НЕ НазначитьЗонуОтгрузки Тогда
ЗонаОтгрузки = Справочники.СкладскиеЯчейки.ПустаяСсылка();
КонецЕсли;
Получатели = Новый Соответствие;
ЗаданияНаПеревозку = Новый Массив;
СтруктураПараметровСозданияРасходныхОрдеров = СкладыСервер.ПараметрыПереоформленияРасходныхОрдеров();
СтруктураПараметровСозданияРасходныхОрдеров.Склад = Склад;
Если ПоОдномуПомещению Тогда
СтруктураПараметровСозданияРасходныхОрдеров.Помещение = ПомещениеДляСозданияРасходныхОрдеров;
КонецЕсли;
СтруктураПараметровСозданияРасходныхОрдеров.ЗонаОтгрузки = ЗонаОтгрузки;
Если ПоВсемРаспоряжениям = 0 Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВложенныйЗапрос.Получатель КАК Получатель
|ИЗ
| (ВЫБРАТЬ
| РаспоряженияКОтгрузке.ДокументОтгрузки КАК ДокументОтгрузки,
| РаспоряженияКОтгрузке.Получатель КАК Получатель,
| РаспоряженияКОтгрузке.Номенклатура КАК Номенклатура,
| РаспоряженияКОтгрузке.Характеристика КАК Характеристика,
| РаспоряженияКОтгрузке.Назначение КАК Назначение,
| РаспоряженияКОтгрузке.Серия КАК Серия
| ИЗ
| РегистрНакопления.ТоварыКОтгрузке.Остатки(&ДатаОтгрузки, Склад = &Склад) КАК РаспоряженияКОтгрузке
| ГДЕ
| (&ОформлятьСначалаНакладные
| И РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.КОформлениюОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток > 0
| ИЛИ НЕ &ОформлятьСначалаНакладные
| И РаспоряженияКОтгрузке.КОтгрузкеОстаток - РаспоряженияКОтгрузке.СобираетсяОстаток - РаспоряженияКОтгрузке.СобраноОстаток > 0
| ИЛИ РаспоряженияКОтгрузке.СобираетсяОстаток <> 0
| ИЛИ РаспоряженияКОтгрузке.СобраноОстаток <> 0)) КАК ВложенныйЗапрос";
ДатаОтгрузкиДляЗапроса = ?(ЗначениеЗаполнено(ДатаОтгрузки),
КонецДня(ДатаОтгрузки) + 1,
ДатаОтгрузки);
ОформлятьСначалаНакладные = Константы.ПорядокОформленияНакладныхРасходныхОрдеров.Получить()
= Перечисления.ПорядокОформленияНакладныхРасходныхОрдеров.СначалаНакладные;
Запрос.УстановитьПараметр("ОформлятьСначалаНакладные", ОформлятьСначалаНакладные);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ДатаОтгрузки", ДатаОтгрузкиДляЗапроса);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Получатели.Вставить(Выборка.Получатель, Новый Массив);
КонецЦикла;
Иначе
Для Каждого СтрИД Из Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки Цикл
СтрТабл = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(СтрИД);
Если СтрТабл = Неопределено Тогда
ТекстПредупреждения = НСтр("ru = 'Выберите распоряжение на отгрузку товаров.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);
Возврат;
КонецЕсли;
Если ТипЗнч(СтрТабл.Распоряжение) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
СтруктураПараметровСозданияРасходныхОрдеров.ЗаданиеНаПеревозку = СтрТабл.Распоряжение;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение,
| ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Получатель
|ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
|ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Получатель";
Запрос.УстановитьПараметр("Ссылка", СтрТабл.Распоряжение);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("Получатель") Цикл
СтруктураПараметровСозданияРасходныхОрдеров.Получатель = Выборка.Получатель;
Пока Выборка.Следующий() Цикл
СтруктураПараметровСозданияРасходныхОрдеров.РаспоряженияНаОтгрузку.Добавить(Выборка.Распоряжение);
КонецЦикла;
СкладыСервер.ПереоформитьРасходныеОрдера(СтруктураПараметровСозданияРасходныхОрдеров);
КонецЦикла;
Если ОтображениеДеталейОтгрузка Тогда
Получатели.Очистить();
Прервать;
КонецЕсли;
Иначе
МассивРаспоряжений = Получатели.Получить(СтрТабл.Получатель);
Если МассивРаспоряжений = Неопределено Тогда
МассивРаспоряжений = Новый Массив;
Получатели.Вставить(СтрТабл.Получатель, МассивРаспоряжений);
КонецЕсли;
МассивРаспоряжений.Добавить(СтрТабл.Распоряжение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Получатели.Количество() > 0 Тогда
Если ОтображениеДеталейОтгрузка Тогда
СтруктураПараметровСозданияРасходныхОрдеров.ЗаданиеНаПеревозку = ТекущееЗаданиеНаПеревозкуОтгрузка;
Иначе
СтруктураПараметровСозданияРасходныхОрдеров.ЗаданиеНаПеревозку = Неопределено;
КонецЕсли;
Для Каждого Получатель Из Получатели Цикл
СтруктураПараметровСозданияРасходныхОрдеров.Получатель = Получатель.Ключ;
СтруктураПараметровСозданияРасходныхОрдеров.РаспоряженияНаОтгрузку = Получатель.Значение;
СкладыСервер.ПереоформитьРасходныеОрдера(СтруктураПараметровСозданияРасходныхОрдеров);
КонецЦикла;
КонецЕсли;
УстановитьОтборыВОсновныхСписках();
Если ФильтрОрдеров = "ПоТекущемуРаспоряжению" Тогда
Если ТипЗнч(ТекущееРаспоряжениеНаОтгрузку) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Ссылка", Неопределено,,,Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ЗаданиеНаПеревозку", ТекущееРаспоряжениеНаОтгрузку,,,Истина);
Иначе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Ссылка КАК Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК РасходныйОрдерНаТоварыТоварыПоРаспоряжениям
|ГДЕ
| (РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение = &Распоряжение
| ИЛИ РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Ссылка.ЗаданиеНаПеревозку = &Распоряжение)";
Запрос.УстановитьПараметр("Распоряжение", ТекущееРаспоряжениеНаОтгрузку);
РасходныеОрдера = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "Ссылка", РасходныеОрдера, ВидСравненияКомпоновкиДанных.ВСписке,,Истина);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОрдераВРаботе, "ЗаданиеНаПеревозку", Неопределено,,,Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗапуститьФормированиеОрдеров()
СтруктураПараметровСозданияРасходныхОрдеров = СкладыСервер.ПараметрыПереоформленияРасходныхОрдеров();
СтруктураПараметровСозданияРасходныхОрдеров.Склад = Склад;
Получатели = ПолучателиПоКоторымНетФоновогоЗаданияПереоформленияОрдеров(Склад);
ЕстьОшибка = Ложь;
Для Каждого Получатель Из Получатели Цикл
СтруктураПараметровСозданияРасходныхОрдеров.Получатель = Получатель;
СтруктураВозврата = СкладыСервер.ПереоформитьРасходныеОрдера(СтруктураПараметровСозданияРасходныхОрдеров);
ЕстьОшибка = СтруктураВозврата.ЕстьОшибка Или ЕстьОшибка;
КонецЦикла;
Если ЕстьОшибка Тогда
Элементы.АвтоматическоеФормированиеРасходныхОрдеров.ТекущаяСтраница =
Элементы.СтраницаПроблема;
Иначе
Элементы.АвтоматическоеФормированиеРасходныхОрдеров.ТекущаяСтраница =
Элементы.СтраницаНетПроблем;
КонецЕсли;
УстановитьОтборыВОсновныхСписках();
КонтрольРаботыФоновыхЗаданийФормированияОчередиСервер();
КонецПроцедуры
&НаСервере
Функция УстановитьЗоныОтгрузкиСервер(Знач МассивДокументов)
МассивИзмененныхДокументов = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйОрдерНаТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
|ГДЕ
| РасходныйОрдерНаТовары.ЗонаОтгрузки <> &ЗонаОтгрузки
| И РасходныйОрдерНаТовары.Ссылка В(&МассивДокументов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОрдерНаПеремещениеТоваров.Ссылка
|ИЗ
| Документ.ОрдерНаПеремещениеТоваров КАК ОрдерНаПеремещениеТоваров
|ГДЕ
| ОрдерНаПеремещениеТоваров.ЗонаОтгрузки <> &ЗонаОтгрузки
| И ОрдерНаПеремещениеТоваров.Ссылка В(&МассивДокументов)";
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
Запрос.УстановитьПараметр("ЗонаОтгрузки", ЗонаОтгрузки);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.Заблокировать();
ДокументОбъект.ЗонаОтгрузки = ЗонаОтгрузки;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
МассивИзмененныхДокументов.Добавить(Выборка.Ссылка);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
Элементы.ОрдераВРаботе.Обновить();
Возврат МассивИзмененныхДокументов;
КонецФункции
&НаСервере
Функция НазначитьПриоритетОтгрузкиСервер(Знач МассивДокументов, Приоритет)
МассивИзмененныхДокументов = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйОрдерНаТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
|ГДЕ
| РасходныйОрдерНаТовары.Приоритет <> &Приоритет
| И РасходныйОрдерНаТовары.Ссылка В(&МассивДокументов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОрдерНаПеремещениеТоваров.Ссылка
|ИЗ
| Документ.ОрдерНаПеремещениеТоваров КАК ОрдерНаПеремещениеТоваров
|ГДЕ
| ОрдерНаПеремещениеТоваров.Приоритет <> &Приоритет
| И ОрдерНаПеремещениеТоваров.Ссылка В(&МассивДокументов)";
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
Запрос.УстановитьПараметр("Приоритет", Приоритет);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.Заблокировать();
ДокументОбъект.Приоритет = Приоритет;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
МассивИзмененныхДокументов.Добавить(Выборка.Ссылка);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
Элементы.ОрдераВРаботе.Обновить();
Возврат МассивИзмененныхДокументов;
КонецФункции
&НаСервере
Функция ОрдераИзменитьСтатусСервер(МассивДокументовДляОбработки, СтатусДокумента)
МассивИзмененныхДокументов = Новый Массив;
ЗаменитьЗаданияНаПеревозкуСсылкамиНаРасходныеОрдераВМассиве(МассивДокументовДляОбработки);
МассивДокументов = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(МассивДокументовДляОбработки);
Индекс = МассивДокументов.Количество();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйОрдерНаТовары.Ссылка КАК Ссылка,
| РасходныйОрдерНаТовары.Проведен КАК Проведен,
| РасходныйОрдерНаТовары.Статус КАК Статус,
| ВЫБОР
| КОГДА НастройкиАдресныхСкладов.ИспользоватьАдресноеХранение
| И РасходныйОрдерНаТовары.ДатаОтгрузки >= НастройкиАдресныхСкладов.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ИспользоватьАдресноеХранение
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиАдресныхСкладов КАК НастройкиАдресныхСкладов
| ПО (НастройкиАдресныхСкладов.Склад = РасходныйОрдерНаТовары.Склад)
| И (НастройкиАдресныхСкладов.Помещение = РасходныйОрдерНаТовары.Помещение)
|ГДЕ
| РасходныйОрдерНаТовары.Ссылка В(&МассивДокументов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОрдерНаПеремещениеТоваров.Ссылка,
| ОрдерНаПеремещениеТоваров.Проведен,
| ОрдерНаПеремещениеТоваров.Статус,
| ВЫБОР
| КОГДА НастройкиАдресныхСкладов.ИспользоватьАдресноеХранение
| И ОрдерНаПеремещениеТоваров.ДатаОтгрузки >= НастройкиАдресныхСкладов.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|ИЗ
| Документ.ОрдерНаПеремещениеТоваров КАК ОрдерНаПеремещениеТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиАдресныхСкладов КАК НастройкиАдресныхСкладов
| ПО (НастройкиАдресныхСкладов.Склад = ОрдерНаПеремещениеТоваров.Склад)
| И (НастройкиАдресныхСкладов.Помещение = ОрдерНаПеремещениеТоваров.ПомещениеОтправитель)
|ГДЕ
| ОрдерНаПеремещениеТоваров.Ссылка В(&МассивДокументов)";
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
ТаблицаДанныхДокументов = Запрос.Выполнить().Выгрузить();
Пока Индекс > 0 Цикл
Индекс = Индекс - 1;
СтрМас = МассивДокументов[Индекс];
РеквизитыДокумента = ТаблицаДанныхДокументов.Найти(СтрМас,"Ссылка");
Если Не РеквизитыДокумента.Проведен Тогда
ТекстСообщения = НСтр("ru = 'Статус документа %Документ% не изменен: групповой обработкой можно изменять статусы только для проведенных документов.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", СтрМас);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
МассивДокументов.Удалить(Индекс);
ИначеЕсли СтатусДокумента = "Отгружен"
И ТипЗнч(СтрМас) <> Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
ТекстСообщения = НСтр("ru = 'Статус документа %Документ% не изменен: статус %Отгружен% может быть установлен только для расходных ордеров.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", СтрМас);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Отгружен%", Перечисления.СтатусыРасходныхОрдеров.Отгружен);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
МассивДокументов.Удалить(Индекс);
Иначе
Если ТипЗнч(СтрМас) = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
СтатусЗначениеПеречисления = Перечисления.СтатусыРасходныхОрдеров[СтатусДокумента];
Иначе
СтатусЗначениеПеречисления = Перечисления.СтатусыОрдеровНаПеремещение[СтатусДокумента];
КонецЕсли;
Если РеквизитыДокумента.Статус = СтатусЗначениеПеречисления Тогда
ТекстСообщения = НСтр("ru = 'Статус документа %Документ% не изменен, т.к. документ уже находится в статусе %Статус%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", СтрМас);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%", СтатусЗначениеПеречисления);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
МассивДокументов.Удалить(Индекс);
КонецЕсли;
КонецЕсли;
КонецЦикла;
МассивДокументов = СкладыСервер.ПроверитьОрдераНаВозможностьИзмененияСтатуса(МассивДокументов);
Если МассивДокументов.Количество() = 0 Тогда
Возврат МассивИзмененныхДокументов;
КонецЕсли;
Индекс = МассивДокументов.Количество();
Пока Индекс > 0 Цикл
Индекс = Индекс - 1;
ДокСсылка = МассивДокументов[Индекс];
МожноИзменитьСтатусБезПерезаполнения = Ложь;
РеквизитыДокумента = ТаблицаДанныхДокументов.Найти(ДокСсылка,"Ссылка");
Если ТипЗнч(ДокСсылка) = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
СтатусЗначениеПеречисления = Перечисления.СтатусыРасходныхОрдеров[СтатусДокумента];
Если Не РеквизитыДокумента.ИспользоватьАдресноеХранение
ИЛИ (РеквизитыДокумента.Статус = Перечисления.СтатусыРасходныхОрдеров.КПроверке
ИЛИ РеквизитыДокумента.Статус = Перечисления.СтатусыРасходныхОрдеров.Проверен
ИЛИ РеквизитыДокумента.Статус = Перечисления.СтатусыРасходныхОрдеров.КОтгрузке
ИЛИ РеквизитыДокумента.Статус = Перечисления.СтатусыРасходныхОрдеров.Отгружен)
И (СтатусЗначениеПеречисления = Перечисления.СтатусыРасходныхОрдеров.Проверен
ИЛИ СтатусЗначениеПеречисления = Перечисления.СтатусыРасходныхОрдеров.КОтгрузке
ИЛИ СтатусЗначениеПеречисления= Перечисления.СтатусыРасходныхОрдеров.Отгружен)
ИЛИ (РеквизитыДокумента.Статус = Перечисления.СтатусыРасходныхОрдеров.Подготовлен
И СтатусЗначениеПеречисления = Перечисления.СтатусыРасходныхОрдеров.КОтбору) Тогда
МожноИзменитьСтатусБезПерезаполнения = Истина;
КонецЕсли;
Иначе
СтатусЗначениеПеречисления = Перечисления.СтатусыОрдеровНаПеремещение[СтатусДокумента];
Если Не РеквизитыДокумента.ИспользоватьАдресноеХранение
ИЛИ РеквизитыДокумента.Статус = Перечисления.СтатусыОрдеровНаПеремещение.КПроверке
И СтатусЗначениеПеречисления = Перечисления.СтатусыОрдеровНаПеремещение.КОтгрузке Тогда
МожноИзменитьСтатусБезПерезаполнения = Истина;
КонецЕсли;
КонецЕсли;
Если МожноИзменитьСтатусБезПерезаполнения Тогда
Попытка
ДокументОбъект = ДокСсылка.ПолучитьОбъект();
ДокументОбъект.Заблокировать();
Исключение
МассивДокументов.Удалить(Индекс);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Продолжить;
КонецПопытки;
ДокументМенеджер = Документы[ДокументОбъект.Метаданные().Имя];
ДокументОбъект.Статус = СтатусЗначениеПеречисления;
Если ТипЗнч(ДокСсылка) = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(
НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,ДокументМенеджер).ОтгружаемыеТовары);
Иначе
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(
НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,ДокументМенеджер));
КонецЕсли;
Если СтатусЗначениеПеречисления = Перечисления.СтатусыРасходныхОрдеров.Отгружен Тогда
ДокументОбъект.ДатаОтгрузки = ТекущаяДатаСеанса();
ИначеЕсли СтатусЗначениеПеречисления = Перечисления.СтатусыРасходныхОрдеров.КОтбору Тогда
НоменклатураСервер.ЗаполнитьСерииПоFEFO(ДокументОбъект, ПараметрыУказанияСерий, Ложь);
КонецЕсли;
ДокументМенеджер.ЗаполнитьДействиеВСтроках(ДокументОбъект);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерий);
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
МассивИзмененныхДокументов.Добавить(ДокСсылка);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Иначе
МассивСообщений = ПолучитьСообщенияПользователю(Истина);
ТекстСообщения = НСтр("ru='Статус документа %ОрдерСсылка% не изменен, т.к. есть ошибки заполнения.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%ОрдерСсылка%",ДокументОбъект.Ссылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,ДокументОбъект.Ссылка);
Для Каждого Сообщение Из МассивСообщений Цикл
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
МассивДокументов.Удалить(Индекс);
КонецЕсли;
КонецЦикла;
Если МассивДокументов.Количество() = 0 Тогда
УстановитьОтборыВОсновныхСписках();
Возврат МассивИзмененныхДокументов;
КонецЕсли;
МассивПерезаполненныхДокументов = ЗаполнитьОрдераОтобраннымиТоварамиСервер(МассивДокументов, Истина, СтатусДокумента);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивИзмененныхДокументов,МассивПерезаполненныхДокументов);
УстановитьОтборыВОсновныхСписках();
Возврат МассивИзмененныхДокументов;
КонецФункции
&НаСервере
Процедура ЗаменитьЗаданияНаПеревозкуСсылкамиНаРасходныеОрдераВМассиве(МассивДокументов)
Если Не СкладыСервер.НачинатьОтгрузкуПослеФормированияЗаданияНаПеревозку(Склад) Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйОрдерНаТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
|ГДЕ
| РасходныйОрдерНаТовары.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КОтбору)
| И РасходныйОрдерНаТовары.Проведен
| И РасходныйОрдерНаТовары.ЗаданиеНаПеревозку В(&МассивДокументов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасходныйОрдерНаТовары.Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
|ГДЕ
| РасходныйОрдерНаТовары.Ссылка В(&МассивДокументов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОрдерНаПеремещениеТоваров.Ссылка
|ИЗ
| Документ.ОрдерНаПеремещениеТоваров КАК ОрдерНаПеремещениеТоваров
|ГДЕ
| ОрдерНаПеремещениеТоваров.Ссылка В(&МассивДокументов)";
Запрос.УстановитьПараметр("МассивДокументов",МассивДокументов);
МассивДокументов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьПользователяОбУстановкеСтатусаОрдеров(КоличествоОбработанных, КоличествоВсего, Статус)
Если КоличествоОбработанных > 0 Тогда
ТекстСообщения = НСтр("ru='Для %КоличествоОбработанных% из %КоличествоВсего% выделенных в списке ордеров на отгрузку товаров установлен статус ""%Статус%""'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоОбработанных%", КоличествоОбработанных);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоВсего%", КоличествоВсего);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%", Статус);
ТекстЗаголовка = НСтр("ru='Статус ""%Статус%"" установлен'");
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%Статус%", Статус);
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
Иначе
ТекстСообщения = НСтр("ru='Статус ""%Статус%"" не установлен ни для одного ордера на отгрузку'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%", Статус);
ТекстЗаголовка = НСтр("ru='Статус ""%Статус%"" не установлен'");
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%Статус%", Статус);
ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьОрдераОтобраннымиТоварамиСервер(МассивДокументов, ИзменениеСтатуса, СтатусДокумента = Неопределено)
ЗаменитьЗаданияНаПеревозкуСсылкамиНаРасходныеОрдераВМассиве(МассивДокументов);
ПараметрыЗаполнения = СкладыСервер.ПараметрыЗаполненияОрдеровОтобраннымиТоварами();
ПараметрыЗаполнения.РежимЗаполнения = "Множественное";
ПараметрыЗаполнения.ИзменениеСтатуса = ИзменениеСтатуса;
ПараметрыЗаполнения.СтатусДокумента = СтатусДокумента;
ПараметрыЗаполнения.МассивДокументов = МассивДокументов;
Возврат СкладыСервер.ЗаполнитьОрдераОтобраннымиТоварами(ПараметрыЗаполнения);
КонецФункции
&НаСервере
Процедура НазначитьЗаданиеНаПеревозкуСервер(ЗаданиеНаПеревозку, ДополнительныеПараметры)
ОбрабатываемыеОрдера = ДополнительныеПараметры.Ордера;
НеобработанныеОрдера = ДополнительныеПараметры.НеобработанныеОрдера;
СписокОрдеров = Элементы.ОрдераВРаботе;
СтатусЗадания = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗаданиеНаПеревозку, "Статус");
ОповеститьОбОшибкахВыбораЗаданияНаПеревозку(НеобработанныеОрдера);
СтатусОтгружено = Перечисления.СтатусыРасходныхОрдеров.Отгружен;
Для Каждого Ордер Из ОбрабатываемыеОрдера Цикл
Если Ордер.Статус <> СтатусОтгружено
И (СтатусЗадания = Перечисления.СтатусыЗаданийНаПеревозку.Отправлено
Или СтатусЗадания = Перечисления.СтатусыЗаданийНаПеревозку.Закрыто) Тогда
ТекстСообщения = НСтр("ru = 'Выбранное задание на перевозку находится в статусе ""%СтатусЗадания%"", поэтому его нельзя указать в ордере ""%Документ%"", который находится в статусе ""%СтатусОрдера%"". Измените статус ордера на ""%СтатусОтгружено%"".'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СтатусЗадания%", СтатусЗадания);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", Ордер.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СтатусОрдера%", Ордер.Статус);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СтатусОтгружено%", СтатусОтгружено);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Продолжить;
КонецЕсли;
Попытка
ДокументОбъект = Ордер.Ссылка.ПолучитьОбъект();
ДокументОбъект.Заблокировать();
ДокументОбъект.ЗаданиеНаПеревозку = ЗаданиеНаПеревозку;
ДокументОбъект.ПорядокДоставки = ДоставкаТоваров.ПорядокДоставкиВЗаданииНаПеревозку(ЗаданиеНаПеревозку,
ДокументОбъект.Получатель);
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
Элементы.ОрдераВРаботе.Обновить();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОповеститьОбОшибкахВыбораЗаданияНаПеревозку(НеобработанныеОрдера)
Для Каждого Ордер Из НеобработанныеОрдера Цикл
Если Не Ордер.ОтгрузкаПоЗаданиюНаПеревозку
Или ТипЗнч(Ордер.Ссылка) <> Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
ТекстСообщения = НСтр("ru = 'Для ордера ""%Документ%"" не требуется доставка.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", Ордер.Ссылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбработкиЗаданий
&НаСервере
Процедура ПодготовитьНоменклатуруДляЗаданийСервер(Знач МассивРаспоряжений,
Переупаковка = Ложь)
СтруктураПараметров = СкладыСервер.СтруктураПараметровСозданияЗаданийНаОтборПодпитку();
СтруктураПараметров.Склад = Склад;
СтруктураПараметров.Помещение = Помещение;
СтруктураПараметров.НастройкаФормированияПоРабочимУчасткам = НастройкаФормированияПоРабочимУчасткам;
СтруктураПараметров.ОграничиватьПоВесу = ОграничиватьПоВесу;
СтруктураПараметров.ОграничиватьПоОбъему = ОграничиватьПоОбъему;
СтруктураПараметров.ОграничениеПоВесу = ОграничениеПоВесу;
СтруктураПараметров.ОграничениеПоОбъему = ОграничениеПоОбъему;
СтруктураПараметров.РабочийУчасток = РабочийУчасток;
СтруктураПараметров.Исполнитель = Исполнитель;
СтруктураПараметров.ПоВсемРаспоряжениям = ПоВсемРаспоряжениям = 0;
СтруктураПараметров.ДействиеПриНехваткеУпаковок = ЗаданияНаПереупаковку;
Если НазначитьИсполнителя Тогда
СтруктураПараметров.Исполнитель = Исполнитель;
КонецЕсли;
Если ПоВсемРаспоряжениям <> 0 Тогда
СтруктураПараметров.МассивРаспоряжений = МассивРаспоряжений;
КонецЕсли;
Если Переупаковка Тогда
СкладыСервер.СоздатьЗаданияНаПереупаковку(СтруктураПараметров);
Иначе
СкладыСервер.СоздатьЗаданияНаОтбор(СтруктураПараметров);
КонецЕсли;
УстановитьОтборыВОсновныхСписках();
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗаданияНаКлиенте(Переупаковка = Ложь)
ОчиститьСообщения();
Отказ = Ложь;
ПроверитьСкладПомещение(Отказ);
Если Не Отказ Тогда
МассивДокументов = Новый Массив;
СостояниеТребуетсяПодпитка = ПредопределенноеЗначение("Перечисление.СостоянияРаспоряженийНаОтборТоваров.ТребуетсяПодпитка");
Для Каждого СтрМас Из Элементы.РаспоряженияНаОтбор.ВыделенныеСтроки Цикл
МассивДокументов.Добавить(Элементы.РаспоряженияНаОтбор.ДанныеСтроки(СтрМас).Распоряжение);
КонецЦикла;
Если МассивДокументов.Количество() > 0 Тогда
СтруктураОперации = Новый Структура;
СтруктураОперации.Вставить("Помещение",Помещение);
СтруктураОперации.Вставить("Склад",Склад);
ФормаПараметры = Новый Структура("Заголовок, Операция, ПараметрОбъект");
ФормаПараметры.Вставить("Заголовок", "УправлениеОтгрузкой");
ФормаПараметры.Вставить("Операция", ?(Переупаковка, "ЗаданияНаПереупаковку", "ФормированиеЗаданий"));
ФормаПараметры.Вставить("ПараметрОбъект", СтруктураОперации);
Ответ = Неопределено;
ПараметрыОповещения = Новый Структура("Переупаковка, МассивДокументов",
Переупаковка,
МассивДокументов
);
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьЗаданияНаКлиентеЗавершение",
ЭтотОбъект,
ПараметрыОповещения
);
ОткрытьФорму("Документ.ОтборРазмещениеТоваров.Форма.ФормаНастроек",
ФормаПараметры,ЭтаФорма,,,,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
Иначе
ТекстСообщения = НСтр("ru = 'Для создания заданий необходимо выделить распоряжения на отгрузку.'");
ПоказатьПредупреждение(, ТекстСообщения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗаданияНаКлиентеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.УправлениеОтгрузкой.Форма.Оповещение.СоздатьЗаданияНаКлиентеЗавершение"
);
Переупаковка = ДополнительныеПараметры.Переупаковка;
МассивДокументов = ДополнительныеПараметры.МассивДокументов;
Ответ = Результат;
Если Ответ = КодВозвратаДиалога.ОК Тогда
ПодготовитьНоменклатуруДляЗаданийСервер(МассивДокументов, Переупаковка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиенте
Процедура КонтрольРаботыФоновыхЗаданийФормированияОчереди()
КонтрольРаботыФоновыхЗаданийФормированияОчередиСервер();
КонецПроцедуры
&НаСервере
Процедура КонтрольРаботыФоновыхЗаданийФормированияОчередиСервер()
Получатели = ПолучателиПоКоторымНетФоновогоЗаданияПереоформленияОрдеров(Склад);
Если Получатели.Количество() > 0 Тогда
Элементы.АвтоматическоеФормированиеРасходныхОрдеров.ТекущаяСтраница =
Элементы.СтраницаПроблема;
Иначе
Элементы.АвтоматическоеФормированиеРасходныхОрдеров.ТекущаяСтраница =
Элементы.СтраницаНетПроблем;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучателиПоКоторымНетФоновогоЗаданияПереоформленияОрдеров(Склад)
Возврат СкладыСервер.ПолучателиПоКоторымНетФоновогоЗаданияПереоформленияОрдеров(Склад);
КонецФункции
&НаКлиенте
Процедура ПроверитьСкладПомещение(Отказ)
Если Не ЗначениеЗаполнено(Склад) Тогда
ТекстСообщения = НСтр("ru='Перед выполнением операции необходимо выбрать склад.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,,Отказ);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УменьшитьОрдераСервер(МассивДокументов)
МассивИзмененныхДокументов = ЗаполнитьОрдераОтобраннымиТоварамиСервер(МассивДокументов, Ложь);
УстановитьОтборыВОсновныхСписках();
Возврат МассивИзмененныхДокументов;
КонецФункции
&НаСервере
Процедура УстановитьВидимостьПомещений()
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаОтгрузка
И ЗначениеЗаполнено(ДатаОтгрузки) Тогда
ИспользоватьСкладскиеПомещения = СкладыСервер.ИспользоватьСкладскиеПомещения(Склад,ДатаОтгрузки);
Иначе
ИспользоватьСкладскиеПомещения = СкладыСервер.ИспользоватьСкладскиеПомещения(Склад,,Ложь);
КонецЕсли;
Элементы.Помещение.Видимость = ИспользоватьСкладскиеПомещения;
Элементы.ОрдераВРаботеПомещение.Видимость = ИспользоватьСкладскиеПомещения;
КонецПроцедуры
&НаКлиенте
Процедура СостояниеОтбораПриИзменении(Элемент)
СостояниеОтбораПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура СостояниеОтбораПриИзмененииНаСервере()
ОбновитьСостоянияРаспоряженийНаОтбор();
Элементы.ЗаданияВРаботе.Обновить();
КонецПроцедуры
&НаСервере
Функция ЕстьМаркированнаяПродукцияСервер(ДокументСсылка)
Возврат (СкладыЛокализация.ИспользуетсяМаркируемаяПродукция() И (СкладыЛокализация.ВидыПродукцииДокумента(ДокументСсылка).Количество() > 0));
КонецФункции
#КонецОбласти
#КонецОбласти
#Область Производительность
&НаКлиенте
Процедура ОрдераВРаботеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.УправлениеОтгрузкой.Форма.Элемент.ОрдераВРаботе.Выбор");
КонецПроцедуры
#КонецОбласти