Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Группировка "ВСЕ". Как?!! (число прочтений - 15224 )
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 записан
 
U_zer
Экс-Участник


Re: Группировка "ВСЕ". Как?!!
Ответ #15 - 30. Марта 2007 :: 08:34
Печать  
Пост мэша правильный, за искл. вместо Номенклатура надо Товар написать, а ты какой-то бред
понагородил. Конечно нифига работать не будет.
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #16 - 30. Марта 2007 :: 08:55
Печать  
Цитата:
Пост мэша правильный, за искл. вместо Номенклатура надо Товар написать, а ты какой-то бред
понагородил. Конечно нифига работать не будет.


первый пост (мой) я ещё кое как, интуитивно понимал. Все что было дальше - надеялся на то что кто нибудь кинет код и оно заработает. потому не удивительно что бред получился. по поводу замены Номенклатуры на Товар, не мог бы ты поточнее написать, какой именно пост был правильный и где нужно заменить? Потому как пока что для меня прямые запросы - китайский язык, все "изучается" методом "тыка". причем тыка носом в правильный код  Печаль
  

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


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #17 - 30. Марта 2007 :: 09:01
Печать  
Перед РегИтоги в cast() знак $ убери
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #18 - 30. Марта 2007 :: 09:08
Печать  
mash писал(а) 30. Марта 2007 :: 09:01:
Перед РегИтоги в cast() знак $ убери


убрал

пишет  FAILED! ICommandText::Execute(): Syntax error.
  

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


1C++ v. 3.0.1.23

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


  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #20 - 30. Марта 2007 :: 12:19
Печать  
Вроде spock говорил, что Адвантаж ОЛЕДБ провайдер позволяет виртуальные таблицы Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #21 - 30. Марта 2007 :: 13:57
Печать  
пробовал этот код
Код
Выбрать все
SELECT
	НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
	Номенклатура.id as [Товар $Справочник.Номенклатура],
	SUM(cast($РегИтоги.ОстатокТовара as numeric(10,2))) as ОстатокТовараКонечныйОстаток
FROM
	$Справочник.Номенклатура as Номенклатура
		left join
	$Справочник.Номенклатура as НоменклатураГруппа
			on Номенклатура.parentid = НоменклатураГруппа.id
		left join
	$РегистрИтоги.ОстаткиТоваров as РегИтоги
			on РегИтоги.Товар = Номенклатура.id
WHERE
	РегИтоги.PERIOD = :ДатаПериодаОстатков~~
		AND
	$РегИтоги.Фирма = $ПустойИД
	     and
	Номенклатура.id  IN (SELECT Val FROM :ВременнаяТаблица)
	     and
	$РегИтоги.Склад  IN (SELECT Val FROM :ВременнаяТаблица2)
GROUP BY
	Номенклатура.id,НоменклатураГруппа 



и все равно ругается

FAILED! ICommandText::Execute(): SQL: Column 'ТОВАР' is not found.


неужели никто не делал похожую задачу на ДБФ?
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #22 - 30. Марта 2007 :: 15:17
Печать  
ну во-первых перед РегИтоги.Товар поставь $
во-вторых, он у тебя точно называется "Товар" может "Номенклатура"? Тогда $РегИтоги.Номенклатура
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



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

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


1C++ v. 3.0.1.23

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

WHERE
	Номенклатура.id  IN (SELECT Val FROM :ВременнаяТаблица)
GROUP BY
	Номенклатура.id,НоменклатураГруппа
 

  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #25 - 02. Апреля 2007 :: 07:09
Печать  
попробовал. учел замечание  JohnyDeath, по поводу $ перед РегИтоги.Товар, добавил вывод в ТЗ код номенклатуры (это мне для задачи нужно). получился такой код:
Код
Выбрать все
текстЗапроса = "
|SELECT
|	НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
|	Номенклатура.id as [Товар $Справочник.Номенклатура],
|   Номенклатура.Code as Код,
|	SUM(cast($РегИтоги.ОстатокТовара as numeric(10,2))) as ОстатокТовараКонечныйОстаток
|FROM
|	$Справочник.Номенклатура as Номенклатура
|		left join
|	$Справочник.Номенклатура as НоменклатураГруппа
|			on Номенклатура.parentid = НоменклатураГруппа.id
|		left join
|	$РегистрИтоги.ОстаткиТоваров as РегИтоги
|			on $РегИтоги.Товар = Номенклатура.id
|			    and
|	$РегИтоги.Склад  IN (SELECT Val FROM :ВременнаяТаблица2)
|					  and
|	РегИтоги.PERIOD = :ДатаПериодаОстатков~~
|		AND
|	$РегИтоги.Фирма = $ПустойИД
|
|WHERE
|	Номенклатура.id  IN (SELECT Val FROM :ВременнаяТаблица)
|GROUP BY
|	Номенклатура.id,НоменклатураГруппа.id,Номенклатура.Code
|";

 




при запуске получил следующее:

FAILED! ICommandText::Execute(): SQL: Queries of this type are not supported.


