Загрузка данных
&НаСервере
Процедура ЗаполнитьОстатки()
ТаблицаОстатков.Очистить();
Если ДатаОстатков = Дата(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]);
// //КонецЕсли;
// КонецЕсли;
//КонецЦикла;
ОтнятьОстатокВыб();
КонецПроцедуры