Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: вывод ИТЗ с иерархией по Номенклатуре и шахматкой по Складам в mxl

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

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

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

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

(20) ага, вроде так
   Dolly_EV
 
22 - 28.12.12 - 11:29
(21) щас попробую
   Dolly_EV
 
23 - 28.12.12 - 11:29
(21) а в 1SQLite есть?
   ADirks
 
24 - 28.12.12 - 11:30
(23) не знаю, смотри доку
   Dolly_EV
 
25 - 28.12.12 - 12:27
(17) вместо $ПустойИД в  Coalesce() как строкой передать?
'         ' ? где-то там "0" же еще надо?
   ADirks
 
26 - 28.12.12 - 12:32
'     0   '
только зачем? опять парсер не пропускает?
   Dolly_EV
 
27 - 28.12.12 - 12:32
(25) отбой, копипаст подвел)) мне надо писать :ПустойИД, а не $ПустойИД )))
   Dolly_EV
 
28 - 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
   ADirks
 
29 - 28.12.12 - 12:47
Ну нет и нет - нестрашно. Пустое значение это же тоже значение.
   Dolly_EV
 
30 - 28.12.12 - 12:49
(29) "Ну нет и нет - нестрашно. Пустое значение это же тоже значение." ?? это о чем?
   ADirks
 
31 - 28.12.12 - 12:51
это про 

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

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

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

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

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

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

(37) теперь лишнее прихватывается :-((
http://itmages.ru/image/view/822445/f6e40e89
группы в Грп3 - это НЕ родители "Гербовая Особая 0,5" - а просто группы на том же уровне
| ... КАК Родители
    |ПО
    |    Родители.Родитель=$СпрТов.Родитель ИЛИ
    |    Родители.Грп1=$СпрТов.Родитель ИЛИ
    |    Родители.Грп2=$СпрТов.Родитель ИЛИ
    |    Родители.Грп3=$СпрТов.Родитель ИЛИ
    |    Родители.Грп4=$СпрТов.Родитель ИЛИ
    |    Родители.Грп5=$СпрТов.Родитель";
   Dolly_EV
 
42 - 28.12.12 - 13:37
+(41) строку:
|    Родители.Родитель=$СпрТов.Родитель ИЛИ

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

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

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

 
    

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

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

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

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

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

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

(60) да легко!))
   ADirks
 
63 - 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
   ADirks
 
64 - 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'
 
    |";
    
    оЗапрос = СоздатьОбъект("ТОтчет.Запрос");
    оЗапрос.ПоказатьТекстЗапроса(т);
    
    тз = ЗапросСКЛ.ВыполнитьИнструкцию(т);
    РедакторТЗ(тз);
КонецПроцедуры
   Dolly_EV
 
65 - 28.12.12 - 14:47
(63),(64) ипаааатьколотить!!! :-(((
   ADirks
 
66 - 28.12.12 - 14:48
план запроса - ваще улёт :))
ржем тут с товарищем
   Dolly_EV
 
67 - 28.12.12 - 14:56
СписокВСтроку дай еще
   Dolly_EV
 
68 - 28.12.12 - 15:02
А, не надо, он у мну глСписокВСтроку()
   antoneus
 
69 - 28.12.12 - 15:45
а ещё можно лепить по колонке на каждый склад
   Dolly_EV
 
70 - 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 рекурсией...
   Dolly_EV
 
71 - 09.01.13 - 13:13
О! Автор запроса пришел))
   Ёпрст
 
72 - 09.01.13 - 13:16
для скульлайта, Орефков слепил расширенный аналог coalesce.. и приводил пример получения иерархии справочника с его помощью.

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует