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