Загрузка данных


&НаСервере
Процедура ЗаполнитьОстатки()

	ТаблицаОстатков.Очистить();

	Если ДатаОстатков = Дата(1, 1, 1) Тогда
		Возврат;
	КонецЕсли;

	Запрос=Новый Запрос;

	ДатаГраницы = Новый Граница(КонецДня(ДатаОстатков), ВидГраницы.Включая);

	Запрос.УстановитьПараметр("Организация", Организация);
	Запрос.УстановитьПараметр("МестоХранения", МестоХранения);
	Запрос.УстановитьПараметр("ДатаОстатков", ДатаГраницы);
	Запрос.УстановитьПараметр("ДатаСрокОст",ДатаОстатков);
	Запрос.УстановитьПараметр("ТекстДинамическогоОтбора", "%" + ТекстДинамическогоОтбора + "%");

	Если ЗначениеЗаполнено("Контрагент") Тогда
		Запрос.УстановитьПараметр("Контрагент", Контрагент);
	КонецЕсли;

	Если ЗначениеЗаполнено("Договор") Тогда
		Запрос.УстановитьПараметр("Договор", Договор);
	КонецЕсли;

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

	Если ЗначениеЗаполнено(Договор) Тогда
		Запрос.Текст = Запрос.Текст + " И (Остаток.Партия.Договор =&Договор)";
	КонецЕсли;
	
	Если ПоискПоМаркировке = 1 Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "1 = 1", "Не Остаток.Партия.Маркированный");
	КонецЕсли;
	
	Запрос.Текст = Запрос.Текст + " 
								  |СГРУППИРОВАТЬ ПО
								  |	Остаток.Номенклатура,
								  |	Остаток.Номенклатура.МНН,
								  |	ЕСТЬNULL(Остаток.Партия.ГоденДо, ДАТАВРЕМЯ(1, 1, 1)) >= &ДатаСрокОст,
								  |	Остаток.Партия.Маркированный,
								 // |	РАЗНОСТЬДАТ(ЕСТЬNULL(Остаток.Партия.ГоденДо,ДАТАВРЕМЯ(2001,01,01)),&ДатаСрокОст,ДЕНЬ),
								  |	РАЗНОСТЬДАТ(&ДатаСрокОст,ЕСТЬNULL(Остаток.Партия.ГоденДо,ДАТАВРЕМЯ(2001,01,01)),ДЕНЬ),
								  |	Остаток.Партия,
								  |  	ЕСТЬNULL(Остаток.Партия.ГоденДо,ИСТИНА)
								  |ИМЕЮЩИЕ
								  |	СУММА(ВЫБОР
								  |			КОГДА Остаток.КоличествоОстаток - ЕСТЬNULL(ВТ_Резерв.Количество, 0) < 0
								  |				ТОГДА 0
								  |			ИНАЧЕ Остаток.КоличествоОстаток - ЕСТЬNULL(ВТ_Резерв.Количество, 0)
								  |		КОНЕЦ) > 0
								  |
								  |УПОРЯДОЧИТЬ ПО
								  |	Остаток.Номенклатура.Наименование";

	Результат = Запрос.Выполнить().Выгрузить();
	Результат.Свернуть("Номенклатура,МНН,Партия,Маркированный,ГоденДоДней,НеСроковый,БезСрока", "Остаток,ОстатокОбщий");

	ТаблицаОстатков.Загрузить(Результат);

	//Для Каждого Стр из ТаблицаВыбранных Цикл
	//	Фильтр=Новый Структура;
	//	Фильтр.Вставить("Партия", Стр.Партия);
	//	Найдено=ТаблицаОстатков.НайтиСтроки(Фильтр);
	//	Если Найдено.Количество() > 0 Тогда
	//		//Если Найдено[0].Остаток < Стр.Количество Тогда
	//		//	Стр.Количество=Найдено[0].Остаток;
	//		//КонецЕсли;
	//		//Найдено[0].Остаток=Найдено[0].Остаток - Стр.Количество;
	//		//Если Найдено[0].Остаток <= 0 Тогда
	//		//	ТаблицаОстатков.Удалить(Найдено[0]);
	//		//КонецЕсли;
	//	КонецЕсли;
	//КонецЦикла;
	ОтнятьОстатокВыб();
	
	КонецПроцедуры