понимаю что достал, наверное, всех уже изрядно. но просто уже обидно не довести до конца.
  

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


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #26 - 02. Апреля 2007 :: 09:11
Печать  
Тут мало у кого DBF, поэтому специфики OLEDB мы не знаем, запрос скорее всего такой пойдет :
[code]
SELECT
     НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
     Номенклатура.id as [Товар $Справочник.Номенклатура],
     SUM(cast($РегИтоги.ОстатокТовара as numeric(10,2))) as ОстатокТовараКонечныйОстаток
FROM
     $Справочник.Номенклатура as Номенклатура
           left join
     $Справочник.Номенклатура as НоменклатураГруппа
                 on Номенклатура.parentid = НоменклатураГруппа.id
           left join
     (
     select
           $Рег.Товар as Товар
     from
           $РегистрИтоги.ОстаткиТоваров as Рег
     where
           $Рег.Склад  IN (SELECT Val FROM :ВременнаяТаблица2)
             and      
           Рег.PERIOD = :ДатаПериодаОстатков~~
                 AND
           $Рег.Фирма = $ПустойИД
     ) as РегИтоги
           on РегИтоги.Товар = Номенклатура.id
WHERE
     Номенклатура.id  IN (SELECT Val FROM :ВременнаяТаблица)
GROUP BY
     Номенклатура.id,НоменклатураГруппа
[/code]
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #27 - 02. Апреля 2007 :: 09:40
Печать  
Цитата:
Тут мало у кого DBF

уже понял что с DBF перспективы мало...
вечером буду перегонять базу в SQL
  

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



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

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


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #29 - 02. Апреля 2007 :: 10:20
Печать  
Ветку всю не помню Улыбка
поэтому :
На части  запросы разбивать пробовал?
типа что не работает?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #30 - 02. Апреля 2007 :: 10:28
Печать  
Код
Выбрать все
SELECT
	НоменклатураГруппа.id as [Товар_Группа $Справочник.Номенклатура],
	Номенклатура.id as [Товар $Справочник.Номенклатура],
	Номенклатура.Code as Код,
	SUM(CAST($РегИтоги.ОстатокТовара as NUMERIC(10,2))) as ОстатокТовараКонечныйОстаток
FROM
	$Справочник.Номенклатура as Номенклатура
LEFT JOIN $Справочник.Номенклатура as НоменклатураГруппа ON Номенклатура.parentid = НоменклатураГруппа.id
LEFT JOIN $РегистрИтоги.ОстаткиТоваров as РегИтоги ON $РегИтоги.Товар = Номенклатура.id
WHERE
	(Номенклатура.id  IN (SELECT Val FROM :ВременнаяТаблица))
	AND ($РегИтоги.Склад IN (SELECT Val FROM :ВременнаяТаблица2))
	AND (РегИтоги.PERIOD = :ДатаПериодаОстатков)
	AND ($РегИтоги.Фирма = $ПустойИД)
GROUP BY
	Номенклатура.id, НоменклатураГруппа.id, Номенклатура.Code
 

  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #31 - 02. Апреля 2007 :: 10:32
Печать  
IMHO, алиасы в том числе нужны, чтобы избежать длиных имен, тут же все наоборот.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #32 - 02. Апреля 2007 :: 10:42
Печать  
artbear писал(а) 30. Марта 2007 :: 12:19:
Вроде spock говорил, что Адвантаж ОЛЕДБ провайдер позволяет виртуальные таблицы Улыбка

Я не так говорил.
Можно заставить работать ВТ на этом провайдере, потому как он по синтаксису языка похож на t-sql. Только в метапарсер добавить некоторые проверки.
Вообще, можно и на vfpoledb v9 сделать, но это того не стоит.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #33 - 02. Апреля 2007 :: 10:55
Печать  
О, и еще - запрос выше это не "ВСЕ".
Сейчас что-нибудь нарисуем
« Последняя редакция: 02. Апреля 2007 :: 14:06 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #34 - 02. Апреля 2007 :: 11:21
Печать  
Код
Выбрать все
SELECT
	НомГр.id as [Товар_Группа $Справочник.Номенклатура],
	Ном.id as [Товар $Справочник.Номенклатура],
	Ном.Code as Код,
	SUM(ДжРегИт.ОстТов) as ОстТовКон
FROM
	$Справочник.Номенклатура as Ном
LEFT JOIN $Справочник.Номенклатура as НомГр ON Ном.parentid = НомГр.id
LEFT JOIN (
	SELECT
		$РегИт.ОстатокТовара as ОстТов,
		$РегИт.Товар as Тов
	FROM $РегистрИтоги.ОстаткиТоваров as РегИт
	WHERE
		(РегИт.PERIOD = :ДатаПериодаОстатков)
		AND ($РегИт.Склад IN (SELECT Val FROM :ВременнаяТаблица2))
		AND ($РегИт.Фирма = $ПустойИД)
		AND ($РегИт.Товар IN (SELECT Val FROM :ВременнаяТаблица))
) as ДжРегИт ON ДжРегИт.Тов = Ном.id
WHERE
	Ном.id IN (SELECT Val FROM :ВременнаяТаблица)
