Имя: Пароль:
1C
 
Сформировать отдельные таблицы по группировкам
,
0 Cumpuciy
 
07.08.14
14:16
Если результат запроса выгрузить в тз:
Группировка1
----Группировка2
-------строка1
-------строка2
Группировка1
----Группировка2
-------строка3
-------строка4
и тд
Никак не могу элегантно разбить результат на таблицы виды
таблица1 :
строка1
строка2
таблица2
строка3
строка4
и тд
В какую сторону копать?
Спасибо.
1 ДенисЧ
 
07.08.14
14:17
Выгружай в дерево.
А потом обходи его и нижние ветки выгружай в таблицы
2 Cumpuciy
 
07.08.14
14:40
(1) а что делать с колонками?
3 ДенисЧ
 
07.08.14
14:42
(2) А что тебе надо с ними сделать?
4 Cumpuciy
 
07.08.14
14:42
(3) Если я выгружу результат так
5 Cumpuciy
 
07.08.14
14:44
(3) Дерево =  Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
то я получаю на выходе
дерево со строками
Группировка1
----Группировка2
Группировка1
----Группировка2
без строк.
6 ДенисЧ
 
07.08.14
14:45
(5) Я не знаю, что ты там и как выгружаешь, но у меня дерево выгружается прекрасно, со всей нужной информацией.
7 NikVars
 
07.08.14
14:46
(0) Ты криво объяснил.
Таблица1 = Группировка1 или Таблица1 = Группировка2?
8 Cumpuciy
 
07.08.14
14:52
(6) (7)
текст построителя
ВЫБРАТЬ
*                    
ИЗ Документ.РеализацияТоваровУслуг.Товары
Итоги По Склад, СтавкаНдс
в настройках построителя измерения строки - Склад, СтавкаНдс
на выходе мне надо разбить результат на таблицы, в каждой таблице данные по группировке Склад, СтавкаНДС.
т.е. если в результате 3 склада и 1 ставка, то 3 таблицы, если 3 склада и 2 ставки, то 6 таблиц.
9 NikVars
 
07.08.14
14:58
(8) Сделай запрос вывода без итоговых группировок.
Выгружай результат запроса в одну таблицу. Сворачивай там так, как ты хочешь.
Далее воюй циклами.
10 an-korot
 
07.08.14
15:05
я фигею %))) ты сам себе такую задачу придумал?
11 Cumpuciy
 
07.08.14
15:14
(9) так уже пытался сделать
текст запроса построителя и поля группировок каждый раз могут быть разными, колонки тоже. все зависит от выбранного типа документа.
с циклами я уже взорвал весь мозг, и подумал что может быть есть более элегантный и быстрый способ.
12 Cumpuciy
 
07.08.14
16:04
Кажется получилось.
Дерево =  Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    Количество = СписокРазделителей.Количество();
    НижнийУровеньГруппировки = СписокРазделителей[Количество-1];
    //обойдем дерево
    ОбойтиУровеньДерева(Дерево.Строки,НижнийУровеньГруппировки);    
    СписокТаблиц.Добавить(УИ);


ну и собстна

Процедура ОбойтиУровеньДерева(Строки,НижнийУровеньГруппировки)
     Для каждого Строка из Строки Цикл
         ОбработкаПрерыванияПользователя();
         Если Строка.Родитель = Неопределено тогда
             Если УИ <> Неопределено тогда
                 СписокТаблиц.Добавить(УИ);
             КонецЕсли;
             //тогда верхний уровень, пропускаем
             ОбойтиУровеньДерева(Строка.Строки,НижнийУровеньГруппировки);
         ИначеЕсли Строка.Родитель[НижнийУровеньГруппировки.Значение] = null тогда
             //тогда ешё один уровень, пропускаем
             //Если это нижний уровень группировки то создаем тз
             Если Строка[НижнийУровеньГруппировки.Значение] <> null тогда
                 УИ = Новый УникальныйИдентификатор;
                 СоздатьВременнуюТЗ(УИ);
             КонецЕсли;
             ОбойтиУровеньДерева(Строка.Строки,НижнийУровеньГруппировки);
         Иначе
             ДобавитьВоВременнуюТЗ(УИ,Строка);
             ОбойтиУровеньДерева(Строка.Строки,НижнийУровеньГруппировки);
         КонецЕсли;
     КонецЦикла;
КонецПроцедуры
13 Cumpuciy
 
07.08.14
16:05
(1) спасибо за наводку