Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос удваивает суммы (число прочтений - 3319 )
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Запрос удваивает суммы
20. Марта 2007 :: 13:43
Печать  
Все мозги себе запарил ...
Есть запрос по сумме табличной части документа и движению регистра остатки:

[code]|SELECT Накладная.IDDOC [Док $Документ.Накладная]
| , Sum($НакладнаяСтроки.Сумма) Сумма
| , Sum($ОстаткиТМЦ.СебестВнеш) Себест
|FROM $Документ.Накладная AS Накладная With (NOLOCK)
| INNER JOIN $ДокументСтроки.Накладная AS НакладнаяСтроки With (NOLOCK) ON Накладная.IDDOC = НакладнаяСтроки.IDDOC
| INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON Накладная.IDDOC = Журнал.IDDOC
| INNER JOIN $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK) ON Накладная.IDDOC = ОстаткиТМЦ.IDDOC
|WHERE (Журнал.DATE_TIME_IDDOC BETWEEN :ДатаНач AND :ДатаКон~)
| AND (Журнал.$ОбщийРеквизит.Фирма = :Фотон)
| AND ($Накладная.ВидНакладной = :Вид)
| AND (Журнал.CLOSED&1 = 1)
|GROUP BY Накладная.IDDOC[/code]

результат почему то удваивает (или учетверяет) некоторые суммы как в доке, так и в регистре.
Может навскидку подскажет кто, чего не хватает?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос удваивает суммы
Ответ #1 - 20. Марта 2007 :: 14:10
Печать  
Если движения привязаны к номерам строк, то
Код
Выбрать все
| INNER JOIN $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK) ON НакладнаяСтроки.IDDOC = ОстаткиТМЦ.IDDOC AND НакладнаяСтроки.LINENO_ = ОстаткиТМЦ.LINENO_ 

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Запрос удваивает суммы
Ответ #2 - 20. Марта 2007 :: 14:12
Печать  
(0) Убери
"INNER JOIN $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK) ON Накладная.IDDOC = ОстаткиТМЦ.IDDOC"
и сделай через отдельным запросом через UNION ALL
и будет тебе счастье.
  
Наверх
 
IP записан
 
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос удваивает суммы
Ответ #3 - 21. Марта 2007 :: 05:00
Печать  
Спасибо за идеи. Пришлось использовать обе. Join по номеру строки уменьшил себестоимость и сумму по документу вдвое, а раздельный запрос и объединение через Union All уменьшило ещё вдвое сумму по документу. Итого получилось:

[code]|SELECT Накладная.IDDOC [Док $Документ.Накладная]
| , Sum($НакладнаяСтроки.Сумма) Сумма
| , 0 Себест
|FROM $Документ.Накладная AS Накладная With (NOLOCK)
| INNER JOIN $ДокументСтроки.Накладная AS НакладнаяСтроки With (NOLOCK) ON Накладная.IDDOC = НакладнаяСтроки.IDDOC
| INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON Накладная.IDDOC = Журнал.IDDOC
|WHERE (Журнал.DATE_TIME_IDDOC BETWEEN :ДатаНач AND :ДатаКон~)
| AND (Журнал.$ОбщийРеквизит.Фирма = :Фотон)
| AND ($Накладная.ВидНакладной = :Вид)
| AND (Журнал.CLOSED&1 = 1)
|GROUP BY Накладная.IDDOC
|UNION ALL
|SELECT Накладная.IDDOC [Док $Документ.Накладная]
| , 0 Сумма
| , Sum($ОстаткиТМЦ.СебестВнеш) Себест
|FROM $Документ.Накладная AS Накладная With (NOLOCK)
| INNER JOIN $ДокументСтроки.Накладная AS НакладнаяСтроки With (NOLOCK) ON Накладная.IDDOC = НакладнаяСтроки.IDDOC
| INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON Накладная.IDDOC = Журнал.IDDOC
| INNER JOIN $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK) ON НакладнаяСтроки.IDDOC = ОстаткиТМЦ.IDDOC AND НакладнаяСтроки.LINENO_ = ОстаткиТМЦ.LINENO_
|WHERE (Журнал.DATE_TIME_IDDOC BETWEEN :ДатаНач AND :ДатаКон~)
| AND (Журнал.$ОбщийРеквизит.Фирма = :Фотон)
| AND ($Накладная.ВидНакладной = :Вид)
| AND (Журнал.CLOSED&1 = 1)
|GROUP BY Накладная.IDDOC[/code]
  
Наверх
ICQ  
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Запрос удваивает суммы
Ответ #4 - 21. Марта 2007 :: 14:48
Печать  
После UNION убери это:

INNER JOIN $ДокументСтроки.Накладная AS НакладнаяСтроки With (NOLOCK) ON Накладная.IDDOC = НакладнаяСтроки.IDDOC
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Запрос удваивает суммы
Ответ #5 - 21. Марта 2007 :: 14:51
Печать  
Перед UNION убери это:
INNER JOIN $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK) ON Накладная.IDDOC = ОстаткиТМЦ.IDDOC

Ты использовал оба метода. А нужно какой-то один
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Запрос удваивает суммы
Ответ #6 - 21. Марта 2007 :: 14:54
Печать  
После UNION убери уще и это:
AND НакладнаяСтроки.LINENO_ = ОстаткиТМЦ.LINENO_
  
Наверх
 
IP записан
 
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос удваивает суммы
Ответ #7 - 22. Марта 2007 :: 06:45
Печать  
val писал(а) 21. Марта 2007 :: 14:51:
Перед UNION убери это:
INNER JOIN $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK) ON Накладная.IDDOC = ОстаткиТМЦ.IDDOC

Ты использовал оба метода. А нужно какой-то один


Да это потому что я сначала попробовал первый, так как он красивее, но он не дал правильного  решения.

И понятно почему впрочем. Одной строке документа может соответствовать несколько строк движения регистра (у нас партия в регистре остатков) и сумма по строке считается несколько раз. Можно конечно ввести в запрос номер строки и суммировать по регистру, а по сумме документа не суммировать, а потом через группировку взять суммы по документу.

А через UNION хоть и громоздко, но похоже для этой задачи это лучший выход.
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос удваивает суммы
Ответ #8 - 25. Марта 2007 :: 13:05
Печать  
>>Одной строке документа может соответствовать несколько строк движения регистра
Вот, вот... а запрос честно суммирует
Или цепляться к другому или переребирать все вплоть до номера строки а потом сворачивать
Или туплю...  Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать