Имя: Пароль:
1C
1С v8
ДеревоЗначений с выводом в макет
,
0 Popkorm
 
20.08.18
14:46
Приветствую вас.
Вроде как обычно в рекурсии делаю,но не работает,где я ошибься.

Функция ВывестиДеревеЗначений(мСтрокиДерева,Макет,ТабДок,Уровень)
    
    ОбластьСтроки = Макет.ПолучитьОбласть("Строка1");
    Для Каждого СтрокаНоменклатуры Из мСтрокиДерева.Строки Цикл
            
            ОбластьСтроки.Параметры.Номенклатура       = СтрокаНоменклатуры.Номенклатура;
            ОбластьСтроки.Параметры.КоличествоУпаковок = СтрокаНоменклатуры.КоличествоУпаковок;
        
        ТабДок.Вывести(ОбластьСтроки, Уровень);
        ВывестиДеревеЗначений(СтрокаНоменклатуры,Макет,табДок , СтрокаНоменклатуры.Уровень()+1);
        
    КонецЦикла;
1 Popkorm
 
20.08.18
14:49
Вот на форме результат

https://clip2net.com/s/3WahDrQ

в отчете группируется только одна

https://clip2net.com/s/3WahSGy
2 Deon
 
20.08.18
15:21
(1) А зачем ты Уровень параметром передаешь? Используй его только в Вывести.
Хотя, суть, по идее, меняться не должна. А ещё перед параметром Уровень я бы "Знач" пихнул, а то хз переопределяется оно при рекурсии или нет
3 Fedor-1971
 
20.08.18
15:24
(0) После вывода шапки
ТабДок.НачатьАвтогруппировкуСтрок()
  ..... твой вывод рекурсией
ТабДок.ЗавершитьАвтогруппировкуСтрок()

Если не поможет, начинай и завершай группировку для каждой ветки первого уровня
4 Fedor-1971
 
20.08.18
15:24
3+ по-моему ещё есть СгруппироватьСтроки
5 Popkorm
 
20.08.18
15:27
(3) Это все делаю
        Если СтрокиДеревоВложение.Количество() Тогда
            ТабДок.НачатьАвтогруппировкуСтрок();
            ВывестиДеревеЗначений(СтрокиДерева,Макет,ТабДок,1,ОбластьСтроки2);
            ТабДок.ЗакончитьАвтогруппировкуСтрок();
        КонецЕсли;    


а что имел виду : "Если не поможет, начинай и завершай группировку для каждой ветки первого уровня"
6 Fedor-1971
 
20.08.18
15:37
(5)

   Для Каждого СтрокаНоменклатуры Из мСтрокиДерева.Строки Цикл
            
            ОбластьСтроки.Параметры.Номенклатура       = СтрокаНоменклатуры.Номенклатура;
            ОбластьСтроки.Параметры.КоличествоУпаковок = СтрокаНоменклатуры.КоличествоУпаковок;
        
        ТабДок.Вывести(ОбластьСтроки, Уровень);
... начатьАвтогруппировку
        ВывестиДеревеЗначений(СтрокаНоменклатуры,Макет,табДок , СтрокаНоменклатуры.Уровень()+1);
.... ЗакончитьАвтогруппировку
        
    КонецЦикла;

Идея, что следующие строки то-же должны иметь группировку
7 Fedor-1971
 
20.08.18
15:42
можешь поиграться таким функционалом:
ТабДок.Область().Сгруппировать() - по сути указываешь, что сию область нужно сгруппировать
8 Popkorm
 
20.08.18
15:44
(6) не сработало,мне кажется с уровнями какая та лажа
9 Fedor-1971
 
20.08.18
16:00
(8)  ВывестиДеревеЗначений(СтрокаНоменклатуры,Макет,табДок ,

Вместо СтрокаНоменклатуры.Уровень()+1);  Уровень+1?
10 Popkorm
 
20.08.18
16:05
(9) да вроде все есть


https://clip2net.com/s/3WaqLHq
11 Popkorm
 
20.08.18
16:14
он вообще не группирует,просто взял в одном цикле прошелся

https://clip2net.com/s/3WarS0m
12 Fedor-1971
 
20.08.18
16:23
(11) попробуй так:
... начатьАвтогруппировку
       ТабДок.Вывести(ОбластьСтроки, Уровень);

т.е. сначала выводим строку основу, потом группируем
и начни уровни с 2 или 3 (шапка, то у тебя уже есть, у неё то же есть уровень
13 Popkorm
 
20.08.18
16:39
14 dezss
 
20.08.18
16:47
а попробуй использовать НачатьГруппуСтрок, а не НачатьАвтогруппировкуСтрок
15 Popkorm
 
20.08.18
16:52
(14) Веселуха,так стал группировать,спасибо,пошел допилю рекурсию
16 dezss
 
20.08.18
17:06
(6) По логике НачатьАвтогруппировкуСтрок пишется только один раз?

(11) Читай СП, если уровень всего 1, то что группировать?

(15) У тебя какая глубина получается, смотрел отладчиком?
Просто надо бы внимательно посмотреть что происходит в твоей рекурсии.
К тому же, тебе не надо самому вычислять уровень, он есть в самой строке дерева, метод Уровень(), т.е. у тебя будет так:
      ТабДок.Вывести(ОбластьСтроки, СтрокаНоменклатуры.Уровень());
17 Fedor-1971
 
20.08.18
17:16
(16) по уму - да, если правильно расставлены уровни, но бывает, и при правильно выданных уровнях, группировка глючит - тогда помогает её вызов несколько раз
18 dezss
 
20.08.18
17:25
(17) ну с табдоками работаю редко, НачатьАвтогруппировкуСтрок как-то даже особо не использовал.

А может в тех случаях бывало такое, что при выводе не указывался уровень, тогда да, глючить может...