berezdetsky писал(а) 09. Ноября 2006 :: 16:17:aou1c писал(а) 09. Ноября 2006 :: 05:58:Это все работает, но в записях с вставленными записями дней остаток всегда ноль, а это не правильно.
Может кто знает как заполнить остатки в запросе по вставленным дням
Посмотри набросок. Тщательно не проверял (что-то у меня с головой сегодня

), вроде работает.
Спасибо, правда я уже сам допер.
а идея такая-же
<= :КонДатаКороче вот как у меня получилось
процедура РасчетКолвоДней()
рс.ВыполнитьИнструкцию("CREATE TABLE #Дни (День DateTime)");
для промДата=НачДата по КонДата Цикл
рс.УстановитьТекстовыйПараметр("промДата",промДата);
рс.ВыполнитьИнструкцию("INSERT #Дни VALUES (:промДата)");
КонецЦикла;
рс.УстановитьТекстовыйПараметр("НачДата",НачДата);
рс.УстановитьТекстовыйПараметр("КонДата",КонДата);
рс.УложитьСписокОбъектов(ВыбТовары, "#ВыбТовары", "Номенклатура");
рс.УложитьСписокОбъектов(ВыбВидыДеятельности, "#Производители", "Контрагенты"); [/tt]
рс.УстановитьТекстовыйПараметр("ВыбТовары",ВыбТовары.РазмерСписка());
писка());
Состояние("Расчет остатков...");
ТекстЗапроса = "
|select Товар, Период, ОстатокТовараНАчальныйОстаток ОстатокТовараНАчальныйОстаток
|,ОстатокТовараПриход ОстатокТовараПриход
|,ОстатокТовараПриход ОстатокТовараРасход
|,ОстатокТовараКонечныйОстаток ОстатокТовараКонечныйОстаток
|into #ОстаткиТоваров
|from
|$РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата,:КонДата~,День
| ,ActionsAndPeriodBoundaries
| ,
| INNER JOIN $Справочник.Номенклатура Товары ON Товары.id = Товар
| ,
| (:ВыбТовары='0' or Товар in (select val from #ВыбТовары))
|and (:ВыбВидыДеятельности='0' or $Товары.Производитель in (select val from #Производители))
| ,Товар,ОстатокТовара) ОстаткиТоваров
|";
тб = рс.ВыполнитьИнструкцию(ТекстЗапроса);
//тб.ВыбратьСтроку();
Состояние("Расчет кол-ва дней...");
рс.УстановитьТекстовыйПараметр("ВыбТовары",ВыбТовары.РазмерСписка());
писка());
тб = СоздатьОбъект("ТаблицаЗначений");
ТекстЗапроса = "
|select ДниТовары.Товар, ДниТовары.День,
|CASE WHEN
|isnull(Остатки.ОстатокТовараНАчальныйОстаток+Остатки.ОстатокТовараПриход,
|(select top 1 Ост.ОстатокТовараКонечныйОстаток from #ОстаткиТоваров Ост
|where Ост.Период <= ДниТовары.День and Ост.Товар = ДниТовары.Товар
|order by Ост.Товар, Ост.Период Desc
|))
|>0 THEN 1 ELSE 0 END
|ЕстьОстаток
|from
|(select День, Тов.id Товар from #Дни CROSS JOIN $Справочник.Номенклатура Тов
|Where (:ВыбТовары='0' or Тов.id in (select val from #ВыбТовары))
|and (:ВыбВидыДеятельности='0' or $Тов.Производитель in (select val from #Производители))
|) ДниТовары
|LEFT OUTER JOIN
|#ОстаткиТоваров as Остатки ON Остатки.Период = ДниТовары.День and Остатки.Товар = ДниТовары.Товар
|";
ТекстЗапроса = "
|SELECT Товар,
//|ЕстьОстаток, День
|SUM(ЕстьОстаток) КолДней
|INTO #Остатки
|FROM ("+ТекстЗапроса+") ЕстьОстатки
|GROUP BY Товар
//|order by Товар, День
|";
тб = рс.ВыполнитьИнструкцию(ТекстЗапроса);
конецпроцедуры