Имя: Пароль:
1C
1С v8
Подскажите как запросом получить требуемую иерархию элементов
0 rikodroo
 
24.07.13
15:33
Есть иерархический справочник (только элементы) ГруппаПрайсЛиста:

Автозапчасти ВАЗ,ОКА
   Китайские подделки
   Официально от производителя
Автозапчасти ГАЗ,УАЗ, ГАЗ 53, ПАЗ
Автокрепеж ВАЗ, ГАЗ, УАЗ
   Болты
   Что попало
       Канадские гайки
       Болты из Гватемалы
Кузовное железо ВАЗ, ГАЗ, УАЗ


У каждого товара есть соотв.реквизит, так, что имеем вот такую таблицу:

["ГруппаПрайсЛиста"    ;    "Товар"]

[Автозапчасти ВАЗ,ОКА    ;    Амортизатор задней подвески 2101 "FENOX" (газ) (A22365)]
[Автозапчасти ГАЗ,УАЗ, ГАЗ 53, ПАЗ    ;    Бачок омывателя УАЗ 3160 "Патриот" (голый)]
[Китайские подделки    ;    Бачок расширительный 1118]
[Официально от производителя    ;    Балка передняя 2110 "АВТОВАЗ"]
[Автозапчасти ВАЗ,ОКА    ;    Адсорбер 1118/2190]
[Канадские гайки    ;    Винт двери 2108 М8*35]
[Канадские гайки    ;    Винт зеркала 2108 М4*16]
[Болты из Гватемалы    ;    Болт подвесного подшипника 2101 М8*18]
[Болты    ;    Болт двери 2108 М10*42 (палец)]
[Болты    ;    Болт двери бесшумный 2108 (4шт)]
[Автокрепеж ВАЗ, ГАЗ, УАЗ    ;    Болт бампера 2105 М14*70]
[Автокрепеж ВАЗ, ГАЗ, УАЗ    ;    Болт генератора 2101/08 М12*120]
[Кузовное железо ВАЗ, ГАЗ, УАЗ    ;    Стойка УАЗ-469 (задней двери) лев.  "УАЗ"]
[Кузовное железо ВАЗ, ГАЗ, УАЗ    ;    Стойка УАЗ-469 (задней двери) прав.  "УАЗ"]
[Кузовное железо ВАЗ, ГАЗ, УАЗ    ;    Порог УАЗ "Патриот" (левый)  "УАЗ"]
[Кузовное железо ВАЗ, ГАЗ, УАЗ    ;    Порог УАЗ "Патриот" (правый)  "УАЗ"]
[Автозапчасти ГАЗ,УАЗ, ГАЗ 53, ПАЗ    ;    Амортизатор передней подвески ГАЗ Соболь 2217 "Плаза" (2180)]


Запрос вида:
ВЫБРАТЬ
   Номенклатура.ГруппаПрайсЛиста КАК ГруппаПрайсЛиста,
   Номенклатура.Ссылка КАК Товар
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ИТОГИ ПО
   ГруппаПрайсЛиста ИЕРАРХИЯ

выдает данные таким образом:

Автозапчасти ГАЗ,УАЗ, ГАЗ 53, ПАЗ    <NULL>
   Автозапчасти ГАЗ,УАЗ, ГАЗ 53, ПАЗ    Бачок омывателя УАЗ 3160 "Патриот" (голый)
   Автозапчасти ГАЗ,УАЗ, ГАЗ 53, ПАЗ    Амортизатор передней подвески ГАЗ Соболь 2217 "Плаза" (2180)
Кузовное железо ВАЗ, ГАЗ, УАЗ    <NULL>
   Кузовное железо ВАЗ, ГАЗ, УАЗ    Стойка УАЗ-469 (задней двери) лев.  "УАЗ"
   Кузовное железо ВАЗ, ГАЗ, УАЗ    Стойка УАЗ-469 (задней двери) прав.  "УАЗ"
   Кузовное железо ВАЗ, ГАЗ, УАЗ    Порог УАЗ "Патриот" (левый)  "УАЗ"
   Кузовное железо ВАЗ, ГАЗ, УАЗ    Порог УАЗ "Патриот" (правый)  "УАЗ"
Автозапчасти ВАЗ,ОКА    <NULL>
   Автозапчасти ВАЗ,ОКА    <NULL>
       Автозапчасти ВАЗ,ОКА    Амортизатор задней подвески 2101 "FENOX" (газ) (A22365)
       Автозапчасти ВАЗ,ОКА    Адсорбер 1118/2190
   Китайские подделки    <NULL>
       Китайские подделки    Бачок расширительный 1118
   Официально от производителя    <NULL>
       Официально от производителя    Балка передняя 2110 "АВТОВАЗ"
Автокрепеж ВАЗ, ГАЗ, УАЗ    <NULL>
   Болты    <NULL>
       Болты    Болт двери 2108 М10*42 (палец)
       Болты    Болт двери бесшумный 2108 (4шт)
   Автокрепеж ВАЗ, ГАЗ, УАЗ    <NULL>
       Автокрепеж ВАЗ, ГАЗ, УАЗ    Болт бампера 2105 М14*70
       Автокрепеж ВАЗ, ГАЗ, УАЗ    Болт генератора 2101/08 М12*120
   Что попало    <NULL>
       Канадские гайки    <NULL>
           Канадские гайки    Винт двери 2108 М8*35
           Канадские гайки    Винт зеркала 2108 М4*16
   Болты из Гватемалы    <NULL>
       Болты из Гватемалы    Болт подвесного подшипника 2101 М8*18


Мне не нравится, что например в "подвыборке" Автозапчасти ВАЗ,ОКА    <NULL> - имеется таже группа прайс листа (Автозапчасти ВАЗ,ОКА    <NULL>), в которое представлены элементы, для которых эта группа корневая. Как сделать, что бы (на примере это группы) было вместо:

Автозапчасти ВАЗ,ОКА    <NULL>
   Автозапчасти ВАЗ,ОКА    <NULL>
       Автозапчасти ВАЗ,ОКА    Амортизатор задней подвески 2101 "FENOX" (газ) (A22365)
       Автозапчасти ВАЗ,ОКА    Адсорбер 1118/2190
   Китайские подделки    <NULL>
       Китайские подделки    Бачок расширительный 1118
   Официально от производителя    <NULL>
       Официально от производителя    Балка передняя 2110 "АВТОВАЗ"

вот так:

Автозапчасти ВАЗ,ОКА    <NULL>
   Китайские подделки    <NULL>
       Китайские подделки    Бачок расширительный 1118
   Официально от производителя    <NULL>
       Официально от производителя    Балка передняя 2110 "АВТОВАЗ"
*    Автозапчасти ВАЗ,ОКА    Амортизатор задней подвески 2101 "FENOX" (газ) (A22365)
*    Автозапчасти ВАЗ,ОКА    Адсорбер 1118/2190    




Я понимаю, что при обходе результата запрос, можно эту ситуацию разрулить, но может как-то и в запросе можно?
1 zhig75
 
24.07.13
15:35
Мдя ну и каша!
2 rikodroo
 
24.07.13
15:36
да, чего то форматирование неочень. Если скопировать и вставить в блокнот, то нормально
3 olegves
 
24.07.13
15:38
(0) выгрузить в дерево значений, но откуда у тебя в справочнике значения Null?
4 zhig75
 
24.07.13
15:38
Ты напиши какой алгоритм хочеш получить, а то тут китайские поделки, ваз, ока, там, маз, хрен разбереш.
5 rikodroo
 
24.07.13
15:40
(3) в справочнике нет null. Это, когда итог делаеш появляется. Это нормально.
6 rikodroo
 
24.07.13
15:46
Ок, попробую.

Есть таблица вида (Товар, ГруппаПрайсЛиста)
ГруппаПрайсЛиста - это иерархические справочник, в иерархии которого я хочу получить таблицу товаров. Притом в таком виде - сначала идет группа (или подгруппа), а потом элементы, для которых эта группа корневая:



ГруппаПрайсЛиста1
   ПодгруппаА
       ТоварХ
   ПодгруппаБ
       ТоварУ
   ТоварZ
   ТоварO
ГруппаПрайсЛиста2
   ТоварQ
ГруппаПрайсЛиста2
   ПодгруппаА
       ПодгруппаА
           ТоварR
   ТоварU
7 rikodroo
 
24.07.13
15:46
ЧТобы при формировании прайса не заморачиваться с обходом результата запроса в общем
8 olegves
 
24.07.13
15:47
(5) если итоги, то делай обход по иерархии
9 zhig75
 
24.07.13
15:49
ИТОГИ
   СРЕДНЕЕ(Цена),
   СУММА(КоличествоОборот),
   СУММА(КоличествоПриход),
   СУММА(КоличествоРасход)
ПО
   ОБЩИЕ,
   Номенклатура ИЕРАРХИЯ
