Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Запрос с UNION ALL, 2 вида документов.. (число прочтений - 6308 )
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #15 - 18. Июля 2010 :: 19:24
Печать  
не проше ли извлекать данную информацию из регистра остатков тмц?
  
Наверх
wwwICQ  
IP записан
 
Malamute
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 29. Июня 2010
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #16 - 18. Июля 2010 :: 20:39
Печать  
Подумаю...
тут просто такая штука - надо было по-быстрому написать,
ну я написал на черном запросе, а там по докам было намного быстрее чем по регистру остатки.

На прямой стал кальку делать...
А может действительно на регистре и проще.

__
В любом случае, господа гуру, мне очень помогли все ваши советы -
добил второй запрос с Union All где два регистра у меня -
в конечном итоге  там и правда помогло выстроить по порядку
поля в запросах и теперь всё заработало как надо!

Интересно конечно и этот сделать, с доками (типа спортивный интерес) но тут уж "свой спортивный интерес решай сам"  Улыбка
А чтоб заработало можно и на регистре как проще... если проще.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #17 - 19. Июля 2010 :: 05:35
Печать  
По отдельности каждый из запросов показывает нужную тебе информацию?
  
Наверх
 
IP записан
 
Malamute
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 29. Июня 2010
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #18 - 19. Июля 2010 :: 05:59
Печать  
Да, показывает
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #19 - 19. Июля 2010 :: 07:05
Печать  
Тогда и этот должен показывать:
Код
Выбрать все
 |SELECT Итоги.Документ  AS [Документ $Документ],
     | Итоги.Документ_вид	,
     | Итоги.Номенклатура AS [Номенклатура $Справочник.Номенклатура] ,
     | sum(Итоги.КолПост) AS КолПост,
     | sum(Итоги.КолРеал) AS КолРеал

     |FROM(

     |SELECT
     |	ПоступлениеТМЦ.IDDOC as Документ,
     |Жур.IDDocDef as Документ_вид,
     |	$ПоступлениеТМЦ.Номенклатура as Номенклатура,
     |	SUM($ПоступлениеТМЦ.Количество) as КолПост  ,
     |0 as КолРеал
     |FROM
     |	$ДокументСтроки.ПоступлениеТМЦ AS ПоступлениеТМЦ
     |INNER JOIN
     |	_1SJOURN AS Жур  ON ПоступлениеТМЦ.IDDOC = Жур.IDDOC
     |WHERE (Жур.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |	AND ($ПоступлениеТМЦ.Номенклатура IN (SELECT Val FROM #ГруппаНом))
     |
     |UNION ALL
     |
     |SELECT
     |	Реализация.IDDOC as Документ,
     |Жур.IDDocDef as Документ_вид,

     |	$Реализация.Номенклатура as Номенклатура ,
     |0 as КолПост,
     |	SUM($Реализация.Количество) as КолРеал

     |FROM
     |	$ДокументСтроки.Реализация AS Реализация
     |INNER JOIN
     |	_1SJOURN AS Жур  ON Реализация.IDDOC = Жур.IDDOC
     |WHERE (Жур.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |	AND ($Реализация.Номенклатура IN (SELECT Val FROM #ГруппаНом))
     |)AS Итоги

     |Group By Итоги.Документ, Итоги.Документ_вид, Итоги.Номенклатура
     |Order By Итоги.Документ

     |"; 

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


1C++ rocks!

Сообщений: 17
Зарегистрирован: 29. Июня 2010
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #20 - 19. Июля 2010 :: 18:40
Печать  
Так и я думал что должен показать.
Такой запрос уже пробовал...

пишет
State 42000 Native 8118...
Column 'ПоступлениеТМЦ.IDDOC' is invalid in the select list because it is not contained in an aggregate function and there is no GROUPE BY clause

и так пишет на всё что во внутренних селектах пока ему GROUPE BY внутри не сделаешь....

(Щас скопипастил прежде чем отвечать запрос из поста 1 в 1 -ругается)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #21 - 20. Июля 2010 :: 08:29
Печать  
Ааа, ну конечно. Убери суммирование во внутренних запросах.
SUM($ПоступлениеТМЦ.Количество) as КолПост
SUM($Реализация.Количество) as КолРеал
  
Наверх
 
IP записан
 
Malamute
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 29. Июня 2010
Re: Запрос с UNION ALL, 2 вида документов..
Ответ #22 - 20. Июля 2010 :: 20:02
Печать  
Да, так заработало, спасибо!

Код
Выбрать все
	ТекстЗапроса =
	"
	|SELECT Итоги.Документ  AS [Документ $Документ],
	| Итоги.Документ_вид	,
	| Итоги.Номенклатура AS [Номенклатура $Справочник.Номенклатура] ,
	| sum(Итоги.КолПост) AS КолПост,
	| sum(Итоги.КолРеал) AS КолРеал

	|FROM(

	|SELECT
	|	ПоступлениеТМЦ.IDDOC as Документ,
	|Жур.IDDocDef as Документ_вид,
	|	$ПоступлениеТМЦ.Номенклатура as Номенклатура,
	|	$ПоступлениеТМЦ.Количество as КолПост  ,
	|0 as КолРеал
	|FROM
	|	$ДокументСтроки.ПоступлениеТМЦ AS ПоступлениеТМЦ
	|INNER JOIN
	|	_1SJOURN AS Жур  ON ПоступлениеТМЦ.IDDOC = Жур.IDDOC
	|WHERE (Жур.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
	|	AND ($ПоступлениеТМЦ.Номенклатура IN (SELECT Val FROM #ГруппаНом))
	|
	|UNION ALL
	|
	|SELECT
	|	Реализация.IDDOC as Документ,
	|Жур.IDDocDef as Документ_вид,

	|	$Реализация.Номенклатура as Номенклатура ,
	|0 as КолПост,
	|	$Реализация.Количество as КолРеал

	|FROM
	|	$ДокументСтроки.Реализация AS Реализация
	|INNER JOIN
	|	_1SJOURN AS Жур  ON Реализация.IDDOC = Жур.IDDOC
	|WHERE (Жур.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
	|	AND ($Реализация.Номенклатура IN (SELECT Val FROM #ГруппаНом))
	|)AS Итоги

	|Group By Итоги.Документ, Итоги.Документ_вид, Итоги.Номенклатура
	|Order By Итоги.Документ

	|";
 


Только вот понять не могу.

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

А ведь там внутри есть SUM


     ТекстЗапроса = "
     |SELECT
     |  Итоги.Склад as [Склад $Справочник.Склады],
     |  Итоги.Номенклатура as [Номенклатура $Справочник.Номенклатура],  
     |  sum(Итоги.КонОстЦентр) as КонОстЦентр,
     |  sum(Итоги.КонРезЦентр) as КонРезЦентр,      
     |  sum(Итоги.КонОстОбразцы) as КонОстОбразцы,
     |  sum(Итоги.КонРезОбразцы) as КонРезОбразцы
     
     |From(      
     |SELECT
     |  Рег.Склад as Склад,
     |  Рег.Номенклатура as Номенклатура,        
     |  SUM(case when Рег.Склад= :ОснСклад  then Рег.КоличествоОстаток else 0 end) as КонОстЦентр,
     | 0 AS КонРезЦентр,
     |  SUM(case when Рег.Склад= :Образцы  then Рег.КоличествоОстаток else 0 end) as КонОстОбразцы,
     | 0 AS КонРезОбразцы
     |FROM
     
     |    $РегистрОстатки.ОстаткиТМЦ(:ВыбДата~,,"+СтрокаФильтрНом+
     "
     |AND ( (Склад=:ОснСклад) OR (Склад=:Образцы ) ) ,(Склад,Номенклатура),(Количество)) as Рег
     |GROUP BY
     |      Рег.Склад, Рег.Номенклатура      
     |UNION ALL
     |SELECT
     |  Рег1.Склад as Склад,
     |  Рег1.Номенклатура as Номенклатура,        
     | 0 AS КонОстЦентр,      
     |  SUM(case when Рег1.Склад= :ОснСклад  then Рег1.КоличествоОстаток else 0 end) as КонРезЦентр,
     | 0 AS КонОстОбразцы,
     |  SUM(case when Рег1.Склад= :Образцы  then Рег1.КоличествоОстаток else 0 end) as КонРезОбразцы      
     |FROM
     
     |    $РегистрОстатки.РезервыТМЦ(:ВыбДата~,," +СтрокаФильтрНом+
     "
     |AND ( (Склад=:ОснСклад) OR (Склад=:Образцы ) ) ,(Склад,Номенклатура),(Количество)) as Рег1
     |GROUP BY
     |      Рег1.Склад, Рег1.Номенклатура      
     
     |)AS Итоги
     
     |GROUP BY
     |     Итоги.Склад, Итоги.Номенклатура" ;


(аймсорри не выделил второй код, очень вширь разлезается... а пока не разобрался  - принято здесь его выделять как бон тон или это дело вкуса...)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать