Прямой запрос с условием по значению реквизита справочника.. #357477


#0 by mrzed
Есть прямой запрос. Есть справочник товаров с МинимальнымОстатком. Есть регистр отсатков с ресурсами Складов и Товаров. Ножно выбрать те позиции товаров, которые имеют остатки по всем складам меньше МинимальногоОстатка. Причем если я вместо "$ТМЦ.МинимальныйОстаток" напишу цифру, например 5, то все нормально.. Ошибок не выдает.. Выдает одину и туже выборку независимо от значения реквизита $ТМЦ.МинимальныйОстаток, будь-то 2, будь-то 1000.. Детаю так:
#1 by zenik
А МинимальныйОстаток часом не периодический? Или тип не число (мало ли)...
#2 by Sadovnikov
Напрягает меня EXISTS в запросе... Покажи-ка весь запрос?
#3 by mrzed
МинимальныйОстаток это число. Запрос, он динамически формируется, так что примерно вот:
#4 by Дык ё
#5 by victuan1
Тема по v7?
#6 by Sadovnikov
Не зря меня Exists напрягал...
#7 by mrzed
тема по 7. Всем спасибо за помощь О всезнающий ДыкЁ !!! Спасибо тебе!  :)
#8 by mrzed
Вот только жалко, что если запрос выполнялся за 1 сек, то с этом условием на проверку на МинимальныйОстаток уходит сек... Это все из-за CROSS JOIN ???
#9 by mrzed
порядка 200 секунд..  :(
#10 by ДенисЧ
Я бы тебе предложил посмотреть план запроса...
#11 by el-gamberro
А что мешает сделает соедениение с ТМЦ в основном запросе и ставить в условие?
#12 by mrzed
не знаю... Попробовал: числа подходящие условию получаются Космические!, наверное множит их на такое соединение..
#13 by el-gamberro
FT.Кол, FT.РезКол |ON Резв.Товар = Рег.Товар AND Резв.Склад = Рег.Склад) as FT LEFT JOIN $Справочник.ТМЦ AS ТМЦ ON ТМЦ.ID = FT.Товар
#14 by el-gamberro
+ WHERE $ТМЦ.МинимальныйОстаток < FT.Кол
#15 by el-gamberro
в 14 наоборот ну так блин сегодня питница я уже пиво пью)))))
#16 by el-gamberro
и не забыть про группировки в
#17 by mrzed
не совсем то, что надо. с МинимальнымОстатком нужно сравнивать число по ВСЕМ складам. А тут покажет каждый склад, где меньше минимального. Вот мой точный запрос: SELECT  Выборка.Товар as [Товар $Справочник.ТМЦ],  CASE WHEN Выборка.Склад=:пармСклад1 THEN Выборка.Кол    ELSE 0 END as    Склад1,  CASE WHEN Выборка.Склад=:пармСклад1 THEN Выборка.РезКол ELSE 0 END as РезСклад1,  CASE WHEN Выборка.Склад=:пармСклад2 THEN Выборка.Кол    ELSE 0 END as    Склад2,  CASE WHEN Выборка.Склад=:пармСклад2 THEN Выборка.РезКол ELSE 0 END as РезСклад2,  CASE WHEN Выборка.Склад=:пармСклад3 THEN Выборка.Кол    ELSE 0 END as    Склад3,  CASE WHEN Выборка.Склад=:пармСклад3 THEN Выборка.РезКол ELSE 0 END as РезСклад3,  CASE WHEN Выборка.Склад=:пармСклад4 THEN Выборка.Кол    ELSE 0 END as    Склад4,  CASE WHEN Выборка.Склад=:пармСклад4 THEN Выборка.РезКол ELSE 0 END as РезСклад4  FROM (    SELECT    Рег.Фирма as Фирма,    Рег.Товар as Товар,    Рег.Склад as Склад,      $РегистрОстатки.ОстаткиТоваров(:ВыбДата,,          (Товар IN (SELECT val FROM #ВыбТовар)),    ON Резв.Товар = Рег.Товар AND Резв.Склад = Рег.Склад    LEFT JOIN $Справочник.ТМЦ AS ТМЦ      )    GROUP BY Рег.Фирма, Рег.Товар , Рег.Склад  ) as Выборка ORDER BY Выборка.Фирма, Выборка.Товар , Выборка.Склад
#18 by mrzed
Йоу!!!!!!!!!!!!!!!  ПОЛУЧИЛОСЬ !!!! за 1.5 секудны отработало!!!!!!!!!!!!!!! Вау!!!!!!!!!! Спасибо.. Кстати, прежний отчет работал 7 минут. Думаю, народ будет доволен... :))
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С