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

1С:Предприятие :: 1С:Предприятие 8 общая

ДеревоЗначений с выводом в макет

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки - вот настоящая работа.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует