Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема упорядочить родителя в запросе (число прочтений - 3555 )
jan
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 14
Зарегистрирован: 08. Апреля 2008
упорядочить родителя в запросе
08. Апреля 2008 :: 07:06
Печать  
Я делаю запрос по регистру (товар, склад, остаток) и одновременно в запросе хочу выбрать и родителя товара. Справочник Номенклатуры трёхуровневый. Как мне сделать, чтобы в запросе РодительВ всегда был родителем верхнего уровня, Родитель - подуровнем, РодительН - родителем нижнего уровня (если он есть).
Запрос сам (он работает) пока такой:
[code]
      ТекстЗапроса="
     |SELECT
     |      Товар as [Товар $Справочник.Номенклатура],
     |      Склад as [Склад $Справочник.МестаХранения],   
      |      ОстатокТовараОстаток as [КолОстаток],
      |      СтоимостьОстаток as [СумОстаток],
     |      $СпрСкл2.Подразделение as [Подр $Справочник.Подразделения],
     |      СпрТов.PARENTID as [РодительН $Справочник.Номенклатура],
     |      СпрТовРод.PARENTID as [Родитель $Справочник.Номенклатура],
     |      СпрТовРодПервый.PARENTID as [РодительВ $Справочник.Номенклатура]          
      | FROM $РегистрОстатки.ТоварыПоСкладам(:ДатаКон, INNER JOIN $Справочник.МестаХранения СпрСкл ON СпрСкл.ID=Склад AND $СпрСкл.ТипСклада<>:ВыбТип
      | AND $СпрСкл.ТипСклада<>:ВыбТип2 AND $СпрСкл.ТипСклада<>:ВыбТип3, , (Товар,Склад),(ОстатокТовара,Стоимость)) as Рег INNER JOIN
      |      $Справочник.МестаХранения СпрСкл2 ON СпрСкл2.ID=Склад INNER JOIN
      |      $Справочник.Номенклатура СпрТов ON СпрТов.ID=Товар INNER JOIN
      |      $Справочник.Номенклатура СпрТовРод ON СпрТов.PARENTID= СпрТовРод.ID INNER JOIN
      |      $Справочник.Номенклатура СпрТовРодПервый ON СпрТовРод.PARENTID= СпрТовРодПервый.ID
      |";                                                                                     
     ВыбТип=Перечисление.ТипыСкладов.Виртуальный;
      ВыбТип2=Перечисление.ТипыСкладов.Витрина;
      ВыбТип3=Перечисление.ТипыСкладов.Розница;
     Запрос.УстановитьТекстовыйПараметр("ДатаКон",ДатаКон);
     Запрос.УстановитьТекстовыйПараметр("ВыбТип",ВыбТип);
     Запрос.УстановитьТекстовыйПараметр("ВыбТип2",ВыбТип2);
     Запрос.УстановитьТекстовыйПараметр("ВыбТип3",ВыбТип3);
[/code]
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: упорядочить родителя в запросе
Ответ #1 - 08. Апреля 2008 :: 07:26
Печать  
Работает - не трожь  Очень довольный
  

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


I Love YaBB 2!

Сообщений: 14
Зарегистрирован: 08. Апреля 2008
Re: упорядочить родителя в запросе
Ответ #2 - 08. Апреля 2008 :: 09:43
Печать  
Работает, но пользоваться им невозможно  Злой
например, товар Кисть малярная входит в группу Малярный инструмент из группы Все для отделочных работ группы Инструменты, а товар Совок входит в группу Садовый инструмент   группы Инструменты.
У товара Кисть РодительН=Малярный инструмент, Родитель=Все для отделочных работ, РодительВ=Инструменты.
У товара Совок РодительН=Садовый инструмент, Родитель=Инструменты, РодительВ=пусто.
Мне нужно, чтобы было у Совка РодительН=пусто, Родитель=Садовый инструмент, РодительВ=Инструменты.
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: упорядочить родителя в запросе
Ответ #3 - 08. Апреля 2008 :: 10:00
Печать  
jan писал(а) 08. Апреля 2008 :: 09:43:
Работает, но пользоваться им невозможно  Злой
например, товар Кисть малярная входит в группу Малярный инструмент из группы Все для отделочных работ группы Инструменты, а товар Совок входит в группу Садовый инструмент   группы Инструменты.
У товара Кисть РодительН=Малярный инструмент, Родитель=Все для отделочных работ, РодительВ=Инструменты.
У товара Совок РодительН=Садовый инструмент, Родитель=Инструменты, РодительВ=пусто.
Мне нужно, чтобы было у Совка РодительН=пусто, Родитель=Садовый инструмент, РодительВ=Инструменты.


Выгрузи в какую-нибудь таблицу и сгруппируй.
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: упорядочить родителя в запросе
Ответ #4 - 08. Апреля 2008 :: 10:06
Печать  
а не проще сам справочник причесать, чтобы элементы были только на 4-м уровне? А то, что ты хочешь, так просто не получишь, поскольку на уровне запроса у совка ближайший родитель не может быть пустым.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: упорядочить родителя в запросе
Ответ #5 - 08. Апреля 2008 :: 10:18
Печать  
Я у себя делал нечто подобное.
С помощью проверок CASE WHEN (на наличие или отсутствие того или иного родителя) заполнял поля запроса Родитель3ур, Родитель2ур, Родитель1ур теми данными, которые мне были нужны.
  
Наверх
 
IP записан
 
jan
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 14
Зарегистрирован: 08. Апреля 2008
Re: упорядочить родителя в запросе
Ответ #6 - 08. Апреля 2008 :: 10:41
Печать  
Neo писал(а) 08. Апреля 2008 :: 10:18:
Я у себя делал нечто подобное.
С помощью проверок CASE WHEN (на наличие или отсутствие того или иного родителя) заполнял поля запроса Родитель3ур, Родитель2ур, Родитель1ур теми данными, которые мне были нужны.

А я не могу придумать такую проверку...
Тут порядок родителей идёт снизу вверх. Допустим у одного товара 2 родителя вверху, а у другого 3. Группа верхнего уровня будет находится у этих товаров в разных полях.
Сейчас я делаю добавление групп в ТЗ, в которую выгружаю запрос, но тогда весь смысл в прямом запросе теряется из-за скорости выполнения ( у меня там 28000 строк)
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: упорядочить родителя в запросе
Ответ #7 - 08. Апреля 2008 :: 10:53
Печать  
> Мне нужно, чтобы было у Совка РодительН=пусто, Родитель=Садовый инструмент, РодительВ=Инструменты.

- Если не изменяет память, общая идея примерно такая была:

CASE WHEN РодительВ=$ПустойИД THEN $ПустойИД ELSE РодительН as Родитель3ур
CASE WHEN РодительВ=$ПустойИД THEN РодительН ELSE Родитель as Родитель2ур
CASE WHEN РодительВ=$ПустойИД THEN Родитель ELSE РодительВ as Родитель1ур


  
Наверх
 
IP записан
 
jan
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 14
Зарегистрирован: 08. Апреля 2008
Re: упорядочить родителя в запросе
Ответ #8 - 14. Апреля 2008 :: 12:14
Печать  
получилось то, что надо
Код
Выбрать все
 	 | CASE  СпрТовРодПервый.PARENTID WHEN $ПустойИД THEN СпрТовРод.PARENTID ELSE СпрТовРодПервый.PARENTID END as [Группа1 $Справочник.Номенклатура],
 	 | CASE  СпрТовРодПервый.PARENTID WHEN $ПустойИД THEN СпрТов.PARENTID ELSE СпрТовРод.PARENTID END as [Группа2 $Справочник.Номенклатура],
 	 | CASE  СпрТовРодПервый.PARENTID WHEN $ПустойИД THEN $ПустойИД ELSE СпрТов.PARENTID END as [Группа3 $Справочник.Номенклатура] 


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