Имя: Пароль:
1C
1С v8
Помогите, пожалуйста, с запросом!
,
0 Grusswelle
 
12.08.11
15:53
Есть иерархическая структура: справочник, план счетов - всё, что угодно, где есть реквизит "Родитель". Задача - вывести дополнительное поле, которое обозначало бы, используется ли данный элемент в качестве родителя какого-либо другого (является группой) или нет. Поля "ЭтоГруппа" нет.

Либо носом ткните меня куда-нибудь позырить...

Заранее спасибо.
1 mzelensky
 
12.08.11
15:58
(0) что значит "ЭтоГруппа" НЕТ ??? а куда оно делось???
2 Grusswelle
 
12.08.11
15:59
(1) Не важно. Нету - и всё. :-)
3 luckyluke
 
12.08.11
16:03
(0) что-то акромя как собрать всех родителей в ВТ и проверить на вхождение в этот список ничего не приходит...
4 Luhtas
 
12.08.11
16:05
(0) ЭтоГруппа - Это же вроде признак булево, не могу сообразить почему его нет в иерархическом справочнике. А поточнее можно?
5 cViper
 
12.08.11
16:06
добавь ЭтоГруппа. В будущем пригодится.
6 luckyluke
 
12.08.11
16:06
Что-то вроде:

ВЫБРАТЬ РАЗЛИЧНЫЕ
   Хозрасчетный.Родитель КАК Родитель
ПОМЕСТИТЬ ВТ_СписокРодителей
ИЗ
   ПланСчетов.Хозрасчетный КАК Хозрасчетный

ИНДЕКСИРОВАТЬ ПО
   Родитель
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Хозрасчетный.Ссылка,
   ВЫБОР
       КОГДА ВТ_СписокРодителей.Родитель ЕСТЬ NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК ЭтоГруппа
ИЗ
   ПланСчетов.Хозрасчетный КАК Хозрасчетный
       ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СписокРодителей КАК ВТ_СписокРодителей
       ПО Хозрасчетный.Ссылка = ВТ_СписокРодителей.Родитель
7 Grusswelle
 
12.08.11
16:07
(4) Нету реквизита "ЭтоГруппа". Нету - и всё.
(5) Нельзя.
8 Grusswelle
 
12.08.11
16:07
(3) Вот с этим-то и мучаюсь. То есть, нужен вложенный вопрос, который возвращал бы два поля:
1. Ссылка (для объединения)
2. Количество использования элемента в качестве родителя (0 - элемент, не 0 - группа).

...только вот на счёт 2-го пункта я сейчас торможу что-то... :-/
9 Grusswelle
 
12.08.11
16:08
(6) Типа того. Только речь идёт о динамическом списке. Он разве поддерживает временные таблицы?:!
10 AquaKosh
 
12.08.11
16:09
(9) Нужно вывести дерево, имея в наличии только таблицу с ID и parentID?
11 luckyluke
 
12.08.11
16:10
(9) ну замени ВТ на вложенный запрос:

ВЫБРАТЬ
   Хозрасчетный.Ссылка,
   ВЫБОР
       КОГДА ВТ_СписокРодителей.Родитель ЕСТЬ NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК ЭтоГруппа
ИЗ
   ПланСчетов.Хозрасчетный КАК Хозрасчетный
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
           Хозрасчетный.Родитель КАК Родитель
       ИЗ
           ПланСчетов.Хозрасчетный КАК Хозрасчетный) КАК ВТ_СписокРодителей
       ПО Хозрасчетный.Ссылка = ВТ_СписокРодителей.Родитель
12 Grusswelle
 
12.08.11
16:10
(10) Не дерево. Нужно вывести дополнительное поле (например IsParent), которое означало бы, используется ли этот элемент в качестве Parent хоть у одного или нет.
13 luckyluke
 
12.08.11
16:13
(11) Можно и без вложенного:

ВЫБРАТЬ Различные
   Хозрасчетный.Ссылка,
   ВЫБОР
       КОГДА ВТ_СписокРодителей.Родитель ЕСТЬ NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК ЭтоГруппа
ИЗ
   ПланСчетов.Хозрасчетный КАК Хозрасчетный
       ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК ВТ_СписокРодителей
       ПО Хозрасчетный.Ссылка = ВТ_СписокРодителей.Родитель
           И (ВТ_СписокРодителей.Родитель <> ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка))
14 Inform
 
12.08.11
16:20
Накидал быстренько, не проверял, но принцип такой должен сработать:

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   Хозрасчетный.Ссылка,
   ЛОЖЬ
ИЗ
   ПланСчетов.Хозрасчетный КАК Хозрасчетный
       ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный1
       ПО Хозрасчетный.Ссылка = Хозрасчетный1.Родитель
ГДЕ
   Хозрасчетный1.Ссылка ЕСТЬ NULL
15 Inform
 
12.08.11
16:21
ПОМЕСТИТЬ ВТ_ПланСчетовСРодителями

лишнее для дин. списка
16 Grusswelle
 
12.08.11
16:24
ща попробую...
17 Grusswelle
 
12.08.11
16:35
Поковырялся в носу, включил мозг. :-))

ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ЕПСБУ.Родитель КАК Ссылка,
           МАКСИМУМ(1) КАК Группа
       ИЗ
           ПланСчетов.ЕПСБУ КАК ЕПСБУ
       ГДЕ
           ЕПСБУ.Родитель <> ЗНАЧЕНИЕ(ПланСчетов.ЕПСБУ.ПустаяСсылка)
       
       СГРУППИРОВАТЬ ПО
           ЕПСБУ.Родитель) КАК ВложенныйЗапрос
18 Grusswelle
 
12.08.11
16:35
Всем спасибо.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn