Чтобы щелчком на разных полях основного списка, в полученном отчёте, открывался соответствующий дета

отредактировано 00:42 Раздел: FastReport 4.0
Здравствуйте!
У меня, скорее всего трудный вопрос, но должен быть способ это сделать.
Нужно выводить отчёт такого вида

. Группа ..... Кол-во ....... Кол-во
................... нарядов ..... нарядов
................... с монтёром .без монтёра
| Группа1 .. | ..... 10 ..... | ...... 4 ...... |
| Группа2 .. | ..... 42 ..... | ...... 29 .... |
| Группа2 .. | ..... 17 ..... | ...... 8 ...... |
и т.д.

потом, при нажатии на любой строке
на втором столбце должен выходить подробный список нарядов для этого столбца,
при щелчке на третьем столбце - для него.

Т.е., если в отчёте нажать на вторую строку 2-ой столбец - должен раскрыться список из 42-х нарядов, под этой строкой, потом при повторном щелчке - скрыться опять.
при щелчке на той же строке 3-ем столбце должен раскрыться список из 29-ти нарядов тоже так же.

Это похоже на опцию drill-down, но там список раскрывается щелчком по строке, а тут надо свой список для своего поля строки, когда на нём щёлкаешь.

Пожалуйста помогите ответить на хоть некоторые из этих вопросов:
1) Это вообще можно сделать?
2) Может именно это не сделаешь, но можно чем-то заменить похожим?
3) Хотя бы примерно где искать ответ?
4) или если кто-то делал подобное, пожалуйста объясните, может и не помните уже точно где что надо делать, но хоть примерно, может всё равно и по примерному описанию разберусь.

Комментарии

  • xlaalaaxlaalaa Минск
    отредактировано 00:42
    Полагаю нужно как то ухитриться в обработчике OnPreviewClick вызвать метод Report.Preview.RefreshReport; Но по чему то методы объекта TfrxCustomPreview не выведены в FR-скрипт. Можно попытаться вызвать RefreshReport через паскаль.

    Еще в демке есть пример обработчика OnPreviewClick.

  • отредактировано 00:42
    Спасибо за ответ.
    xlaalaa написал: »
    Полагаю нужно как то ухитриться в обработчике OnPreviewClick вызвать метод Report.Preview.RefreshReport; Но по чему то методы объекта TfrxCustomPreview не выведены в FR-скрипт. Можно попытаться вызвать RefreshReport через паскаль.

    Еще в демке есть пример обработчика OnPreviewClick.

    да, наверно не выйдет вызвать перерисовку отчёта из того обработчика, как вы и написали. Или, как вы написали можно попробовать перехватить управление сразу перед перерисовкой отчёта, но если бы и получилось, не представляю что могу сделать дальше.
    Всё-таки или это не сделаешь, или уж совсем слишком сложно, я немного только знаком с Delphi, и Fast-Report поддерживает, как понял, минимально необходимый набор возможностей Delphi, и не думается, чтобы получилось этим путём.

    я пошёл другим.
    Т.к. всего групп в отчёте планируется не много - всего 13, может будет 15, то сперва не делаю группировку, а
    просто делаю столько простых запросов, сколько групп и данные о каждой вывожу в обычном отдельном бэнде MasterData (MasterData1 - одна группа, MasterData2 - другая) - группа здесь - не группировка в отчёте, а Группа1, Группа2 - как в моём примере выше.
    потом, на место полей с количеством ставлю вызов суботчётов и там тоже будет суботчётов по два на каждой строке (группе), т.е. 26 суботчётов. И для каждого - свой запрос, берущий детальные данные по конкретной группе для своего поля (т.е. как у меня в примере, запрос выводит кол-во нарядов с монтёром для Группы2 - и только это и для второго поля в своём суботчёте будет выводиться кол-во нарядов без монтёра для Группы2, для других групп - свои суботчёты и запросы).
    А в суботчётах делаю уже группировку с drill-down.
    Сперва выводятся одни группы в виде строк, у каждой строки - два поля можно щёлкнуть. Каждое поле привязано к отдельному суботчёту, в этом поле выводится заголовок группы, которой можно сделать drill-down, т.о. этот drill-down получается отдельно для каждой строки,
    а иначе, когда пытался делать тоже суботчётами, но двумя (а не 26-ю) (т.к. два поля в строке, но каждый суботчёт - для всех строк, то раскрывались сразу все группы при щелчке на любой), видимо таким способом отчёт считал все эти группы за одну и переубедить его никак мне не удалось).
    Такой способ, громоздкий, но ничего не поделаешь.
    Хотя если кто-то захочет поспорить, что ничего не поделаешь, то буду рад, вдруг он предложит способ лучше.
  • отредактировано 00:42
    Удалось оптимизировать немного - для каждой MasterData не отдельный запрос, а один запрос для всех, и так же для всех суботчётов один запрос, только параметры подставляю, пришлось задание новых параметров писать в коде перед выводом очередной MasterDatы.
  • отредактировано 00:42
    serge написал: »
    Удалось оптимизировать немного - для каждой MasterData не отдельный запрос, а один запрос для всех, и так же для всех суботчётов один запрос, только параметры подставляю, пришлось задание новых параметров писать в коде перед выводом очередной MasterDatы.
    Serge, а вы можете поделиться как вы это сделали? У меня стоит похожая задача. Благодарю
  • отредактировано 00:42
    Лучше по клику выводить отдельный отчёт, расшифровывающий наряды

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

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