Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Группировка "ВСЕ". Как?!! (число прочтений - 15008 )
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Группировка "ВСЕ". Как?!!
29. Марта 2007 :: 10:56
Печать  
Всем привет.
есть такой запрос. поскольку он формируется около 80 раз в день на одном рабочем месте, решил его ускорить.

Код
Выбрать все
запрос = создатьОбъект( "запрос" );
	датаС = получитьДатуТА();
	датаПо = получитьДатуТА();
	текстЗапроса = "
		|период с датаС по датаПо;
		|фирма = регистр.остаткиТоваров.фирма;
		|склад = регистр.остаткиТоваров.склад;
		|товар = регистр.остаткиТоваров.товар;
		|количество = регистр.остаткиТоваров.остатокТовара;
		|группировка товар все;
		|функция ост = конОст( количество );
		|условие ( фирма = глПустаяФирма );
		|условие ( склад в спВыбСклады );
		|условие ( товар в спВыбТовары );";

 



Добрые люди помогли дойти до этого:

Код
Выбрать все
текстЗапроса = "
|SELECT
|	VT.Товар as [Товар $Справочник.Номенклатура],
|	VT.Товар as [Товар $Справочник.Номенклатура],
|	Sum(VT.ОстатокТовараКонечныйОстаток) as ОстатокТовараКонечныйОстаток
|FROM (	SELECT
|		$РегИтоги.Фирма as Фирма,
|		$РегИтоги.Товар as Товар,
|		$РегИтоги.ОстатокТовара as ОстатокТовараКонечныйОстаток|
|	  FROM
|			$РегистрИтоги.ОстаткиТоваров as РегИтоги
|		WHERE
|			РегИтоги.PERIOD = :ДатаПериодаОстатков~~
|			AND $РегИтоги.Фирма = $ПустойИД
|	     and $РегИтоги.Товар  IN (SELECT Val FROM :ВременнаяТаблица)
|	     and $РегИтоги.Склад  IN (SELECT Val FROM :ВременнаяТаблица2)
|) as VT
|
|GROUP BY
|	Товар
|
|";

 



но не знаю как вывести ВСЕ товары (и группы тоже). база DBF. на выходе нужна такая ТЗ:
Код - Товар - Остаток
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #1 - 29. Марта 2007 :: 11:21
Печать  
А зачем вложенный запрос ?
Код
Выбрать все
SELECT
		НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
		Номенклатура.id as [Товар $Справочник.Номенклатура],
		SUM(coalesce($РегИтоги.ОстатокТовара,0) as ОстатокТовараКонечныйОстаток) ОстатокТовараКонечныйОстаток
	  FROM
					 $Справочник.Номенклатура as Номенклатура
						   left join
					$Справочник.Номенклатура as НоменклатураГруппа
								 on Номенклатура.parentid = НоменклатураГруппа.id
						     left join
			$РегистрИтоги.ОстаткиТоваров as РегИтоги
								 on РегИтоги.Товар = Номенклатура.id
		WHERE
			РегИтоги.PERIOD = :ДатаПериодаОстатков~~
			AND $РегИтоги.Фирма = $ПустойИД
	     and $РегИтоги.Товар  IN (SELECT Val FROM :ВременнаяТаблица)
	     and $РегИтоги.Склад  IN (SELECT Val FROM :ВременнаяТаблица2)


GROUP BY
	Номенклатура.id
 

  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #2 - 29. Марта 2007 :: 12:14
Печать  
пишет такое
FAILED! ICommandText::Execute(): Function name is missing ).
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #3 - 29. Марта 2007 :: 13:51
Печать  
Ау!!! позскажите. на что может ругаться?
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #4 - 29. Марта 2007 :: 14:47
Печать  
По-моему там лишний ОстатокТовараКонечныйОстаток и со скобками в этой строке разберись.
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #5 - 29. Марта 2007 :: 15:07
Печать  
сделал так
SUM(coalesce($РегИтоги.ОстатокТовара,0)) as ОстатокТовараКонечныйОстаток
написало такое
FAILED! ICommandText::Execute(): SQL: Column 'ТОВАР' is not found.

  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #6 - 29. Марта 2007 :: 15:12
