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


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Помогите разобраться с запросом
18. Февраля 2011 :: 14:59
Печать  
Есть отчет суть которого получать данные по реализованным товарам с суммой реализации и себестоимостью (СуммаЗакуп)
Первоначально данные берутся из регистра партий.

Руководство захотело изменить схему получения себестоимости - что бы она не учитывала корректировки поступления товара (вспомогательный док)
Теперь в запросе нужно из партий брать количество и сумму реализации а сумму закупа из документа ПоступлениеТМЦ - ссылка на него есть в регистре партий.
Для этой цели я попытался левым соединением подключить таблицу документа ПоступлениеТМЦ (еще даже не вытаскивая из дока значения сумм).

| LEFT JOIN $ДокументСтроки.ПоступлениеТМЦ ДокП (nolock) ON ДокП.IDDOC = Right($ПартииНаличие.Накладная,9) AND $ПартииНаличие.Номенклатура = $ДокП.Номенклатура

Сразу после этого остальные данные стали отображать неверный результат - суммы стали больше.
Подскажите почему такое могло произойти ?


вот код запроса
Код
Выбрать все
	ТекстЗапроса = "
	  |SELECT
		|	 w.Док [Док $Документ]
    |, w.Док_вид Док_вид
	  |, w.Товар [Товар $Справочник.Номенклатура]
	  |, w.Товар2 [Товар2 $Справочник.Номенклатура]
	  |, w.ЕдИзм as [ЕдИзм $Справочник.Единицы]
	  |, w.Группа as [Группа $Справочник.ГруппыНоменклатуры]
	  |, w.КодГруппа КодГруппа
	  |, w.Количество Количество
	  |, w.Сумма Сумма
		|, w.СуммаЗакуп as СуммаЗакуп
	  |FROM (
		|SELECT
		|	Жур.IDDoc Док
    |	, Жур.IDDocDef Док_вид
		|	, $ПартииНаличие.Номенклатура Товар
		|	, $ПартииНаличие.Номенклатура Товар2
		|	, $ПартииНаличие.ЕдИзм as ЕдИзм
		|	, $Спр.Группа as Группа
		|	, CAST(Replace(Спр2.Code,'.','') AS NUMERIC) as КодГруппа
		|	, Sum($ПартииНаличие.Количество) Количество
		|	, Sum($ПартииНаличие.Сумма) СуммаЗакуп
		|	, Sum($ПартииНаличие.Оборот) Сумма
		|FROM $Регистр.ПартииНаличие AS ПартииНаличие With (NOLOCK)
		| LEFT JOIN _1Sjourn as Жур (nolock) ON Жур.IDDoc = ПартииНаличие.IDDoc
	  | LEFT JOIN $Документ.РасходнаяНакладная as Док (nolock) ON Док.IDDoc = ПартииНаличие.IDDoc
		| LEFT JOIN $Справочник.Номенклатура Спр(nolock) on Спр.[id] = $ПартииНаличие.Номенклатура
    | LEFT JOIN $Справочник.ГруппыНоменклатуры Спр2(nolock) on Спр2.[id] = $Спр.Группа
		//| LEFT JOIN $ДокументСтроки.ПоступлениеТМЦ ДокП (nolock) ON ДокП.IDDOC = Right($ПартииНаличие.Накладная,9) AND $ПартииНаличие.Номенклатура = $ДокП.Номенклатура
    |WHERE ($ПартииНаличие.КодОперации = $Перечисление.КодыОпераций.Продажа) AND
		|	Жур.Date_Time_IDDoc BETWEEN :Дата1 AND :Дата2~
		| and (Жур.IDDocDef = 675 OR Жур.IDDocDef = 5478)
		|";
	Если (СпКонтр.РазмерСписка()=0) И (ФлагК=1) Тогда
	Иначе
		ТекстЗапроса=ТекстЗапроса+
		"
		|and
		| $Док.Клиент IN (SELECT Val FROM #ГруппаС)";
	КонецЕсли;
		ТекстЗапроса=ТекстЗапроса+
		"
		|GROUP BY Жур.IDDoc
		| , Жур.IDDocDef
		| , Спр2.Code
		| , $Спр.Группа
		|	, $ПартииНаличие.Номенклатура
		|	, $ПартииНаличие.ЕдИзм
	  |)as w";
 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с запросом
Ответ #1 - 18. Февраля 2011 :: 15:22
Печать  
А он у тебя  и без этого радугу показывал..
Ты выгребаешь ВСЕ движения  по ПартииНаличие + присоединяешь строки из журнала документов за период..
Что само по себе не верно (нужно inner join, а не left)
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Помогите разобраться с запросом
Ответ #2 - 19. Февраля 2011 :: 06:36
Печать  
пробовал, тот же результат
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Помогите разобраться с запросом
Ответ #3 - 19. Февраля 2011 :: 07:12
Печать  
[quote author=Eprst link=1298041157/0#1 date=1298042545]
Ты выгребаешь ВСЕ движения  по ПартииНаличие + присоединяешь строки из журнала документов за период..
Что само по себе не верно/quote]

На мой взгляд по другому никак

Скажи тогда, как верно?
« Последняя редакция: 19. Февраля 2011 :: 10:22 - dimm73 »  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Помогите разобраться с запросом
Ответ #4 - 19. Февраля 2011 :: 12:15
Печать  
Проблему почти удалось решить
добавив в join дополнительное условие AND $ПартииНаличие.ЕдИзм = $ДокП.Единица

но как оказалось существуют документы в которых зачем то один и тот же товар с одинаковым вложением (кол-во в укаковке) - заведен дважды. В таких случаях запрос задваивает результат.
Эту проблему конечно будем решать административно , плюс прицепить проверку при записи документа, но таких документов может быть не мало в в нереализованных партиях.

Нельзя ли в запросе это учитывать  ? (что бы не происходило задвоение)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с запросом
Ответ #5 - 21. Февраля 2011 :: 05:14
Печать  
dimm73 писал(а) 19. Февраля 2011 :: 07:12:
[quote author=Eprst link=1298041157/0#1 date=1298042545]
Ты выгребаешь ВСЕ движения  по ПартииНаличие + присоединяешь строки из журнала документов за период..
Что само по себе не верно/quote]

На мой взгляд по другому никак

Скажи тогда, как верно?


Твой запрос выгребает ВСЕ движения (всю табличку целиком) по регистру ПартииНаличие + делает внешнее соединение, т.е добавляет к этой выборке строки из журнала документов ( где iddoc в журнале = iddoc в регистре), ограниченную условием на период.
Это не верно, нужно не внешнее соединение, а внутреннее, чтоб записи в регистре были ограничены конкретными документами, а не ВСЕ.




  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Помогите разобраться с запросом
Ответ #6 - 21. Февраля 2011 :: 10:33
Печать  
dimm73 писал(а) 19. Февраля 2011 :: 12:15:
Нельзя ли в запросе это учитывать  ? (что бы не происходило задвоение)

Джойни не документ а подзапрос по нему, в нем строки и сворачивай.
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать