Имя: Пароль:
1C
1C 7.7
v7: вывод ИТЗ с иерархией по Номенклатуре и шахматкой по Складам в mxl
0 Dolly_EV
 
27.12.12
13:47
Собственно сабж.
http://itmages.ru/image/view/820892/d6640a73
Требуется вывести ИТЗ с иерархией номенклатуры шахматкой по складам. Чего-то туплю, как сделать группировку, чтобы выводилось экономично и быстро
1 Dolly_EV
 
27.12.12
13:51
Колонки ИТЗ:
тзОст.Группировать("индТовар:*&Товар;индСклад:*Склад","ОстКол,ОстСумма",1);
2 viktor_vv
 
27.12.12
13:56
Ну либо на омент формирования ТЗ сделать, чтобы по каждой номенклатуре были все скалды, типа ВСЕ вошедшие в запрос.
Либо до группировки выгрузить в другую ТЗ только склады, свернуть.
И после вывода номенклатуры обходить эту самую ТЗ со всеми сколадами и искать есть ли в Потомках необходимый склад.
Правда с группами не знаю как будет работать.
3 antoneus
 
27.12.12
13:58
лепить по колонке на каждый склад как вариант
4 ADirks
 
27.12.12
15:59
Как и все отчеты подобного рода:
- сформировать список складов тзОст.ДобавитьИндекс("СкладУ", "Склад", 1); тзОст.Выгрузить(сзСклады, "СкладУ", "Склад");
- при выводе группировки Склад цикл не по таблице, а по сзСклады, и поиск склада в таблице. если не нашли - все показатели нулевые.
5 Ёпрст
 
27.12.12
16:34
(4) ну нет чтоб своим классом поделится..
:)
6 Ёпрст
 
27.12.12
16:35
в своём классе, тот что итоги по группировкам, не реализовывал иерархию по группам, кстати ? с разворотом вправо, например ?
7 ADirks
 
27.12.12
17:52
(5) ну, можно и так: http://infostart.ru/public/15510/  или http://rikcenter.ru/download/RiK_Sums.rar
но он немножечко устарел (т.е. то, что выложено), к тому же сейчас используется в связке с классом ПостроительОтчета. Я бы выложил, не жалко, но выковырять всё это из текущей среды сложновато будет.

(6) Нет, это никогда не было нужно. И слава богу :)
8 Dolly_EV
 
28.12.12
09:32
(4) дык когда я перебираю тзОст - у меня наверху группы - по ним тоже нужны итоги в разрезе складов - а до складов еще неизвестно сколько уровней вниз через тзПотомки... как-то вторую таблицу надо делать из сгруппированной обратно в "плоскую" и индекс в ней по Товар,Склад

"- при выводе группировки Склад цикл не по таблице, а по сзСклады" - это-то как раз понятно
9 Dolly_EV
 
28.12.12
09:34
буду смотреть "ИтогиПоГруппировкам"
(7) "Я бы выложил, не жалко" может все же выковыряешь? ))
10 Скользящий
 
28.12.12
09:39
Я такие вещи обычно в БВК_ОтчетПоТЗ.ert http://infostart.ru/public/14794/?ref=174 вывожу, он красиво группирует обычно. Посмотри, может то что надо.
11 ADirks
 
28.12.12
10:43
(8) а, вон как...  Ну можно конечно налепить колонок типа "Родитель_N" по количеству уровней, и по ним фильтровать, но это изврат какой-то.  
В любом случае лучше все эти итоги считать в процессе вывода. И понятнее, и затрат меньше.
Только вот итогов по иерархии в том классе нету, ибо не надо никогда было. Поищи на ИС, там этого добра есть.
12 Dolly_EV
 
28.12.12
10:47
(11) да вот уже думаю родителей в запросе вытащить и сгруппировать там... только как вытащить всех? (Родитель.Родитель.Родитель....)
13 Mikeware
 
28.12.12
10:51
(12) сделай уже через квериконсоль, и не парь мосг.
14 Dolly_EV
 
28.12.12
10:56
(13) чем мну поможет квериконсоль?
15 ADirks
 
28.12.12
11:01
можно слепить такой вот подзапрос

|SELECT
|    Coalesce(Грп3.ID, Грп2.ID, Грп1.ID, $ПустойИД) Родитель,
|
|    Грп1.ID Грп1,
|    Грп2.ID Грп2,
|    Грп3.ID Грп3
|FROM
|    спрНоменклатура Грп1
|    LEFT JOIN спрНоменклатура Грп2 ON
|        Грп2.ParentID = Грп1.ID
|        AND Грп2.IsFolder = 1
|    LEFT JOIN спрНоменклатура Грп3 ON
|        Грп3.ParentID = Грп2.ID
|        AND Грп3.IsFolder = 1
|WHERE
|    Грп1.IsFolder = 1
|    AND Грп1.ParentID = $ПустойИД

лепить его естественно динамически, по метаданным
16 Dolly_EV
 
28.12.12
11:08
(15) т.е. это вытянется иерархия групп "сверху-вниз" (правда Coalesce придется мне заменить на CASE, использую класс "ПрямойЗапрос")
но как его потом соединить с запросом остатков чего-то не могу сообразить
17 ADirks
 
28.12.12
11:16
как-то так