10 rikodroo
 
24.07.13
15:50
(8) с иерархией получается типа:

ГруппаПрайсЛиста1
   ПодгруппаА
           ТоварХ
     ПодгруппаБ
           ТоварУ
       ГруппаПрайсЛиста1    
       ТоварZ
           ТоварO
ГруппаПрайсЛиста2
   ТоварQ
ГруппаПрайсЛиста2
   ПодгруппаВ
           ПодгруппаГ
               ТоварR
   ГруппаПрайсЛиста2        
           ТоварU
11 zhig75
 
24.07.13
15:50
(9) это пример куска запроса который по часа назад делал. Делай итоги по элементы и иерархия.
12 rikodroo
 
24.07.13
15:52
(11) это не решает проблему из (6)
13 zhig75
 
24.07.13
15:52
Подгруппа Б у тебя родитель Подгрупп А?
14 rikodroo
 
24.07.13
15:53
нет
15 zhig75
 
24.07.13
15:53
Запрос вываливай!
16 rikodroo
 
24.07.13
15:54
ВЫБРАТЬ
   Номенклатура.ГруппаПрайсЛиста КАК ГруппаПрайсЛиста,
   Номенклатура.Ссылка КАК Товар
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   НЕ Номенклатура.ГруппаПрайсЛиста = ЗНАЧЕНИЕ(Справочник.плГруппыДляПрайсЛиста.ПустаяСсылка)
ИТОГИ ПО
    ГруппаПрайсЛиста ИЕРАРХИЯ
17 rikodroo
 
24.07.13
15:54
у групп иерархия такая:


ГруппаПрайсЛиста1
   ПодгруппаА
       ПодгруппаБ
       ГруппаПрайсЛиста1    
ГруппаПрайсЛиста2
ГруппаПрайсЛиста2
   ПодгруппаВ
           ПодгруппаГ
       ГруппаПрайсЛиста2
18 rikodroo
 
24.07.13
15:55
блин, опять я маленько неверно написал

(17) - такая получается, а мне надо:

ГруппаПрайсЛиста1
   ПодгруппаА
       ПодгруппаБ
ГруппаПрайсЛиста2
   ПодгруппаВ
           ПодгруппаГ
19 rikodroo
 
24.07.13
15:56
(15) проще тебе в общем аналогичный (16) запрос выполнить и увидиш
20 zhig75
 
24.07.13
16:00
Подгруппа А у тебя Родитель Подгруппы Б.
Вот тебе простой запрос и пища для размышлений.

ВЫБРАТЬ
   Номенклатура.Наименование,
   Номенклатура.Родитель КАК Родитель
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ИТОГИ ПО
   Родитель ИЕРАРХИЯ
21 rikodroo
 
24.07.13
16:02
(20) ты в иерархическом справочнике делаеш итоги по родителю, а теперь сделай как у меня таблицу и посмотри, что запрос выдаст
22 rikodroo
 
24.07.13
16:06
+(20) Подгруппа А  Родитель Подгруппы Б - да, именно так. Но вот как сделать, чтобы ГруппаПрайсЛиста1 не была подгруппой себяже?
23 zhig75
 
24.07.13
16:06
(21) я нихрена не понимаю.
24 rikodroo
 
24.07.13
16:13
(23) если так делать то будет:

1)ПодгруппаА,ПодгруппаБ,ГруппаПрайсЛиста1  - на одном уровне в группе ГруппаПрайсЛиста1      

2)ПодгруппаВ, ГруппаПрайсЛиста3 - на одном уровне в ГруппаПрайсЛиста3                

ГруппаПрайсЛиста1
   ПодгруппаА
      ТоварХ
   ПодгруппаБ
      ТоварУ
   ГруппаПрайсЛиста1    
      ТоварZ
      ТоварO
ГруппаПрайсЛиста2
   ТоварQ
ГруппаПрайсЛиста3
   ПодгруппаВ
      ПодгруппаГ
           ТоварR
   ГруппаПрайсЛиста3        
           ТоварU

Так вот надо, чтобы было так:


ГруппаПрайсЛиста1
   ПодгруппаА
      ТоварХ
   ПодгруппаБ
      ТоварУ
   ТоварZ
   ТоварO
ГруппаПрайсЛиста2
   ТоварQ
ГруппаПрайсЛиста3
   ПодгруппаВ
      ПодгруппаГ
           ТоварR
   ТоварU
25 rikodroo
 
24.07.13
16:13
Сейчас нормально, без ошибок написал и отформатировалось
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.