Имя: Пароль:
1C
1С v8
Помогите разобраться с рекурсивным выводом группировок
0 palpetrovich
 
25.07.12
12:48
Такой вот код:

Процедура ВыводГруппировки(Выборка)
   
   ТекущаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ТекущаяВыборка.Следующий() Цикл
       
       ИмяОбласти = Выборка.Группировка();
       ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
       ОбластьМакета.Параметры.Заполнить(ТекущаяВыборка);
       ТабДокумент.Вывести(ОбластьМакета);
       
       // разбор полетов:
       ТекЗначение =  ?(ИмяОбласти = "ОБЩИЕ","",ТекущаяВыборка[ИмяОбласти]);
       Сообщить(ИмяОбласти+": "+ТекЗначение+" Количество= "+ТекущаяВыборка.Количество+" Сумма= "+ТекущаяВыборка.Сумма+" Себестоимость= "+ТекущаяВыборка.Себестоимость);
       
       ВыводГруппировки(ТекущаяВыборка);
   КонецЦикла;
   
КонецПроцедуры

Такой вот результат:

ОБЩИЕ:  Количество= 0,4 Сумма= 4 543,33 Себестоимость= 4 046,68
Контрагент: Рестриелт ООО АН Количество= 0,4 Сумма= 4 543,33 Себестоимость= 4 046,68
Документ: Реализация товаров и услуг ЦM000000153 от 14.06.2012 19:00:00 Количество= 0,13 Сумма= 1 476,58 Себестоимость= 1 314,2
Номенклатура: Труба 20х1,2х6000-В-08КП г 10707 Количество= 0,13 Сумма= 1 476,58 Себестоимость= 1 314,2
Партия: тн. Количество= 0,044 Сумма= 499,7655384615 Себестоимость= 450,55
Партия: тн. Количество= 0,086 Сумма= 976,8144615385 Себестоимость= 863,65
Документ: Реализация товаров и услуг ЦM000000153 от 14.06.2012 19:00:00 Количество= 0,1 Сумма= 1 135,83 Себестоимость= 1 012,45
Номенклатура: Труба 25х1,2х6000-В-08КП Г 10707 Т Количество= 0,1 Сумма= 1 135,83 Себестоимость= 1 012,45
Партия: тн. Количество= 0,027 Сумма= 306,6741 Себестоимость= 277,25
Партия: тн. Количество= 0,073 Сумма= 829,1559 Себестоимость= 735,2
Документ: Реализация товаров и услуг ЦM000000153 от 14.06.2012 19:00:00 Количество= 0,17 Сумма= 1 930,92 Себестоимость= 1 720,03
Номенклатура: Труба П 50х1х6000-В-08КП Г 10707 Т Количество= 0,17 Сумма= 1 930,92 Себестоимость= 1 720,03
Партия: тн. Количество= 0,065 Сумма= 738,2929411765 Себестоимость= 665,57
Партия: тн. Количество= 0,105 Сумма= 1 192,6270588235 Себестоимость= 1 054,46

Почему группировка "Документ" выводится постоянно перед новой номенклатурой?
1 Рэйв
 
25.07.12
12:49
нафига тебе тут рекурсия когда у тебя простой одиночный цикл перебора
2 palpetrovich
 
25.07.12
12:50
упс, обнаружил ошибочку  :)
ИмяОбласти = Выборка.Группировка();
3 Йохохо
 
25.07.12
12:52
Обход результата по группам
Третий, и последний способ обхода результата – по группам. Он сходен с иерархическим обходом, но с одним различием: записи с иерархическими итогами при обходе в нем рассматриваются как детальные записи, а не как узловые.
4 palpetrovich
 
25.07.12
12:58
(1) заранее неизвестно число группировок которое нужно пользователю, удобно управлять
(3) не понял, почему "Третий и последний"? ...потому что документ?
5 Лефмихалыч
 
25.07.12
13:06
(0) ты делаешь лишнюю работу - юзай СКД
6 palpetrovich
 
25.07.12
13:15
(5) Юзаю иногда, но  сейчас надо именно так. Кроме того, мне самому интересно
(3) Для прикола убрал "Документ", теперь "постоянно" выводится "Контрагент" ... не пойму в чем прикол
7 palpetrovich
 
25.07.12
16:16
в общем так, может пригодится кому, проблемка была всего-то в вызове Процедуры:
было
   ВыборкаОбщая = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаОбщая.Следующий() Цикл
       ВыводГруппировки(ВыборкаОбщая);
   КонецЦикла;
Надо:    
   ВыводГруппировки(Результат);

Всем спасибо :)