|SELECT
|    Остатки.Номенклатура,
|
|    Родители.Грп1,
|    ...
|FROM
|    (
|    ...
|    ) Остатки
|    LEFT JOIN спрНоменклатура Номенклатура ON Номенклатура.ID = Остатки.Номенклатура
|
|    LEFT JOIN (
|        SELECT
|            Coalesce(Грп3.ID, Грп2.ID, Грп1.ID, $ПустойИД) Родитель,
|        
|            Грп1.ID Грп1,
|            Грп2.ID Грп2,
|            Грп3.ID Грп3
|        FROM
|            спрНоменклатура Грп1
|            LEFT JOIN спрНоменклатура Грп2 ON
|                Грп2.ParentID = Грп1.ID
|                AND Грп2.IsFolder = 1
|            LEFT JOIN спрНоменклатура Грп3 ON
|                Грп3.ParentID = Грп2.ID
|                AND Грп3.IsFolder = 1
|        WHERE
|            Грп1.IsFolder = 1
|            AND Грп1.ParentID = $ПустойИД
|    ) Родители ON Родители.Родитель = Номенклатура.ParentID

А почему Coalesce() нельзя?  Как-то криво парсится?
Кейс уж больно развесистый будет
18 Mikeware
 
28.12.12
11:16
(14) там все это делается мышкой. или шестью строками кода...
19 Dolly_EV
 
28.12.12
11:22
(17) в доке по "ПрямомуЗапросу" нету Coalesce()
20 Dolly_EV
 
28.12.12
11:24
(17) получается Грп у меня будет КолвоУровней СпрНоменклатура -1 ?
21 ADirks
 
28.12.12
11:26
(19) Зато в SQL есть. Если я правильно понимаю, то такие вещи через парсер ПрямогоЗапроса должны неизменными проходить.

(20) ага, вроде так
22 Dolly_EV
 
28.12.12
11:29
(21) щас попробую
23 Dolly_EV
 
28.12.12
11:29
(21) а в 1SQLite есть?
24 ADirks
 
28.12.12
11:30
(23) не знаю, смотри доку
25 Dolly_EV
 
28.12.12
12:27
(17) вместо $ПустойИД в  Coalesce() как строкой передать?
'         ' ? где-то там "0" же еще надо?
26 ADirks
 
28.12.12
12:32
'     0   '
только зачем? опять парсер не пропускает?
27 Dolly_EV
 
28.12.12
12:32
(25) отбой, копипаст подвел)) мне надо писать :ПустойИД, а не $ПустойИД )))
28 Dolly_EV
 
28.12.12
12:41
Сначала подумал, что раз класс Coalesce() не парсит, то и то, что внутри не парсит)))
Ну чтож, взлетело, но не совсем. При несбалансированной иерархии у элементов вообще нету родителей
http://itmages.ru/image/view/822349/88fc208d

остался последний пинок в нужном направлении ))

вот сам запрос:
|ВЫБРАТЬ
|    Родители.Грп1 КАК [Грп1 $Справочник.Номенклатура]
|    ,Родители.Грп2 КАК [Грп2 $Справочник.Номенклатура]
|    ,Родители.Грп3 КАК [Грп3 $Справочник.Номенклатура]
|    ,РегПарт.Товар КАК [Товар $Справочник.Номенклатура]
|    ,РегПарт.Склад КАК [Склад $Справочник.МестаХранения]
|    ,РегПарт.КоличествоОстаток КАК ОстКол
|    ,$ПоследнееЗначение.Цены.Цена($СпрЦены.ТекущийЭлемент,:лДатаОст~)*РегПарт.КоличествоОстаток КАК ОстСумма
|    ,$ПоследнееЗначение.Цены.Цена($СпрЦены.ТекущийЭлемент,:лДатаОст~) КАК [Цена $Число.15.2]
|ИЗ
|    $РегистрОстатки.ПартииТоваров(:лДатаОст~,
|                                (Фирма В (ВЫБРАТЬ val ИЗ #глУсловие1) И Товар В (ВЫБРАТЬ val ИЗ #глУсловие2) И 3=3 И 4=4),
|                                (Товар,Склад),
|                                (Количество,Сумма,НДС)) КАК РегПарт
|ЛЕВОЕ СОЕДИНЕНИЕ
|    Справочник.Номенклатура КАК СпрТов $nolock
|ПО
|    $СпрТов.ТекущийЭлемент=РегПарт.Товар
|ЛЕВОЕ СОЕДИНЕНИЕ
|    (SELECT
|        Coalesce($Грп3.ТекущийЭлемент, $Грп2.ТекущийЭлемент, $Грп1.ТекущийЭлемент, :ПустойИД) КАК Родитель
|        ,$Грп1.ТекущийЭлемент КАК Грп1
|        ,$Грп2.ТекущийЭлемент КАК Грп2
|        ,$Грп3.ТекущийЭлемент КАК Грп3
|    FROM
|        Справочник.Номенклатура КАК Грп1 $nolock
|        LEFT JOIN Справочник.Номенклатура КАК Грп2 $nolock
|            ON $Грп2.Родитель = $Грп1.ТекущийЭлемент AND $Грп2.ЭтоГруппа = 1
|        LEFT JOIN Справочник.Номенклатура КАК Грп3 $nolock
|            ON $Грп3.Родитель = $Грп2.ТекущийЭлемент AND $Грп3.ЭтоГруппа = 1
|WHERE
|$Грп1.ЭтоГруппа = 1
|    AND $Грп1.Родитель = :ПустойИД) КАК Родители
|ПО
|    Родители.Родитель=$СпрТов.Родитель
|ЛЕВОЕ СОЕДИНЕНИЕ
|  Справочник.Цены КАК СпрЦены $nolock
|ПО $СпрЦены.Владелец = РегПарт.Товар И $СпрЦены.ТипЦен=:лТипЦен И $СпрЦены.ПометкаУдаления = 0
|ГДЕ ОстКол<>0
29 ADirks
 
28.12.12
12:47
Ну нет и нет - нестрашно. Пустое значение это же тоже значение.
30 Dolly_EV
 
28.12.12
12:49
(29) "Ну нет и нет - нестрашно. Пустое значение это же тоже значение." ?? это о чем?
31 ADirks
 
28.12.12
12:51
это про

"При несбалансированной иерархии у элементов вообще нету родителей ...  остался последний пинок в нужном направлении"

видимо, я не понял проблемы :)
32 Dolly_EV
 
28.12.12
12:52
(31) на картинке видно ))
33 Dolly_EV
 
