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



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Помогите с  подзапросом в запросе
26. Апреля 2007 :: 10:33
Печать  
Всё по порядку, есть прямой запрос к таблице движений регистра остатков, в котором попутно вычисляются необходимые из других таблиц данные, он отлажени полность работает. НО нужно получить Нач остаток для измерений (Издание,Рубрика,Контрагент,Менеджер). Почитав BOL, понял что можно это организовать прямо в селекте (перед from), нужен подзапрос, который возвращает нужный мне нач остаток числом.  самый простой способ на 1с СКЛ, это ВТОСТАТКИ, но почему то это не работает. Подскажи те как такое реализовать
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #1 - 26. Апреля 2007 :: 10:36
Печать  
ЗАПРОС
Код
Выбрать все
	|SELECT
	|	Р.Издание as [Издание $Справочник.Издания],
	|	Р.Рубрика as [Рубрика $Справочник.Рубрики],
	|	Р.Контрагент as [Контрагент $Справочник.Контрагенты],
	|	Р.Менеджер  as [Менеджер $Справочник.Менеджеры],
	|	MAX(Р.РубрикаН) as РубрикаН,
	|	MAX(Р.КонтрагентН) as КонтрагентН,
	|	MAX(Р.МенеджерН) as МенеджерН,
	|	MAX(Р.Размер) as Размер,
	|	MAX(Р.Цена) as Цена,
	|	MAX(Р.Скидка) as Скидка,
	|	MAX(Р.Выпуск) as Выпуск,
	|	MAX(Р.Документ) as [Документ $Документ],
	|	MAX(Р.Документ_вид) as Документ_вид,
	|	-- в строчке ниже пытаюсь получить нач остаток
	|	MAX(SELECT О.СуммаОстаток FROM $РегистрОстатки.Реклама(:ДатаНачала~,, Издание = Р.Издание AND Рубрика = Р.Рубрика AND Контрагент = Р.Контрагент AND Менеджер = Р.Менеджер,(Издание,Рубрика,Контрагент,Менеджер),(Сумма)) as О WHERE number=1) as НачОст,
	//|	MAX(dbo.OSTATOK(Р.Издание, Р.Рубрика, Р.Контрагент, Р.Менеджер,:ДатаНачала)) as НачОст,
	//	это пробовал через польз. функцию, но тоже не пошло
	//|	НачОст as MAX(dbo.OSTATOK(Р.Издание, Р.Рубрика, Р.Контрагент, Р.Менеджер,:ДатаНачала)),
	|	SUM(Р.СуммаПриход) as СуммаПриход,
	|	SUM(Р.СуммаРасход) as СуммаРасход,
	|	SUM(Р.Банк) as Банк,
	|	SUM(Р.Нал) as Нал,
	|	SUM(Р.Нал1) as Нал1,
	|	SUM(Р.Банк_) as Банк_,
	|	SUM(Р.Нал_) as Нал_,
	|	SUM(Р.Нал1_) as Нал1_,
	|	SUM(Р.Беспл) as Беспл
	|FROM (
	|	SELECT        
	|		$Рег.Издание as Издание,
	|		$Рег.Менеджер  as Менеджер ,
	|		$Рег.Контрагент as Контрагент,
	|		$Рег.Рубрика as Рубрика,
	|		Кон.descr as КонтрагентН,
	|		Мен.descr as МенеджерН,
	|		Руб.descr as РубрикаН,
	|       ltrim(rtrim(Размер.descr)) + ' х ' + (CASE when $ДокРекламы.КоличествоМодулей > 0 then ltrim(rtrim(CAST($ДокРекламы.КоличествоМодулей as char(3)))) else '' end) as Размер,
	|       $ДокРекламы.Цена as Цена,
	|       ($ВыбСкидка.Скидка + $ВыбСкидка1.Скидка) as Скидка,
	|		ltrim(rtrim(LEFT(CAST($ДокПакета.Номера as char(255)),255))) as Выпуск,
	|		$Рег.Документ as Документ,
	|		J.IDDocdef as Документ_вид,
	|		J.Date_Time_IDDoc as Date_Time_IDDoc,
	|		Рег.DEBKRED as debkred,
	//|		SELECT O.СуммаОстаток FROM $РегистрОстатки.Реклама(:ДатаНачала~,, Издание = $Рег.Издание AND Рубрика = $Рег.Рубрика AND Контрагент = $Рег.Контрагент AND Менеджер = $Рег.Менеджер,(Издание,Рубрика,Контрагент,Менеджер),(Сумма) as О) as НачОст,
	|		(CASE when Рег.DEBKRED = 0 then $Рег.Сумма else 0 end) as СуммаПриход,
	|		(CASE when Рег.DEBKRED = 1 then (-1)*$Рег.Сумма else 0 end) as СуммаРасход,
	|		(CASE when $Рег.ВидПлатежа = '" + MDWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.БН) + "' then (1-Рег.DEBKRED)*$Рег.Сумма else 0 end) as Банк,               -- //приход
	|		(CASE when $Рег.ВидПлатежа = '" + MDWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Н) + "' then (1-Рег.DEBKRED)*$Рег.Сумма else 0 end) as Нал,                 -- //приход
	|		(CASE when $Рег.ВидПлатежа = '" + MDWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Н1) + "' then (1-Рег.DEBKRED)*$Рег.Сумма else 0 end) as Нал1,               -- //приход
	|		(CASE when $Рег.ВидПлатежа = '" + MDWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Бп_Бн) + "' then (1-Рег.DEBKRED)*$Рег.Сумма else 0 end) as Банк_,           -- //приход
	|		(CASE when $Рег.ВидПлатежа = '" + MDWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Бп_Н) + "' then (1-Рег.DEBKRED)*$Рег.Сумма else 0 end) as Нал_,             -- //приход
	|		(CASE when $Рег.ВидПлатежа = '" + MDWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Бп_Н1) + "' then (1-Рег.DEBKRED)*$Рег.Сумма else 0 end) as Нал1_, 	         -- //приход
	|		(CASE when $Рег.ВидПлатежа = '" + MDWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Бесплатно) + "' then (1-Рег.DEBKRED)*$Рег.Сумма else 0 end) as Беспл 	     -- //приход
	|	FROM
	|		$Регистр.Реклама as Рег (NOLOCK)
	|	INNER JOIN _1sjourn as J (NOLOCK) ON (RIGHT($Рег.Документ,9)=J.IDDOC) AND (J.$ФлагРегистра.Реклама=1) AND (J.$ОбщийРеквизит.Издание = :Издание)
	|							AND (J.Date_Time_IDDoc BETWEEN :ДатаНачала  AND :ДатаКонца~)
	|	INNER JOIN $Справочник.Контрагенты as Кон (NOLOCK) ON ($Рег.Контрагент = Кон.ID)
	|	INNER JOIN $Справочник.Менеджеры as Мен (NOLOCK) ON ($Рег.Менеджер = Мен.ID)
	|	INNER JOIN $Справочник.Рубрики as Руб (NOLOCK) ON ($Рег.Рубрика = Руб.ID)
	|	LEFT  JOIN $Документ.ПакетныйПриемРекламы as ДокПакета (NOLOCK) ON (RIGHT(J.$ОбщийРеквизит.ДокПакета,9) = ДокПакета.IDDOC)
	|	LEFT  JOIN $Документ.ПриемРекламы as ДокРекламы (NOLOCK) ON (RIGHT($Рег.Документ,9) = ДокРекламы.IDDOC)
	|	LEFT  JOIN $Справочник.РазмерРекламы as Размер (NOLOCK) ON ($ДокРекламы.Размер = Размер.ID)
	|   LEFT  JOIN $Справочник.Скидки as ВыбСкидка (NOLOCK) ON ($ДокРекламы.ВыбСкидка = ВыбСкидка.ID)
	|   LEFT  JOIN $Справочник.Скидки as ВыбСкидка1 (NOLOCK) ON ($ДокРекламы.ВыбСкидка1 = ВыбСкидка1.ID)
	|	WHERE"+
				ДобавитьФильтр(Фильтр1Выбран,"Издание","Издание",""," = ","$Рег") +
				ДобавитьФильтр(Фильтр2Выбран,"Контрагент","Контрагент"," AND "," = ","$Рег") +
				ДобавитьФильтр(Фильтр3Выбран,"Рубрика","Рубрика"," AND "," = ","$Рег") +
	"
	|   ) as Р
	|GROUP BY
	|	Р.Издание, Р.Рубрика, Р.Контрагент,Р.Менеджер,Р.debkred
	|ORDER BY
	|	Р.Рубрика ASC, Р.КонтрагентН ASC, Р.МенеджерН ASC";
 

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #2 - 26. Апреля 2007 :: 13:21
Печать  
Перенеси ВТ в секцию FROM.
  

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


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #3 - 26. Апреля 2007 :: 16:32
Печать  
А мот попробовать Юнион?
0 приход расход 0
ост 0 0 ост
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #4 - 27. Апреля 2007 :: 04:30
Печать  
Цитата:
А мот попробовать Юнион?
0 приход расход 0
ост 0 0 ост

а потом group by делать, чтобы слить все в нужные строки ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #5 - 27. Апреля 2007 :: 04:31
Печать  
berezdetsky писал(а) 26. Апреля 2007 :: 13:21:
Перенеси ВТ в секцию FROM.

пробовал, не помогает
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #6 - 27. Апреля 2007 :: 07:45
Печать  
В условии
Код
Выбрать все
WHERE number=1 

number - из какой таблицы?
  

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



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #7 - 27. Апреля 2007 :: 10:08
Печать  
berezdetsky писал(а) 27. Апреля 2007 :: 07:45:
В условии
Код
Выбрать все
WHERE number=1 

number - из какой таблицы?

О
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите с  подзапросом в запросе
Ответ #8 - 27. Апреля 2007 :: 10:21
Печать  
хм.. Цитата:
SELECT О.СуммаОстаток
FROM $РегистрОстатки.Реклама(:ДатаНачала~,,
     Издание = Р.Издание AND Рубрика = Р.Рубрика AND Контрагент = Р.Контрагент AND Менеджер = Р.Менеджер,
     (Издание,Рубрика,Контрагент,Менеджер),
     (Сумма)) as О
WHERE number=1

На выходе О будут только поля Издание, Рубрика, Контрагент, Менеджер, СуммаОстаток. number отсутствует.

Цитата:
пробовал, не помогает

Покажи, как пробовал и сообщение об ошибке.
  

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