Печать  
Торопился - наделал ошибок. Правильно будет так
Код
Выбрать все
SELECT
		НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
		Номенклатура.id as [Товар $Справочник.Номенклатура],
		SUM(coalesce($РегИтоги.ОстатокТовара,0)) as ОстатокТовараКонечныйОстаток
	  FROM
					 $Справочник.Номенклатура as Номенклатура
						   left join
					$Справочник.Номенклатура as НоменклатураГруппа
								 on Номенклатура.parentid = НоменклатураГруппа.id
						     left join
			$РегистрИтоги.ОстаткиТоваров as РегИтоги
								 on $РегИтоги.Товар = Номенклатура.id
		WHERE
			РегИтоги.PERIOD = :ДатаПериодаОстатков~~
			AND $РегИтоги.Фирма = $ПустойИД
	     and $РегИтоги.Товар  IN (SELECT Val FROM #ВременнаяТаблица)
	     and $РегИтоги.Склад  IN (SELECT Val FROM #ВременнаяТаблица2)


GROUP BY
	Номенклатура.id,НоменклатураГруппа.id  
 


А вообще по уму бы ВТ туда вставить.
И код будет выглядеть так
Код
Выбрать все
SELECT
		НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
		Номенклатура.id as [Товар $Справочник.Номенклатура],
		coalesce(РегИтоги.ОстатокТовараОстаток,0)) as ОстатокТовараКонечныйОстаток
	  FROM
					 $Справочник.Номенклатура as Номенклатура
						   left join
					$Справочник.Номенклатура as НоменклатураГруппа
								 on Номенклатура.parentid = НоменклатураГруппа.id
						     left join
			$РегистрОстатки.ОстаткиТоваров(:ДатаПериодаОстатков,,Фирма = $ПустойИд and Товар in (select val from #ВременнаяТаблица) and Склад  IN (SELECT Val FROM #ВременнаяТаблица2) ,Номенклатура,ОстатокТовара) as РегИтоги
								 on $РегИтоги.Товар = Номенклатура.id

 

  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #7 - 29. Марта 2007 :: 15:25
Печать  
у меня ДБФ поэтому перед временнойтаблицей не # a :
с этим сталкивался - подправил, но теперь ругается так

FAILED! ICommandText::Execute(): File 'coalesce.prg' does not exist.
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #8 - 29. Марта 2007 :: 15:33
Печать  
coalesce убери. Напиши просто $РегИтоги.ОстатокТовара [ОстатокТовараКонечныйОстаток $Число]
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #9 - 29. Марта 2007 :: 15:40
Печать  
так?
SUM($РегИтоги.ОстатокТовара [ОстатокТовараКонечныйОстаток $Число])

теперь ругается

FAILED! ICommandText::Execute(): SQL: Column 'ОСТАТОКТОВАРАКОНЕЧНЫЙОСТАТОК_1C_TYPE_ЧИСЛО' is not found.
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #10 - 29. Марта 2007 :: 16:07
Печать  
Я чуть выше приводил запрос. Он выглядит так
Код
Выбрать все
SELECT
		НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
		Номенклатура.id as [Товар $Справочник.Номенклатура],
		РегИтоги.ОстатокТовараОстаток as [ОстатокТовараКонечныйОстаток $Число]
	  FROM
					 $Справочник.Номенклатура as Номенклатура
						   left join
					$Справочник.Номенклатура as НоменклатураГруппа
								 on Номенклатура.parentid = НоменклатураГруппа.id
						     left join
			$РегистрОстатки.ОстаткиТоваров(:ДатаПериодаОстатков,,Фирма = $ПустойИд and Товар in (select val from #ВременнаяТаблица) and Склад  IN (SELECT Val FROM #ВременнаяТаблица2) ,Номенклатура,ОстатокТовара) as РегИтоги
								 on $РегИтоги.Товар = Номенклатура.id



 

  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #11 - 29. Марта 2007 :: 16:11
Печать  
поробовал
выдало следующее
Meta name parser error: недопустимое значение параметра "$РегистрОстатки.ОстаткиТоваров" (4)
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #12 - 29. Марта 2007 :: 16:14
Печать  
вроде бы такая конструкция под ДБФ не работает. но надеюсь что ошибаюсь.

$РегистрОстатки.ОстаткиТоваров(:ДатаПериодаОстатков,,Фирма = $ПустойИд and Товар in (select val from #ВременнаяТаблица) and Склад  IN (SELECT Val FROM #ВременнаяТаблица2) ,Номенклатура,ОстатокТовара) as РегИтоги

  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #13 - 30. Марта 2007 :: 05:41
Печать  
Попробуй так:
Код
Выбрать все
SUM(CAST($РегИтоги.ОстатокТовара as NUMERIC(10,2))) as ОстатокТовараКонечныйОстаток 

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #14 - 30. Марта 2007 :: 08:27
Печать  
JohnyDeath писал(а) 30. Марта 2007 :: 05:41:
Попробуй так:
Код
Выбрать все
SUM(CAST($РегИтоги.ОстатокТовара as NUMERIC(10,2))) as ОстатокТовараКонечныйОстаток 



в какой текст из выше перечисленных это воткнуть? если в последний то при таком коде:
Код
Выбрать все
текстЗапроса = "
|
|SELECT
|		НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
|		Номенклатура.id as [Товар $Справочник.Номенклатура],
|		SUM(CAST($РегИтоги.ОстатокТовара as NUMERIC(10,2))) as ОстатокТовараКонечныйОстаток
|	  FROM
|		$Справочник.Номенклатура as Номенклатура
|						   left join
|					$Справочник.Номенклатура as НоменклатураГруппа
|								 on Номенклатура.parentid = НоменклатураГруппа.id
|						     left join
|			$РегистрОстатки.ОстаткиТоваров(:ДатаПериодаОстатков,,Фирма = $ПустойИд and Товар in (select val from :ВременнаяТаблица) and Склад  IN (SELECT Val FROM :ВременнаяТаблица2) ,Товар,ОстатокТовара) as РегИтоги
|								 on РегИтоги.Товар = Номенклатура.id
|
|";
 



выдает следующую ошибку

Meta name parser error: неизвестное метаимя или алиас "$РегИтоги"
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать