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