Самообслуживание партнеров / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

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

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

#КонецОбласти


#КонецЕсли

Связанные материалы