Имя: Пароль:
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) ну с табдоками работаю редко, НачатьАвтогруппировкуСтрок как-то даже особо не использовал.

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