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


I Love YaBB 2!

Сообщений: 43
Местоположение: Иркутск
Зарегистрирован: 14. Октября 2008
В запросе получить реквизит родителя верхнего уровня
30. Октября 2008 :: 08:05
Печать  
Добрый день,
Запросы начал писать 3 недели назад, сильно не пинайте)

Необходимо получить обороты по контрагентам
Регистры "Покупатели" и "Поставщики"

Всё классно, получил.
Дальше сказали "А получика ещё сети" (сети - реквизит контрагента)
Получил, радуюсь.

Сказали "А получика ты ,красный молодец, реквизит "Город" из самого верхнего родителя контрагента"
Вот тут я и вспотел).

Пробую так
Код
Выбрать все
    |  SELECT      

    |  КОнтрАгенты.ID [КонтРАгент $Справочник.КонтрАгенты],
    |  СетЬ.ID [СЕть $Справочник.Сети],      

	|  Город.ID [Город $Справочник.Города],      


	|  Рег.Договор as [ДоГовор $Справочник.Договоры],
	|  Рег.Фирма as [Фирма $Справочник.Фирмы],
	|  Рег.СуммаРубНачальныйОстаток as СуммаРубНачОст,
	|  Рег.СуммаРубПриход as СуммаРубПриход,
	|  Рег.СуммаРубРасход as СуммаРубРасход,
	|  Рег.СуммаРубКонечныйОстаток as СуммаРубКонОст,
	|  Рег2.СуммаРубНачальныйОстаток as СуммаРубНачОст1,
	|  Рег2.СуммаРубПриход as СуммаРубПриход1,
	|  Рег2.СуммаРубРасход as СуммаРубРасход1,
	|  Рег2.СуммаРубКонечныйОстаток as СуммаРубКонОст1,

	|  CASE  
    
	|  WHEN  КонтрАгенты5.ID Is Null
    |  THEN  

		|  CASE  
	    
		|  WHEN  КонтрАгенты4.ID Is Null
	    |  THEN  

			|  CASE  
		    
			|  WHEN  КонтрАгенты3.ID Is Null
			|  THEN  

				|  CASE  
			    
				|  WHEN  КонтрАгенты2.ID Is Null
			    |  THEN  

					|  CASE  
				    
					|  WHEN  КонтрАгенты1.ID Is Null
					|  THEN

					|  КонтрАгенты.ID

					|  ELSE        

					|  КонтрАгенты1.ID
				    |  END            

			    |  ELSE
				|  КонтрАгенты2.ID
			    |  END                

		    |  ELSE
			|  КонтрАгенты3.ID
		    |  END
	    
		|  ELSE
		|  КонтрАгенты4.ID
	    |  END  
		                                          
	|  ELSE
	|  КонтрАгенты5.ID
    |  END as [Родитель $Справочник.КонтрАгенты]

    
	|FROM
	|  $РегистрОстаткиОбороты.Покупатели(:НачДата, :КонДата~,,,,
	|            ,
	|           (Договор,Фирма),(СуммаРуб)) as Рег    

	|FULL JOIN $РегистрОстаткиОбороты.Поставщики(:НачДата, :КонДата~,,,

	|				,
	|            ,
	|           (Договор,Фирма),(СуммаРуб)) as РЕг2    

    |ON (Рег.Договор = Рег2.Договор)
	|AND (Рег.Фирма = Рег2.Фирма)    

    |INNER JOIN
    |    $Справочник.Договоры as Договоры ON  (ДОговоры.ID = Рег.ДоговоР)
    |INNER JOIN
    |    $Справочник.КонтрАгенты as КонтрАгенты ON  (КонтрАгенты.ID = Договоры.PARENTEXT)
    |LEFT JOIN
    |    $Справочник.КонтрАгенты as КонтрАгенты1 ON  (КонтрАгенты1.ID = КонтрАгенты.ParentID)
    |LEFT JOIN
    |    $Справочник.КонтрАгенты as КонтрАгенты2 ON  (КонтрАгенты2.ID = КонтрАгенты1.ParentID)
	|LEFT JOIN
    |    $Справочник.КонтрАгенты as КонтрАгенты3 ON  (КонтрАгенты3.ID = КонтрАгенты2.ParentID)
	|LEFT JOIN
    |    $Справочник.КонтрАгенты as КонтрАгенты4 ON  (КонтрАгенты4.ID = КонтрАгенты3.ParentID)
	|LEFT JOIN                                                                                
    |    $Справочник.КонтрАгенты as КонтрАгенты5 ON  (КонтрАгенты5.ID = КонтрАгенты4.ParentID)

	|INNER JOIN
    |    $Справочник.Сети as СеТь ON ($КонтрАгенты.СЕТЬ = СеТь.ID)

	|INNER JOIN
    |    $Справочник.Города as Город ON (Родитель.Город = ГорОд.ID)";
 



