Имя: Пароль:
1C
 
Запросом выбрать верхнего родителя
0 dfaa
 
04.07.11
20:30
Как запросом выбрать самого верхнего родителя в справочнике номенклатура ?
1 PR
 
04.07.11
20:37
(0) Никак, только через иерархическую выборку.
Но проще в цикле IMHO.
2 Жан Пердежон
 
04.07.11
20:40
ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка)
3 dfaa
 
04.07.11
20:45
(2) да ладно, это я выберу пустую ссылку.
4 dfaa
 
04.07.11
20:46
неужели в запросе не как не получиться ?
5 kumena
 
04.07.11
20:46
(2) так это пустая ссылка, а автору надо элемент самого верхнего уровня.

я писал так, когда времени не было.

Выбор Когда Родитель Значение(справочник.Номенклатура.ПустаяСсылка)

Тогда Ссылка
Иначе
Выбор Когда родитель.родитель ...
тогда ссылка.родитель
Конец

а вообще можно написать запрос, но подумать надо
6 Лефмихалыч
 
04.07.11
20:51
(0) зачем именно запросом? Какая религия запрещает рекурсию и циклы?
7 dfaa
 
04.07.11
20:54
(6) да собственно ни какая. Просто хотелось сделать всё запросом, так как номенклатуры больше сотни тысяч, не хотелось бы её гонять в цикле
8 PR
 
04.07.11
20:56
(7) Тогда делай коряво.
Определяй максимальный уровень вложенности и (5).
Кстати, может в свежих 8.2 решили вопрос получения уровня в запросе, тогда может что-то получится придумать в запросе.
9 kumena
 
04.07.11
20:59
"зачем именно запросом? Какая религия запрещает рекурсию и циклы?" - например в компоновку воткнуть.
10 Лефмихалыч
 
04.07.11
21:00
ну, соединение по иерархии не возможно по крайней мере в имеющихся на сегодняшний день платформах
Как-то придется с этим жить
11 MikleV
 
04.07.11
21:10
зато возможно получение результата запроса, в котором на верхнем уровне будет желаемое
12 dfaa
 
04.07.11
21:13
(11) и как его получить ?
13 Baker_it
 
04.07.11
21:22
Ну итоги по иерархии видимо :)
14 MikleV
 
04.07.11
22:19
УПОРЯДОЧИТЬ ПО
15 Parti
 
04.07.11
22:21
выбрать итоги с иерархией во временную таблицу, из временной - пакетным запросом получить 1 значение
16 ILM
 
гуру
04.07.11
22:29
(0) Делай пакет запрос:

Первый итоги выводит для всех в данной ветке,
Второй отбор где родитель = ЗНАЧЕНИЕ(Спр-к.ЛаЛаЛа.ПустаяСсылка) из (3)
17 ILM
 
гуру
04.07.11
22:30
(15) Опередил, пока чай наливал )))
18 Лефмихалыч
 
04.07.11
22:36
(14),(17) пример может покажите?
19 Лефмихалыч
 
04.07.11
22:38
+(18) Во-первых, в пакетном запросе УПОРЯДОЧИТЬ ПО возможно использовать только в купе с ПЕРВЫЕ. А, во-вторых, у меня платформа радостно обрухнула при попытке провернуть этот трюк из брюк
20 MikleV
 
04.07.11
22:38
(18)а я что то говорил про пакетный запрос?
21 MikleV
 
04.07.11
22:39
ВЫБРАТЬ *
ИЗ Т КАК Т
УПОРЯДОЧИТЬ ПО Т.Ссылка ИЕРАРХИЯ
22 bazvan
 
04.07.11
22:40
(19) ЕЕ, так лето, жара, шорты одень:))
23 Лефмихалыч
 
04.07.11
22:41
(22) пробовал, не помогает :(
24 Лефмихалыч
 
04.07.11
22:43
(21) и дальше чо?
25 MikleV
 
04.07.11
22:56
(24)обход результата запроса
26 ILM
 
гуру
04.07.11
22:59
Счас по быстрому не найду, делал типа
ВЫБРАТЬ ПЕРВЫЕ 10000 *
ПОМЕСТИТЬ ТЕМП
ИЗ ...
УПОРЯДОЧИТЬ ПО ... ИЕРАРХИЯ
ИТОГИ ПО ИЕРАРХИИ
;
ВЫБРАТЬ ... ИЗ ТЕМП ГДЕ ТЕМП.Ссылка = ЗНАЧЕНИЕ(.....ПустаяСсылка)

Просто знал, что никогда и 10 тыс не будет в ветке.
27 Попытка1С
 
04.07.11
22:59
Опять... Обсасывали вроде бы месяц назад.
28 ILM
 
гуру
04.07.11
23:01
(27) А что делать? Просят раз пососать
29 Лефмихалыч
 
04.07.11
23:02
(25) а, вон оно чо, а я-то думал, что дальше как-то ЗАПРОСОМ ты собрался. Так-то оно рекурсией или циклом и быстрее и читабельнее получится
(26) падает платформа, аргументируя это тем, что "Выход за размерность" или что-то такое. Да и какой понт в этом велосипеде, если проще так:

ВЫБРАТЬ
   Ссылка
ИЗ
   Справочник.Номенклатура КАК Контакты
ГДЕ ЭтоГруппа и родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)


Задача была в том, чтобы родителя верхнего уровня конкретного элемента найтить только запросом. А это всё фигня от лукавого и не серьезно
30 ILM
 
гуру
04.07.11
23:05
(29) Рекурсией лучше, но раз люди хотят запросом - зачем им в этом отказывать.
31 ПульсЪ
 
04.07.11
23:07
Функция родительпервогоуровня()
Запрос = Новый Запрос;
   Запрос.Текст = "
   |ВЫБРАТЬ
   |    Контрагенты.Наименование
   |ИЗ
   |    Справочник.Контрагенты КАК Контрагенты
   |ГДЕ
   |    Контрагенты.ЭтоГруппа = &ЭтоГруппа
   |    И Контрагенты.Родитель = &ПустаяСтрока
   |";
   
   Запрос.УстановитьПараметр("ЭтоГруппа", Истина);
   Запрос.УстановитьПараметр("ПустаяСтрока",Справочники.Контрагенты.НайтиПоКоду("") );
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
   возврат Выборка.Наименование
КонецФункции
32 ПульсЪ
 
04.07.11
23:08
а не
33 Попытка1С
 
04.07.11
23:08
34 ПульсЪ
 
04.07.11
23:08
или... все норм
35 thezos
 
04.07.11
23:12
полный кот
36 ПульсЪ
 
04.07.11
23:15
(0) проверил) канает)  пользуйся (31)
37 ПульсЪ
 
04.07.11
23:16
тока нуна что бы в справочнике была папка первого уровня одна) ну или допили чутка
38 Jackman
 
05.07.11
02:55

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              |    Номенклатура.Ссылка КАК Ссылка
              |ИЗ
              |    Справочник.Номенклатура КАК Номенклатура
              |ГДЕ
              |    Номенклатура.Ссылка = &Товар
              |
              |ИТОГИ ПО
              |    Ссылка ТОЛЬКО ИЕРАРХИЯ";
Запрос.УстановитьПараметр("Товар",    Товар);    
ТЗ = Запрос.Выполнить().Выгрузить();

Если ТЗ.Количество()>0 Тогда
   Сообщить(ТЗ[ТЗ.Количество()-1].Ссылка);
Иначе
   Сообщить("упс");
КонецЕсли;
39 Рэйв
 
05.07.11
07:06
Выбрать
Выбор когда Ссылка.Родитель Есть NULL
     Тогда "Верхний уровень"
     Когда Ссылка.Родитель.Родитель Есть NULL
     Тогда Ссылка.Родитель
     Когда Ссылка.Родитель.Родитель.Родитель Есть NULL
     Тогда Ссылка.Родитель.Родитель
     Когда Ссылка.Родитель.Родитель.Родитель.Родитель Есть NULL
     Тогда Ссылка.Родитель.Родитель.Родитель
....
40 Рэйв
 
05.07.11
07:09
+

...Конец КАК ВерхнийПапа

естессно:-)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший