"Популярный" вопрос - фильтр по реквизиту в прямом запросе. Есть регистр "ПартииТоваров", отчет может строиться по всем проданным товарам, по товарам проданным на распродаже и все без товаров на распродаже. Товары на распродаже в движениях регистра отличаются Реквизитом КодОперации - "Р" или "Б". Почитав форум сделал таким образом: Структура регистра: Измерения: Товар Диск Ячейка Поставщик Ресурсы: ОстатокТовара Стоимость Реквизиты: КодОперации Запрос:
SELECT Рег.Товар [Товар $Справочник.Номенклатура] , Sum(Рег.ОстатокТовараРасход) Расход , Sum(Рег.ОстатокТовараКонечныйОстаток) Остаток , Sum(Рег.СтоимостьРасход) СуммаРасход , ВсеДоки.IDDoc as [Док $Документ] , ВсеДоки.IDDocDef as Док_вид , $Номенклатура.Поставщик [Поставщик $Справочник.Контрагенты] FROM $РегистрОстаткиОбороты.ПартииТоваров(:НачДата , :КонДата~ , Document , , INNER JOIN $Регистр.ПартииТоваров AS ПартииТоваров ON Товар = $ПартииТоваров.Товар AND (($ПартииТоваров.КодОперации = :КодОперации_Р) OR($ПартииТоваров.КодОперации = :КодОперации_Б)) , , (Товар, Поставщик) , (ОстатокТовара, Стоимость)) AS Рег LEFT JOIN _1SJourn as ВсеДоки ON right(Рег.ПозицияДокумента,9) = ВсеДоки.IDDoc INNER JOIN $Справочник.Номенклатура AS Номенклатура ON Рег.Товар = Номенклатура.ID WHERE ОстатокТовараРасход > 0 AND ВсеДоки.IDDocDef = $ВидДокумента.Заказ GROUP BY Рег.Товар, IDDoc, IDDocDef , $Номенклатура.Поставщик ORDER BY Рег.Товар, IDDoc DESC
Отдельно повторю блок с фильтром: КодОперации = "Р" или "Б" INNER JOIN $Регистр.ПартииТоваров AS ПартииТоваров ON Товар = $ПартииТоваров.Товар AND (($ПартииТоваров.КодОперации = :КодОперации_Р) OR($ПартииТоваров.КодОперации = :КодОперации_Б))
Второй вариант фильтра: КодОперации <> "Р" и "Б" INNER JOIN $Регистр.ПартииТоваров AS ПартииТоваров ON Товар = $ПартииТоваров.Товар AND (($ПартииТоваров.КодОперации <> :КодОперации_Р) AND ($ПартииТоваров.КодОперации <> :КодОперации_Б))
Проблема в следующем: при отсутствии фильтра или при первом варианте - работает правильно и быстро (25-30 сек. за месяц), если использовать второй вариант фильтра то отчет строится ооочень долго(30-40 минут) и неправильно. Различие между фильтрами <> вместо = (подчеркнуто в куске кода выше) .
Помогите разобраться и исправить запрос.
|