Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Остатки товара в запросе к спр (число прочтений - 3422 )
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Остатки товара в запросе к спр
19. Октября 2006 :: 13:10
Печать  
чнику товаровДелаю запрос, выполняю поиск по справочнику товаров (поиск по вхождению), список товаров формируется, но хотелось бы в том же запросе видеть остатки товаров по выбранному складу и по всем складам. В конфе остатки хранятся в регистре "остатки", накладными товар забивается в регистр "резерв" (оба с 3 измерениями - товар,партия,склад + 1 ресурсом - остаток), т.е. актуальные итоги - Остаток по рег.Остатки минус Остаток по рег.Резерв.

Код
Выбрать все
стрдатыТА=строка(формат(НачМесяца(ПолучитьДатуТА()),"ДГГГГММДД"));

|SELECT
|    Спр.ID as [Элемент $Справочник.Товары],
|    sum($РегОст.Остаток) - sum($РезОст.Остаток) as Остаток,
|    sum($Рег.Остаток) - sum($Рез.Остаток) as Всего
|FROM
|    $Справочник.Товары as Спр  
|		left join $РегистрИтоги.Остатки as Рег on
|			    Рег.PERIOD='"+стрдатыТА+"' AND
|			    $Рег.Товар = Спр.ID  
|		left join $РегистрИтоги.Резерв as Рез on
|			    Рез.PERIOD='"+стрдатыТА+"' AND
|			    $Рез.Товар = Спр.ID
|		left join $РегистрИтоги.Остатки as РегОст on
|			    РегОст.PERIOD='"+стрдатыТА+"' AND
|			    $РегОст.Товар = Спр.ID AND
|			    $РегОст.Склад = :ВыбСклад
|		left join $РегистрИтоги.Резерв as РезОст on
|			    РезОст.PERIOD='"+стрдатыТА+"' AND
|			    $РезОст.Товар = Спр.ID AND
|			    $РезОст.Склад = :ВыбСклад
|WHERE
|    Спр.IsMark = 0 AND
|    Спр.Descr LIKE :стрпоиска
|GROUP BY
|    Спр.ID
|";

RS.УстановитьТекстовыйПараметр("ВыбСклад",Склад);
RS.УстановитьТекстовыйПараметр("стрпоиска", "%"+СокрЛП(наим)+"%");  


Этот запрос возвращает неверные остатки! Если сделать sum(DISTINCT $РегОст.Остаток), то у некоторых позиций остатки совпадают, а у некоторых нет. По отдельности все запросы остатков по этому шаблону возвращают верные цифры. Если оставить один join, то данные будут верны а добавляешь второй - и всё, цифры "с потолка".

Подскажите, правильной дорогой иду? Где ошибка? Может тут стоит думать в направлении виртуальных таблиц?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Остатки товара в запросе к спр
Ответ #1 - 19. Октября 2006 :: 13:21
Печать  
убери группировку и взгляни на "сырую" выборку, попробуй мысленно сгруппировать и просуммировать - все станет ясно.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Остатки товара в запросе к спр
Ответ #2 - 19. Октября 2006 :: 13:24
Печать  
для упрощения ограничь выборку одним товаром, но у которого есть остатки/резервы более чем по одному складу
  

1&&2&&3
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Остатки товара в запросе к спр
Ответ #3 - 19. Октября 2006 :: 13:49
Печать  
Убрал группировку и суммирование, всё одно цифры не сходятся.
Есть товар в количестве 5, из них 2 находятся в резерве (два дока на разные склады). Этот упрощённый запрос возвращает 8 строк, из них 6 с остатком=1 и резервом=1, а две - с остатком=2 и резервом=1. Итого видимый актуальный остаток 2? А он 3!

Убираю джойны, оставляю только первый - ВсегоОст, он возвращает 4 строки, из них 3 с остатком=1 и последняя с остатком=2. Итого 5, т.е. данные верны.

То же с резервом, если оставляю только джойн ВсегоРез, возвращаются 2 строки с остатком=1. Итого 2, тоже верно.

Потому и думаю, что напортачено в самой конструкции джойнов. Где копать?
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Остатки товара в запросе к спр
Ответ #4 - 19. Октября 2006 :: 14:26
Печать  
И почему с двумя джойнами становится 8 строк?!??
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Остатки товара в запросе к спр
Ответ #5 - 19. Октября 2006 :: 14:27
Печать  
потому что это SQL
(классика)
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Остатки товара в запросе к спр
Ответ #6 - 19. Октября 2006 :: 14:28
Печать  
объедини (union all) несколько запросов
объединение группируй
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать