Имя: Пароль:
1C
 
Родитель верхнего уровня в запросе
0 Дуб
 
06.05.08
10:51
Привет всем. Мозга за мозгу зашла: надо в запросе поле получить, содержащее родителя нулевого уровня. Как условие построить, не пойму.. Помогите, плз..
1 wHammer
 
06.05.08
10:52
в коде - ПринадлежитЭлементу()
в запросе - В ИЕРАРХИИ
2 Дуб
 
06.05.08
10:56
(1) мне нужен только один родитель и получить его надо, имея номенклатуру. Т.е. в запросе я выбираю номенклатуру и надо добавить группировку по родителю, но родитель должен быть только нулевого уровня: если у элемента уровень вложенность, например, = 5, то надо номенклатуре сопоставить только одного родителя (самого верхнего)
3 Wladimir_spb
 
06.05.08
11:03
При ограниченном уровне иерерхии можно извратиться через ВЫБОР...
4 Дуб
 
06.05.08
11:06
(3) вложенность неограничена, то-то и оно.. Более того, сейчас только заметил: используется не нулевой, а первый уровень..
5 Андрюха
 
06.05.08
11:10
(1) "в запросе - В ИЕРАРХИИ" - осторожней, т.к. грузит систему
6 Дуб
 
06.05.08
11:11
(5) да фиг с ней, с нагрузкой.. В иерархии выдаст всю лестницу..
7 wHammer
 
06.05.08
11:15
попробуй отдельным запросом выбрать всю номенклатуру где будет условие отбора элементов только 1-го уровня, далее надо мудрить с левым соединением с основным запросом
8 Дуб
 
06.05.08
11:23
(7) согласен, но это уже в область извратов уходит.. Если вариантов не найду - придётся так.
9 Дуб
 
06.05.08
11:23
Спасибо ответившим. Пока задача перешла в состояние теоретического вопроса: заткнул с другой стороны.
10 TeaM
 
06.05.08
22:22
Если речь идет о справочнике Номенклатура, то иметь неограниченную иерархию большого смысла нет. Можно ограничить ее разумным числом - скажем 10 (только представьте сколько папок надо по очереди открыть чтобы добраться до конечного элемента - это же изврат!). Если неохота менять метаданные в виду грядущих обновлений конфы - то можно ограничить максимальный уровень вложенности программно - например если платформа 8.1 есть возможность подключить дополнительный обработчик события ПередЗаписью, где проверять и запрещать превышение.

Теперь, когда уровней всего скажем десять можно использовать запрос вида:


ВЫБРАТЬ
   Предок
ИЗ
   (ВЫБРАТЬ
       Ссылка.Родитель КАК Предок
   ИЗ
       Справочник.Номенклатура
   ГДЕ
       Ссылка = &Ссылка
       
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       Ссылка.Родитель.Родитель
   ИЗ
       Справочник.Номенклатура
   ГДЕ
       Ссылка = &Ссылка
   
   ...
       
   // всего десять раз
       
   ...
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       Ссылка.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
   ИЗ
       Справочник.Номенклатура
   ГДЕ
       Ссылка = &Ссылка
   ) КАК ПОДЗАПРОС    
ГДЕ
// если ищется предок нулевого уровня то:
   Предок.Родитель.Код ЕСТЬ NULL
// если ищется предок первого уровня то:
   Предок.Родитель.Родитель.Код ЕСТЬ NULL
   

- запрос большой, но не сложный.
11 TeaM
 
06.05.08
22:26
Вернее условие должно быть:


ГДЕ
// если ищется предок нулевого уровня то:
   Предок.Родитель.Код ЕСТЬ NULL
И
   НЕ Предок.Код ЕСТЬ NULL
       
// если ищется предок первого уровня то:
   Предок.Родитель.Родитель.Код ЕСТЬ NULL
И
   НЕ Предок.Родитель.Код ЕСТЬ NULL
12 Paxa
 
07.05.08
01:22
можно замутить запрос с использованием В Иерархии(), .ЭтоГруппа и .Уровень
выбираешь папки 0 уровня - затем к этому запросу присоединяешь элементы не папки, которые в иерархии.
13 Paxa
 
07.05.08
02:25
Выбрать
выборка.ссылка
из (ВЫБРАТЬ
   Материалы.Ссылка КАК Ссылка
ИЗ
   Справочник.Материалы КАК Материалы
)как выборка
где (выборка.ссылка.родитель=&Родитель0)или(выборка.ссылка.родитель<>&Родитель0 и Не (выборка.ссылка.этогруппа))

получается в результате все то что тебе надо... только без группировок
14 NewNick
 
07.05.08
03:02
(9) в (7) ИМХО единственный правильный ответ. вроде не сложно догадаться что без В ИЕРАРХИИ задача не имеет решения так как только это решение имеет неограниченный уровень вложености. опять же без соединения тоже никак ибо для того что бы вывести что то это что то надо иметь в запросе.
почему ты назвал это решение извратом не понятно - какая задача такое решение ;)
Ошибка? Это не ошибка, это системная функция.