И послал он меня "The column prefix 'Родитель' does not match with a table name or alias name used in the query."

Думу думаю, как же быть.
  
Наверх
 
IP записан
 
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #1 - 30. Октября 2008 :: 08:17
Печать  
Подзапрос нужен, сначала делаешь таблицу с колонкой Родитель, потом делаешь запрос к этой таблице и джоинишь к ней чего хочешь
  
Наверх
ICQ  
IP записан
 
Ярослав
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Местоположение: Иркутск
Зарегистрирован: 14. Октября 2008
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #2 - 30. Октября 2008 :: 08:22
Печать  
А можно примерчик маленький, для тупых?  Очень довольный
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #3 - 30. Октября 2008 :: 08:30
Печать  
Код
Выбрать все
Select
....
FROM
(
  тут текст твоего запроса
) as Данные
Left join ТвояТаблица ....... on ТвояТаблица.id = Данные.Родитель

 

  
Наверх
ICQ  
IP записан
 
Ярослав
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Местоположение: Иркутск
Зарегистрирован: 14. Октября 2008
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #4 - 30. Октября 2008 :: 09:07
Печать  
А можно на упрощённом примере, просто ещё не шарю...

   |  SELECT      
           
   |  КОнтрАгенты.ID [КонтРАгент $Справочник.КонтрАгенты],
   |  Рег.Договор as [ДоГовор $Справочник.Договоры],
   |  Рег.Фирма as [Фирма $Справочник.Фирмы],
   |  Рег.СуммаРубНачальныйОстаток as СуммаРубНачОст,
   |  Рег.СуммаРубПриход as СуммаРубПриход,
   |  Рег.СуммаРубРасход as СуммаРубРасход,
   |  Рег.СуммаРубКонечныйОстаток as СуммаРубКонОст
           
     |  CASE                              
     |  WHEN  КонтрАгенты1.ID Is Null
     |  THEN            
     |  КонтрАгенты.ID                              
     |  ELSE                                      
     |  КонтрАгенты1.ID
     |  END  as [Родитель $Справочник.КонтрАгенты]
   
     |FROM
     |    $РегистрОстаткиОбороты.Покупатели(:НачДата, :КонДата~,,,,
     |            ,
     |           (Договор,Фирма),(СуммаРуб)) as Рег    

     
   |INNER JOIN
   |    $Справочник.Договоры as Договоры ON  (ДОговоры.ID = Рег.ДоговоР)
   |INNER JOIN
   |    $Справочник.КонтрАгенты as КонтрАгенты ON  (КонтрАгенты.ID = Договоры.PARENTEXT)
   |LEFT JOIN
   |    $Справочник.КонтрАгенты as КонтрАгенты1 ON  (КонтрАгенты1.ID = КонтрАгенты.ParentID) ";

Ну пожалуйста Улыбка
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #5 - 30. Октября 2008 :: 09:42
Печать  
Тупая постановка задачи
НЕ НУЖНО ДЕРЖАТЬ ИНФОРМАЦИЮ на каких-то там уровнях справочника

ЗЫ. Возможно скоро поймешь если еще не понял
  

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


I Love YaBB 2!

Сообщений: 43
Местоположение: Иркутск
Зарегистрирован: 14. Октября 2008
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #6 - 30. Октября 2008 :: 13:57
Печать  
"НЕ НУЖНО ДЕРЖАТЬ ИНФОРМАЦИЮ на каких-то там уровнях справочника"

В реальной жизни возникает такая необходимость.
Есть центральная база, есть 30 городов, есть справочник "Контрагенты"
На верхнем уровне того справочника находятся Папки с названиями городов / подразделений, например
Хабаровск ВЭН, Хабаровск ОПТ, Хабаровск Сети

Люди создают контрагента, забывают ставить ему город, потом переносят его в папку другого города...если бы не переносили - всё ок. А  каждый раз ставить не канает контрагентов более 100 000.

"Тупая постановка задачи" - возможно, а по сути?
"Как получить реквизит родителя верхнего уровня, контрагентов, вошедших в запрос?"
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #7 - 30. Октября 2008 :: 14:03
Печать  
Сделай обязательный для заполнения реквизит - справочник Подразделения, у Подразделения - реквизит Город

Если строго по теме - ХЗ где там самый верхний уровень, строгая ли иерархия
Поэтому бы тупо делал функцией своей руками созданной
  

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


I Love YaBB 2!

Сообщений: 43
Местоположение: Иркутск
Зарегистрирован: 14. Октября 2008
Re: В запросе получить реквизит родителя верхнего уровня
Ответ #8 - 31. Октября 2008 :: 00:43
Печать  
"Если строго по теме - ХЗ где там самый верхний уровень, строгая ли иерархия"

Верхний уровень тут


     |  КонтрАгенты1.ID
     |  END  as [Родитель $Справочник.КонтрАгенты]

Родитель - это верхний уровень контрагента.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать