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