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