Рекурсивные подотчёты?

отредактировано 06:34 Раздел: FastReport 3.0
Возможен ли сабж?
Если нет, то как можно красиво реализовать вывод дерева с неограниченной вложенностью?

Комментарии

  • отредактировано 06:34
    В скриптах можно организовать рекурсию, а значит и в отчёте ;) .
  • LexLex
    отредактировано 06:34
    1. Раскрутить дерево до этого
    на сервере и вернуть его одним набором данных.

    2. Если сможешь вернуть дерево в виде
    Папка null       null
    Папка Папка1 null
    Папка Папка1 null
    Папка Папка1 Папка2
    
    (незная структуры дерева сложно сказать о сложности этой задачи)
    то собирая на лету отчет с GroupHider - ами вывести не сложно.


    Я делал 1 способом т.к. вторым было совсем не реально,
    но помучился изрядно.
  • отредактировано 06:34
    Lex
    1 способ - с неограниченым уровнем вложенности? Думал, но сложно получается... Это надо для любого элемента формировать некий признак, сортировка по которому однозначно расположит его под своим парентом... Ситуация осложняется участием нескольких разных таблиц(сущностей) в отчёте.
    Хотя, несомненно, так можно =)
    2ой - Гмм... А это не то-же самое по сути? Или я что-то не понял?

    -=Den=-
    К сожалению, в скриптах еще не до конца разобрался, так что с трудом представляю как ;)

    А вот положить на бэнд подотчёт = текущему отчёту... Как бы было здорово =) Но в дизайнере не получается ;) Это в принципе нельзя, или можно таки скриптами сделать?
  • LexLex
    отредактировано October 2005
    написал:
    2ой - Гмм... А это не то-же самое по сути? Или я что-то не понял?

    не свосем
    в первом случае возврашается набор данных типа:
    написал:
      Папка 1
      Папка 2
      Папка 3
    т.е. все дерево в одном поле ну и добавляется поле уровеня иерархии чтобы правильно с отсупами визуализировать

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

    написал:
    А вот положить на бэнд подотчёт = текущему отчёту... Как бы было здорово =) Но в дизайнере не получается  Это в принципе нельзя, или можно таки скриптами сделать?
    боюсь что не выдет.
    Дело в том, что отчет (а точнее его бенды) ссылаються на
    некий набор данных(НД) и при построение отчета изменяеться положение курсора указывающего на активную запись этого НД.
    Следовательно если два отчета будут ссылаться на один набор данных и
    при этом будут одновременно строиться (отчет - вложенный очет) то получиться следующая картина:
    Первый отчет берет первую запись из НД,
    Перехоим к вложенному отчету который пробегает по всем записям НД.
    Возвращаемся к первому отчету, который видя что записей
    больше нет (курсор на последней записи) с чуством выполненого долга ;)
    говорит что все готово можешь смотреть.

    Один из вариант создавать на лету для каждого подотчета
    свой набор данных (например TfrxADOQuery) попробуй может что получиться.
    Когда я решал подобную задачу TfrxADOQuery еще небыло поэтому помочь не чем не могу.

    Можно еще попроовать побаловаться с перемешение курсора по набору данных ручками. Но при рекурсии...
  • отредактировано 06:34
    Lex
    Спасибо за подробное обьяснение ;)
    написал:
    Один из вариант создавать на лету для каждого подотчета
    свой набор данных (например TfrxADOQuery) попробуй может что получиться.
    Да, так и моя мысля работала. Query создать динамически уже представляю как, а вот, как бы так выразиться..., создать экземпляр уже существующего подотчёта? (Еще раз извиняюсь, пока со скриптами только разбираюсь, может быть, что путаю) Когда в дизайнере рисуешь подотчёт - это, экземпляр класса "отчёт" с настройками всякими, или child-класс? Экземпляры которого можно создавать.. Иначе придётся в коде прописывать полностью структуру подотчёта, что, уже представляется как можно сделать, но, имхо, неадекватное решение.

    Вопрос уже перешёл в разряд академических, так как решил проблему на SQL уровне. Но, всё жэ, очень интересно =)
  • отредактировано 06:34
    Subreport - это экземпляр класса TfrxSubReport который наследован от TfrxView (т.е. это компонент как и TfrxPictureView).

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.