GROUP BY
	Ном.id, НомГр.id, Ном.Code
 

  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #35 - 02. Апреля 2007 :: 12:15
Печать  
Кирилл, а последний запрос это что?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #36 - 02. Апреля 2007 :: 12:18
Печать  
Ну это тоже самое только правильное, по крайней мере, я так думаю Улыбка
  
Наверх
ICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



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

запрос не заработал, но написал уже новое:

FAILED! ICommandText::Execute(): Operator/operand type mismatch.

но я чувствую, что правильное решиени уже близко!
  

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


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #38 - 02. Апреля 2007 :: 14:03
Печать  
[code]SUM(ДжРегИт.ОстТов)[/code] читать как [code]SUM(CAST(ДжРегИт.ОстТов as NUMERIC(10,2)))[/code]
Просто при отстутствии записи в таблице ДжРегИт соотвествующей нужному товару он пытается просуммировать число с NULL и обламывается.
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #39 - 02. Апреля 2007 :: 14:06
Печать  
[quote author=mash link=1175165797/20#38 date=1175522629][code]SUM(ДжРегИт.ОстТов)[/code] читать как [code]SUM(CAST(ДжРегИт.ОстТов as NUMERIC(10,2)))[/code]
Просто при отстутствии записи в таблице ДжРегИт соотвествующей нужному товару он пытается просуммировать число с NULL и обламывается.[/quote]

попробовал. не прокатило. пишет тоже самое.
  

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



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #40 - 02. Апреля 2007 :: 14:08
Печать  
Ты подзапрос не заменил?
Ном.id IN (SELECT Val FROM :ВременнаяТаблица)
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #41 - 02. Апреля 2007 :: 14:13
Печать  
Не то скопировал...пардон

Этот подзапрос не правил?

Код
Выбрать все
SELECT
	$РегИт.ОстатокТовара as ОстТов,
	$РегИт.Товар as Тов
FROM $РегистрИтоги.ОстаткиТоваров as РегИт
WHERE
	(РегИт.PERIOD = :ДатаПериодаОстатков)
	AND ($РегИт.Склад IN (SELECT Val FROM :ВременнаяТаблица2))
	AND ($РегИт.Фирма = $ПустойИД)
	AND ($РегИт.Товар IN (SELECT Val FROM :ВременнаяТаблица))
 



В частности ДатаПериодаОстатков
  
Наверх
ICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #42 - 02. Апреля 2007 :: 14:15
Печать  
spock писал(а) 02. Апреля 2007 :: 14:08:
Ты подзапрос не заменил?
Ном.id IN (SELECT Val FROM :ВременнаяТаблица)


запрос полностью скопировал из поста №34.
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #43 - 02. Апреля 2007 :: 14:17
Печать  
подправил  Улыбка нужно было поставить ~~ после датыпериодаостатков. совсем перестал думать - просто начал копировать то что выкладывают!!!

большое спасибо.
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #44 - 02. Апреля 2007 :: 14:21
Печать  
рано обрадовался.
группы воводятся только как родитель у позиции. а если нужна вся номенклатура, т.е. вложенность элементов > 2? как?
  

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


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #45 - 03. Апреля 2007 :: 06:34
Печать  
Это сделать сложно.  Я бы предложил ХП, но у тебя DBF... Юзай индексированную таблицу, как вариант...
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #46 - 03. Апреля 2007 :: 08:27
Печать  
mash писал(а) 03. Апреля 2007 :: 06:34:
Это сделать сложно.  Я бы предложил ХП, но у тебя DBF... Юзай индексированную таблицу, как вариант...


а что такое ХП. на этой неделе планирую ставить SQL. может сразу и попробую...
  

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


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #47 - 03. Апреля 2007 :: 12:58
Печать  
Хранимые процедуры. Для ознакомления с возможностями MS SQL рекомендую www.intuit.ru
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #48 - 03. Апреля 2007 :: 14:07
Печать  
ставлю SQL 2005.
смотрел эл.курсы - спасибо, буду читать.
  

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



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #49 - 03. Апреля 2007 :: 14:16
Печать  
SQL 2005 - зря
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #50 - 03. Апреля 2007 :: 16:10
Печать  
pavel_tr писал(а) 03. Апреля 2007 :: 14:16:
SQL 2005 - зря


???
  

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


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #51 - 04. Апреля 2007 :: 12:13
Печать  
SQL 2005 официально не поддерживается 1cv77. Надо патчить dll.
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #52 - 04. Апреля 2007 :: 13:08
Печать  
mash писал(а) 04. Апреля 2007 :: 12:13:
SQL 2005 официально не поддерживается 1cv77. Надо патчить dll.


неделю назад пой поставщик по железу поставил на фирму сервак, как у меня, и базу перевел в 2005-й сказал что отлично все работает....

а что за дллки нужно пачить? и какие релизы лучше использовать?
  

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



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Группировка "ВСЕ". Как?!!
Ответ #53 - 04. Апреля 2007 :: 13:18
Печать  
дабы не засорять ветку, по серваку пишите пожалуйста сюда http://www.1cpp.ru/forum/YaBB.pl?num=1175692649/0#0
всем спасибо за комментарии!
  

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