28.12.12
12:53
сейчас переделал запрос под реальный справочник - 6 уровней, т.е. Грп1,2,3,4,5 - вообще нет родителей :-((... с Грп3 сработало, т.к. в примере реально над элементами как раз три уровня групп было
34 Dolly_EV
 
28.12.12
13:04
(33) отменяется, косяк в условии. Осталась только проблема в 29 (на картинке)
35 ADirks
 
28.12.12
13:10
А в чём проблема то? В запрос всё попало как положено. В отчёт не выводится что-ли?
36 Dolly_EV
 
28.12.12
13:13
(35) так посмотри на картинку

http://itmages.ru/image/view/822349/88fc208d

у элемента "Гербовая Особая 0,5" родитель Грп2 = "(01) ЗАО Русский Алкоголь", Родитель.Родитель Грп1 = "1 - Водка"

а запрос возвращает все пусто
37 ADirks
 
28.12.12
13:21
А, всё, дошло. Хотел всех перехитрить, но не вышло...
Придётся всё-таки так джойнить:

(
...
) КАК Родители
ПО
   Родители.Грп3=$СпрТов.Родитель
   Родители.Грп2=$СпрТов.Родитель
   Родители.Грп1=$СпрТов.Родитель
38 Dolly_EV
 
28.12.12
13:24
(37) через ИЛИ наверное?
39 ADirks
 
28.12.12
13:25
ага, лишнего стёр, пока копипастил
40 varelchik
 
28.12.12
13:30
Как вариант я делаю так:
1.Запрос к остаткам в разрезе Товар Склад.
2.Создаю индекс Склад (уникальный).
3.Выгружаю с список значений.
4.Создаю новую ИТЗ: Товар,Ост+ИдентификаторСклада,Ост+ИдентификаторСкладаN,.....
5.Группирую по товарам
6.Обходим товары добавляем новую строку в новой ИТЗ
а по потомкам заполняем колонку ОстИдентификаторСклада нужным значеним.
7.Группируем Новую ИТЗ по Товару.
41 Dolly_EV
 
28.12.12
13:35
(40) угу, я примерно так и хотел уже делать, но тут подвернулся вариант с прямым запросом))), им вроде красивше получится. Осталось чуть-чуть добить...

(37) теперь лишнее прихватывается :-((
http://itmages.ru/image/view/822445/f6e40e89
группы в Грп3 - это НЕ родители "Гербовая Особая 0,5" - а просто группы на том же уровне

| ... КАК Родители
   |ПО
   |    Родители.Родитель=$СпрТов.Родитель ИЛИ
   |    Родители.Грп1=$СпрТов.Родитель ИЛИ
   |    Родители.Грп2=$СпрТов.Родитель ИЛИ
   |    Родители.Грп3=$СпрТов.Родитель ИЛИ
   |    Родители.Грп4=$СпрТов.Родитель ИЛИ
   |    Родители.Грп5=$СпрТов.Родитель";
42 Dolly_EV
 
28.12.12
13:37
+(41) строку:
|    Родители.Родитель=$СпрТов.Родитель ИЛИ

выкидывал, порядок (1-5, 5-1) менял, не выходит каменный цветок :-(
43 ADirks
 
28.12.12
13:37
Порядок сравнений поменяй, чтобы снизу вверх было
44 ADirks
 
28.12.12
13:38
| ... КАК Родители
   |ПО
   |    Родители.Грп5=$СпрТов.Родитель ИЛИ
   |    Родители.Грп4=$СпрТов.Родитель ИЛИ
   |    Родители.Грп3=$СпрТов.Родитель ИЛИ
   |    Родители.Грп2=$СпрТов.Родитель ИЛИ
   |    Родители.Грп1=$СпрТов.Родитель";
45 Dolly_EV
 
28.12.12
13:41
(44) см. (42) не катит :-(
46 ADirks
 
28.12.12
13:41
Странно, у меня всё пучком
47 Dolly_EV
 
28.12.12
13:43
(46) у тебя SQL ?
48 ADirks
 
28.12.12
13:46
да
49 Mikeware
 
28.12.12
13:46
50 Dolly_EV
 
28.12.12
13:50
(48) проверил и SQL и 1Sqlite: и там и там выхватывает лишнее в Грп3.

Попутно вопрос, почему в SQL нельзя по алиасу в секции WHERE обращаться?
в 1Склайт конструкция "ГДЕ ОстКол<>0" прокатывает, а в СКЛ
требует "ГДЕ РегПарт.КоличествоОстаток<>0" (на ОстКол ругается "no such column")

(49) Mikeware, не, я теперь добью прямым запросом :-)) квериконсоль бум осваивать позже :-))
51 ADirks
 
28.12.12
13:53
а попробуй так


   

| ... КАК Родители
   |ПО
   |    Родители.Грп5=$СпрТов.Родитель ИЛИ
   |    (Родители.Грп4=$СпрТов.Родитель И Родители.Грп5=$СпрТов.Родитель Is Null) ИЛИ
   |    (Родители.Грп3=$СпрТов.РодительИ Родители.Грп4=$СпрТов.Родитель Is Null) ИЛИ
   |    (Родители.Грп2=$СпрТов.РодительИ Родители.Грп3=$СпрТов.Родитель Is Null) ИЛИ
   |    (Родители.Грп1=$СпрТов.РодительИ Родители.Грп2=$СпрТов.Родитель Is Null)";

похоже, оптимизатор логических выражений условия вычисляет в удобном ему порядке, а не так как написано в тексте
52 ADirks
 
28.12.12
13:53
| ... КАК Родители
   |ПО
   |    Родители.Грп5=$СпрТов.Родитель ИЛИ
   |    (Родители.Грп4=$СпрТов.Родитель И Родители.Грп5 Is Null) ИЛИ
   |    (Родители.Грп3=$СпрТов.РодительИ Родители.Грп4 Is Null) ИЛИ
   |    (Родители.Грп2=$СпрТов.РодительИ Родители.Грп3 Is Null) ИЛИ
   |    (Родители.Грп1=$СпрТов.РодительИ Родители.Грп2 Is Null)";
53 Mikeware
 
28.12.12
13:53
(50) "мыши плакали, кололись, но продолжали жрать кактус..."
54 Dolly_EV
 
28.12.12
13:56
(53) Да, да именно так))) Но тут же тоже есть над чем голову поломать, и опыт пригодится - скажешь нет? :))
55 Mikeware
 
28.12.12
13:57
я с несбалансированной иерархией поизвращался, да забил. кубиком быстрее.
Да еще десяток настроек хранить - вообще лепота.
56 Mikeware
 
28.12.12
13:57
(54) опыт - он завсегда полезен. кроме бесполезного...
57 ADirks
 
28.12.12
13:59
(49) Красивая картинка, и названия знакомые :) У меня тут тоже есть одни, сырами торгуют.

(53) Пусть человек на более низком уровне абстракций разберётся. Это полезно.
58 Dolly_EV
 
28.12.12
14:07
|ПО
   |    (Родители.Грп5=$СпрТов.Родитель) ИЛИ
   |    (Родители.Грп4=$СпрТов.Родитель И Родители.Грп5=:ПустойИД) ИЛИ
   |    (Родители.Грп3=$СпрТов.Родитель И Родители.Грп4=:ПустойИД) ИЛИ
   |    (Родители.Грп2=$СпрТов.Родитель И Родители.Грп3=:ПустойИД) ИЛИ
   |    (Родители.Грп1=$СпрТов.Родитель И Родители.Грп2=:ПустойИД)";

не взлетает, вообще все группы пустые :-(
59 Dolly_EV
 
28.12.12
14:09
(57) у меня картинка - "вкуснее" ))) , хотя у @ Mikeware закуска на уровне ))
60 Mikeware
 
28.12.12
14:23
(59) "давайте дружить домами"©
61 ADirks
 
28.12.12
14:32
мда... похоже, это всё принципиально не взлетит.
Надо делать временную табличку с избыточным деревом групп, вида:

Водка
Водка Журавли
Водка Маруся

можно конечно и подапрос построить с юнионами, но это будет кошмарчик
62 Dolly_EV
 
28.12.12
14:35
(61) вот как я этого боялся :-( а как все хорошо начиналось .... видимо или (40) или кубы ...
Может все же как-то проще можно, не?

(60) да легко!))
63 ADirks
 
28.12.12
14:42
во, ужас!

Set NoCount ON

SELECT
   Номенклатура.ID [Товар $Справочник.Номенклатура],
   Номенклатура.ParentID [РодительТов $Справочник.Номенклатура],

   Родители.Грп1 [Грп1 $Справочник.Номенклатура],
   Родители.Грп2 [Грп2 $Справочник.Номенклатура],
   Родители.Грп3 [Грп3 $Справочник.Номенклатура],
   Родители.Грп4 [Грп4 $Справочник.Номенклатура],
   Родители.Грп5 [Грп5 $Справочник.Номенклатура],
   Родители.Грп6 [Грп6 $Справочник.Номенклатура],
   Родители.Грп7 [Грп7 $Справочник.Номенклатура],
   Родители.Грп8 [Грп8 $Справочник.Номенклатура],
   Родители.Грп9 [Грп9 $Справочник.Номенклатура],
   Родители.Грп10 [Грп10 $Справочник.Номенклатура],
   Родители.Родитель [Родитель $Справочник.Номенклатура]

FROM

   спрНоменклатура Номенклатура

   LEFT JOIN (
       
       SELECT
           Coalesce(null, null, null, null, null, null, null, null, null, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, null Грп2, null Грп3, null Грп4, null Грп5, null Грп6, null Грп7, null Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, null, null, null, null, null, null, null, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, null Грп3, null Грп4, null Грп5, null Грп6, null Грп7, null Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, null, null, null, null, null, null, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, null Грп4, null Грп5, null Грп6, null Грп7, null Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, null, null, null, null, null, Грп4.ID, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, Грп4.ID Грп4, null Грп5, null Грп6, null Грп7, null Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп4 ON
               Грп4.ParentID = Грп3.ID
               AND Грп4.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, null, null, null, null, Грп5.ID, Грп4.ID, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, Грп4.ID Грп4, Грп5.ID Грп5, null Грп6, null Грп7, null Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп4 ON
               Грп4.ParentID = Грп3.ID
               AND Грп4.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп5 ON
               Грп5.ParentID = Грп4.ID
               AND Грп5.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, null, null, null, Грп6.ID, Грп5.ID, Грп4.ID, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, Грп4.ID Грп4, Грп5.ID Грп5, Грп6.ID Грп6, null Грп7, null Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп4 ON
               Грп4.ParentID = Грп3.ID
               AND Грп4.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп5 ON
               Грп5.ParentID = Грп4.ID
               AND Грп5.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп6 ON
               Грп6.ParentID = Грп5.ID
               AND Грп6.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, null, null, Грп7.ID, Грп6.ID, Грп5.ID, Грп4.ID, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, Грп4.ID Грп4, Грп5.ID Грп5, Грп6.ID Грп6, Грп7.ID Грп7, null Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп4 ON
               Грп4.ParentID = Грп3.ID
               AND Грп4.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп5 ON
               Грп5.ParentID = Грп4.ID
               AND Грп5.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп6 ON
               Грп6.ParentID = Грп5.ID
               AND Грп6.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп7 ON
               Грп7.ParentID = Грп6.ID
               AND Грп7.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, null, Грп8.ID, Грп7.ID, Грп6.ID, Грп5.ID, Грп4.ID, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, Грп4.ID Грп4, Грп5.ID Грп5, Грп6.ID Грп6, Грп7.ID Грп7, Грп8.ID Грп8, null Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп4 ON
               Грп4.ParentID = Грп3.ID
               AND Грп4.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп5 ON
               Грп5.ParentID = Грп4.ID
               AND Грп5.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп6 ON
               Грп6.ParentID = Грп5.ID
               AND Грп6.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп7 ON
               Грп7.ParentID = Грп6.ID
               AND Грп7.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп8 ON
               Грп8.ParentID = Грп7.ID
               AND Грп8.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(null, Грп9.ID, Грп8.ID, Грп7.ID, Грп6.ID, Грп5.ID, Грп4.ID, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, Грп4.ID Грп4, Грп5.ID Грп5, Грп6.ID Грп6, Грп7.ID Грп7, Грп8.ID Грп8, Грп9.ID Грп9, null Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп4 ON
               Грп4.ParentID = Грп3.ID
               AND Грп4.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп5 ON
               Грп5.ParentID = Грп4.ID
               AND Грп5.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп6 ON
               Грп6.ParentID = Грп5.ID
               AND Грп6.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп7 ON
               Грп7.ParentID = Грп6.ID
               AND Грп7.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп8 ON
               Грп8.ParentID = Грп7.ID
               AND Грп8.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп9 ON
               Грп9.ParentID = Грп8.ID
               AND Грп9.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
       UNION ALL

       SELECT
           Coalesce(Грп10.ID, Грп9.ID, Грп8.ID, Грп7.ID, Грп6.ID, Грп5.ID, Грп4.ID, Грп3.ID, Грп2.ID, Грп1.ID, '     0   ') Родитель,
           Грп1.ID Грп1, Грп2.ID Грп2, Грп3.ID Грп3, Грп4.ID Грп4, Грп5.ID Грп5, Грп6.ID Грп6, Грп7.ID Грп7, Грп8.ID Грп8, Грп9.ID Грп9, Грп10.ID Грп10
       FROM
           спрНоменклатура Грп1
           
           LEFT JOIN спрНоменклатура Грп2 ON
               Грп2.ParentID = Грп1.ID
               AND Грп2.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп3 ON
               Грп3.ParentID = Грп2.ID
               AND Грп3.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп4 ON
               Грп4.ParentID = Грп3.ID
               AND Грп4.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп5 ON
               Грп5.ParentID = Грп4.ID
               AND Грп5.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп6 ON
               Грп6.ParentID = Грп5.ID
               AND Грп6.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп7 ON
               Грп7.ParentID = Грп6.ID
               AND Грп7.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп8 ON
               Грп8.ParentID = Грп7.ID
               AND Грп8.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп9 ON
               Грп9.ParentID = Грп8.ID
               AND Грп9.IsFolder = 1
           LEFT JOIN спрНоменклатура Грп10 ON
               Грп10.ParentID = Грп9.ID
               AND Грп10.IsFolder = 1
       WHERE
           Грп1.IsFolder = 1
           AND Грп1.ParentID = '     0   '
   ) Родители ON
       Родители.Родитель = Номенклатура.ParentID

WHERE
   Номенклатура.IsFolder != 1
64 ADirks
 
28.12.12
14:42
///******************************** ADirks 28.12.2012 ************
Функция тзп_Родители()
   сзРод = СоздатьОбъект("СписокЗначений");
   сзРод.ДобавитьЗначение("$ПустойИД");
   сзГрп = СоздатьОбъект("СписокЗначений");
   Для н = 1 По Метаданные.Справочник("Номенклатура").КоличествоУровней Цикл
       сзРод.ВставитьЗначение(1, "Грп"+н+".ID");
       сзГрп.ДобавитьЗначение("Грп"+н+".ID Грп"+н);
   КонецЦикла;

   
   ТекстЗапроса = ""; зпт = "";
   сзДжойн = СоздатьОбъект("СписокЗначений");
   Для н = 1 По Метаданные.Справочник("Номенклатура").КоличествоУровней Цикл
       сзРод = СоздатьОбъект("СписокЗначений");
       сзРод.ДобавитьЗначение("$ПустойИД");
       сзГрп = СоздатьОбъект("СписокЗначений");
       Для н1 = 1 По Метаданные.Справочник("Номенклатура").КоличествоУровней Цикл
           стрГрп = "null";
           Если н1 <= н Тогда
               стрГрп = "Грп"+н1+".ID";
           КонецЕсли;
           сзРод.ВставитьЗначение(1, стрГрп);
           сзГрп.ДобавитьЗначение(стрГрп+" Грп"+н1);
       КонецЦикла;
       
       
       Если н > 1 Тогда
           сзДжойн.ДобавитьЗначение("
           |            LEFT JOIN спрНоменклатура Грп"+н+" ON
           |                Грп"+н+".ParentID = Грп"+(н-1)+".ID
           |                AND Грп"+н+".IsFolder = 1");
       КонецЕсли;

       ТекстЗапроса = ТекстЗапроса + зпт + "
       |        SELECT
       |            Coalesce("+СписокВСтроку(сзРод, ", ")+") Родитель,
       |            "+СписокВСтроку(сзГрп, ", ")+"
       |        FROM
       |            спрНоменклатура Грп1
       |            "+СписокВСтроку(сзДжойн, "")+"
       |        WHERE
       |            Грп1.IsFolder = 1
       |            AND Грп1.ParentID = $ПустойИД";
       зпт = "
       |        UNION ALL
       |";
   КонецЦикла;
   
   Возврат ТекстЗапроса;
КонецФункции
///******************************** ADirks 28.12.2012 ************

//*******************************************
Процедура Сформировать()
   сзРод = СоздатьОбъект("СписокЗначений");
   сзДжойн = СоздатьОбъект("СписокЗначений");
   нУровней = Метаданные.Справочник("Номенклатура").КоличествоУровней;
   Для н = 1 По нУровней Цикл
       сзРод.ДобавитьЗначение("Родители.Грп"+н+" [Грп"+н+" $Справочник.Номенклатура]");
       //Если н = нУровней Тогда
       //    сзДжойн.ВставитьЗначение(1, "Родители.Грп"+н+" = Номенклатура.ParentID");
       //Иначе
       //    сзДжойн.ВставитьЗначение(1, "(Родители.Грп"+н+" = Номенклатура.ParentID AND Родители.Грп"+(н+1)+" Is Null)");
       //КонецЕсли;
   КонецЦикла;
   сзДжойн.ВставитьЗначение(1, "Родители.Родитель = Номенклатура.ParentID");
   
   
   т = "Set NoCount ON
   |
   |SELECT
   |    Номенклатура.ID [Товар $Справочник.Номенклатура],
   |    Номенклатура.ParentID [РодительТов $Справочник.Номенклатура],
   |
   |    "+СписокВСтроку(сзРод, ",
   |    ")+",
   |    Родители.Родитель [Родитель $Справочник.Номенклатура]
   |
   |FROM
   //|    (
   //|    ...
   //|    ) Остатки
   //|    LEFT JOIN спрНоменклатура Номенклатура ON Номенклатура.ID = Остатки.Номенклатура
   |
   |    спрНоменклатура Номенклатура
   |
   |    LEFT JOIN (
   |        "+тзп_Родители()+"
   |    ) Родители ON
   |        "+СписокВСтроку(сзДжойн, "
   |    OR ")+"
   |
   |WHERE
   |    Номенклатура.IsFolder != 1
   //|    and Номенклатура.Descr = 'PROLINE'
   |";
   
   оЗапрос = СоздатьОбъект("ТОтчет.Запрос");
   оЗапрос.ПоказатьТекстЗапроса(т);
   
   тз = ЗапросСКЛ.ВыполнитьИнструкцию(т);
   РедакторТЗ(тз);
КонецПроцедуры
65 Dolly_EV
 
28.12.12
14:47
(63),(64) ипаааатьколотить!!! :-(((
66 ADirks
 
28.12.12
14:48
план запроса - ваще улёт :))
ржем тут с товарищем
67 Dolly_EV
 
28.12.12
14:56
СписокВСтроку дай еще
68 Dolly_EV
 
28.12.12
15:02
А, не надо, он у мну глСписокВСтроку()
69 antoneus
 
28.12.12
15:45
а ещё можно лепить по колонке на каждый склад
70 Dolly_EV
 
09.01.13
12:52
У меня кстати, запросом - так и не взлетело :-(
вот такой запрос получился:
|ВЫБРАТЬ
|    Родители.Грп1 [Грп1 $Справочник.Номенклатура],
|    Родители.Грп2 [Грп2 $Справочник.Номенклатура],
|    Родители.Грп3 [Грп3 $Справочник.Номенклатура],
|    Родители.Грп4 [Грп4 $Справочник.Номенклатура],
|    Родители.Грп5 [Грп5 $Справочник.Номенклатура],
|    Родители.Грп6 [Грп6 $Справочник.Номенклатура]
|--    ,Родители.Родитель [Родитель $Справочник.Номенклатура]
|    ,РегПарт.Товар КАК [Товар $Справочник.Номенклатура]
|    ,РегПарт.Склад КАК [Склад $Справочник.МестаХранения]
|    ,РегПарт.КоличествоОстаток КАК ОстКол
|    ,РегПарт.СуммаОстаток+РегПарт.НДСОстаток КАК ОстСумма
|    ,(РегПарт.СуммаОстаток+РегПарт.НДСОстаток)/РегПарт.КоличествоОстаток КАК [Цена $Число.15.2]
|ИЗ
|    $РегистрОстатки.ПартииТоваров(:лДатаОст~,
|                                (Фирма В (ВЫБРАТЬ val ИЗ #глУсловие1) И Товар В (ВЫБРАТЬ val ИЗ #глУсловие2) И 3=3 И 4=4),
|                                (Товар,Склад),
|                                (Количество,Сумма,НДС)) КАК РегПарт
|ЛЕВОЕ СОЕДИНЕНИЕ
|    Справочник.Номенклатура КАК СпрТов $nolock
|ПО
|    $СпрТов.ТекущийЭлемент=РегПарт.Товар
|ЛЕВОЕ СОЕДИНЕНИЕ (
|    
|        SELECT
|            Coalesce(0, 0, 0, 0, 0, $Грп1.ТекущийЭлемент, :ПустойИД) КАК Родитель,
|            $Грп1.ТекущийЭлемент Грп1, 0 Грп2, 0 Грп3, 0 Грп4, 0 Грп5, 0 Грп6
|        FROM
|            Справочник.Номенклатура КАК Грп1 $nolock
|        WHERE
|            $Грп1.ЭтоГруппа = 1
|            AND $Грп1.Родитель = :ПустойИД
|        UNION ALL
|
|        SELECT
|            Coalesce(0, 0, 0, 0, $Грп2.ТекущийЭлемент, $Грп1.ТекущийЭлемент, :ПустойИД) КАК Родитель,
|            $Грп1.ТекущийЭлемент Грп1, $Грп2.ТекущийЭлемент Грп2, 0 Грп3, 0 Грп4, 0 Грп5, 0 Грп6
|        FROM
|            Справочник.Номенклатура КАК Грп1 $nolock
|            LEFT JOIN Справочник.Номенклатура КАК Грп2 $nolock ON
|        $Грп2.Родитель = $Грп1.ТекущийЭлемент
|        AND $Грп2.ЭтоГруппа = 1
|        WHERE
|            $Грп1.ЭтоГруппа = 1
|            AND $Грп1.Родитель = :ПустойИД
|        UNION ALL
|
|        SELECT
|            Coalesce(0, 0, 0, $Грп3.ТекущийЭлемент, $Грп2.ТекущийЭлемент, $Грп1.ТекущийЭлемент, :ПустойИД) КАК Родитель,
|            $Грп1.ТекущийЭлемент Грп1, $Грп2.ТекущийЭлемент Грп2, $Грп3.ТекущийЭлемент Грп3, 0 Грп4, 0 Грп5, 0 Грп6
|        FROM
|            Справочник.Номенклатура КАК Грп1 $nolock
|            LEFT JOIN Справочник.Номенклатура КАК Грп2 $nolock ON
|        $Грп2.Родитель = $Грп1.ТекущийЭлемент
|        AND $Грп2.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп3 $nolock ON
|        $Грп3.Родитель = $Грп2.ТекущийЭлемент
|        AND $Грп3.ЭтоГруппа = 1
|        WHERE
|            $Грп1.ЭтоГруппа = 1
|            AND $Грп1.Родитель = :ПустойИД
|        UNION ALL
|
|        SELECT
|            Coalesce(0, 0, $Грп4.ТекущийЭлемент, $Грп3.ТекущийЭлемент, $Грп2.ТекущийЭлемент, $Грп1.ТекущийЭлемент, :ПустойИД) КАК Родитель,
|            $Грп1.ТекущийЭлемент Грп1, $Грп2.ТекущийЭлемент Грп2, $Грп3.ТекущийЭлемент Грп3, $Грп4.ТекущийЭлемент Грп4, 0 Грп5, 0 Грп6
|        FROM
|            Справочник.Номенклатура КАК Грп1 $nolock
|            LEFT JOIN Справочник.Номенклатура КАК Грп2 $nolock ON
|        $Грп2.Родитель = $Грп1.ТекущийЭлемент
|        AND $Грп2.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп3 $nolock ON
|        $Грп3.Родитель = $Грп2.ТекущийЭлемент
|        AND $Грп3.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп4 $nolock ON
|        $Грп4.Родитель = $Грп3.ТекущийЭлемент
|        AND $Грп4.ЭтоГруппа = 1
|        WHERE
|            $Грп1.ЭтоГруппа = 1
|            AND $Грп1.Родитель = :ПустойИД
|        UNION ALL
|
|        SELECT
|            Coalesce(0, $Грп5.ТекущийЭлемент, $Грп4.ТекущийЭлемент, $Грп3.ТекущийЭлемент, $Грп2.ТекущийЭлемент, $Грп1.ТекущийЭлемент, :ПустойИД) КАК Родитель,
|            $Грп1.ТекущийЭлемент Грп1, $Грп2.ТекущийЭлемент Грп2, $Грп3.ТекущийЭлемент Грп3, $Грп4.ТекущийЭлемент Грп4, $Грп5.ТекущийЭлемент Грп5, 0 Грп6
|        FROM
|            Справочник.Номенклатура КАК Грп1 $nolock
|            LEFT JOIN Справочник.Номенклатура КАК Грп2 $nolock ON
|        $Грп2.Родитель = $Грп1.ТекущийЭлемент
|        AND $Грп2.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп3 $nolock ON
|        $Грп3.Родитель = $Грп2.ТекущийЭлемент
|        AND $Грп3.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп4 $nolock ON
|        $Грп4.Родитель = $Грп3.ТекущийЭлемент
|        AND $Грп4.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп5 $nolock ON
|        $Грп5.Родитель = $Грп4.ТекущийЭлемент
|        AND $Грп5.ЭтоГруппа = 1
|        WHERE
|            $Грп1.ЭтоГруппа = 1
|            AND $Грп1.Родитель = :ПустойИД
|        UNION ALL
|
|        SELECT
|            Coalesce($Грп6.ТекущийЭлемент, $Грп5.ТекущийЭлемент, $Грп4.ТекущийЭлемент, $Грп3.ТекущийЭлемент, $Грп2.ТекущийЭлемент, $Грп1.ТекущийЭлемент, :ПустойИД) КАК Родитель,
|            $Грп1.ТекущийЭлемент Грп1, $Грп2.ТекущийЭлемент Грп2, $Грп3.ТекущийЭлемент Грп3, $Грп4.ТекущийЭлемент Грп4, $Грп5.ТекущийЭлемент Грп5, $Грп6.ТекущийЭлемент Грп6
|        FROM
|            Справочник.Номенклатура КАК Грп1 $nolock
|            LEFT JOIN Справочник.Номенклатура КАК Грп2 $nolock ON
|        $Грп2.Родитель = $Грп1.ТекущийЭлемент
|        AND $Грп2.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп3 $nolock ON
|        $Грп3.Родитель = $Грп2.ТекущийЭлемент
|        AND $Грп3.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп4 $nolock ON
|        $Грп4.Родитель = $Грп3.ТекущийЭлемент
|        AND $Грп4.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп5 $nolock ON
|        $Грп5.Родитель = $Грп4.ТекущийЭлемент
|        AND $Грп5.ЭтоГруппа = 1
|LEFT JOIN Справочник.Номенклатура КАК Грп6 $nolock ON
|        $Грп6.Родитель = $Грп5.ТекущийЭлемент
|        AND $Грп6.ЭтоГруппа = 1
|        WHERE
|            $Грп1.ЭтоГруппа = 1
|            AND $Грп1.Родитель = :ПустойИД) КАК Родители
|ПО
|    Родители.Родитель = $СпрТов.Родитель
|ГДЕ РегПарт.КоличествоОстаток<>0

И в результате таже проблема - у несбалансированного элемента - в родителях пусто :-((

Сделал в итоге прилеплением колонок по количеству складов, вот код ежли кому пригодится:

//** Группировка/транспонирование по складам
//Колонки тзОст: "Товар,"Склад" СтрКолонкиСумм

тзОст.ДобавитьИндекс("индУникСклад","Склад",1);
лСписСкладов=СоздатьОбъект("СписокЗначений");
   тзОст.Выгрузить(лСписСкладов,"индУникСклад","Склад",1);
   тзОст.ДобавитьИндекс("индТоварСклад","*Товар,*Склад",1);
//Сообщить("Уник: "+тзОст.ИндексУникален("индТоварСклад"));
лКолСкладов=лСписСкладов.РазмерСписка();
лКолКолонок=лСписКолонок.РазмерСписка();
тзОстГрупп=тзОст.Копия(0,1);
тзОстГрупп.УдалитьКолонку("Склад");
тзОстГрупп.Группировать("индТовар:*Товар",СтрСумм,0);
   
СтрСуммТЗ="";
Для сч=1 По лКолСкладов Цикл
   Для счк=1 По лКолКолонок Цикл
       имяКолонки=""+сч+лСписКолонок.ПолучитьЗначение(счк);
           тзОстГрупп.НоваяКолонка(имяКолонки);
           СтрСуммТЗ=СтрСуммТЗ+имяКолонки+",";
       КонецЦикла;
   КонецЦикла;
   СтрСуммТЗ=Лев(СтрСуммТЗ,СтрДлина(СтрСуммТЗ)-1);
   
   сзПоиск=СоздатьОбъект("СписокЗначений");
   тзОстГрупп.ВыбратьСтроки();
   Пока тзОстГрупп.ПолучитьСтроку() = 1 Цикл
       сзПоиск.Установить("Товар",тзОстГрупп.Товар);
       Для сч=1 По лКолСкладов Цикл
           имяСклада=лСписСкладов.ПолучитьЗначение(сч);
           сзПоиск.Установить("Склад",имяСклада);
           Для счк=1 По лКолКолонок Цикл
               имяКолонки=лСписКолонок.ПолучитьЗначение(счк);
               Если тзОст.НайтиСтроку("индТоварСклад",сзПоиск,0,1)=0 Тогда
                   знчПоиск=0;
               Иначе
                   знчПоиск=тзОст.ПолучитьЗначение(,имяКолонки);
               КонецЕсли;
               тзОстГрупп.УстановитьЗначение(,""+сч+имяКолонки,знчПоиск);
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
   
   тзОст=""; //освобождаем память
   тзОстГрупп.УдалитьИндекс("индТовар");
   СтрСуммТЗ=СтрСумм+","+СтрСуммТЗ;
   тзОстГрупп.Группировать("индТовар:*&Товар",СтрСуммТЗ,0);

Далее - вывод в mxl рекурсией...
71 Dolly_EV
 
09.01.13
13:13
О! Автор запроса пришел))
72 Ёпрст
 
09.01.13
13:16
для скульлайта, Орефков слепил расширенный аналог coalesce.. и приводил пример получения иерархии справочника с его помощью.

Хотя, в ИТЗ и так всё можно слепить (если выборка не большая)
73 Dolly_EV
 
09.01.13
13:20
(72) "(если выборка не большая)" - в том и дело... для текущей ИБ манипуляции с заполнением/группировкой ИТЗ при максимуме складов/товаров отожрали 300 Мб, но если вс е умножить хотя бы на 5 - все рухнет
74 Dolly_EV
 
09.01.13
13:21
"и приводил пример получения иерархии справочника с его помощью" - можно носом ткнуть? на 1cpp в ветке по скулайту?
75 Ёпрст
 
09.01.13
13:21
coalesceex
76 Ёпрст
 
09.01.13
13:23
такое имя функции, если не ошибаюсь, позволяет  возвращать первое по нумеру не нулевое значение
77 Mikeware
 
09.01.13
13:24
(73) мозготрах!
78 Dolly_EV
 
09.01.13
13:25
(77) :-)