НЕ модальные окна и прочие приключения
Раздел: Разработки Fast Reports
Дано: простой отчет по одной таблице с 2 группами. Таблица представляет собой RXMemoryTable, то есть используется просто массив значений в памяти, который не имеет ни lookup, ни calculated полей, для исключения тормозов по повторным вычислениям. Спецокраска мемо полей отсутствует. Скриптов нет.
Проблемы:
- Медленное разворачивание групп. Данная проблема более менее решилась установкой значения у GrupHeader ShiftEngine = seDontShift. ПРи значении по умолчанию - seTree - безбожные тормоза. Что это за опция и в принципе есть ли какие то секретики ускорения разворачивания групп?
- Отчет строится и выводится корректно ровно до момента установки свойства modal = false, при чем не важно, используется ли объект preview на форме или стандартная форма fastreporta. Отображается подвал с пустыми итогами(нули) и все. Причем, если сделать preparereport, то отчет все же покажется, но при клике по группе снова пропадут все бэнды и будет пустой подвал отчета. Собственно как правильно сделать немодальное окно, если это возможно?
Комментарии
С модальным окном разобрался. Почему то в режиме НЕ модального окна отчет закрывает таблицу, что при использовании MemoryTable означает потерю данных(при выставленном у TfrxDBDataSet значении CloseDataSource = false). Ну... ладно. Кстати говоря группировка значительно сильнее тормозит при отладки из IDE, при работе скомпилированного приложения все быстрее.
Я от одного не могу понять - для чего перечитывать и пересчитывать все агрегатные поля группировок ядром отчета. Почему бы не строить дерево объектов с вычисленными значениями и выводить(скрывать) по необходимости. Я хз как ещё объяснить то, что отчет на 2000 строк и при 2 группах может по 5 секунд разворачивать группировку. Есть такой стиль проектирования - MVC, если данные не изменились, для чего контроллер их читает и считает?
Я понимаю, что есть события и скрипты и все такое прочее, но это все легко учесть. Нет изменения содержимого - достаем подсчитанное значение, есть изменение - считаем. Ради интереса из IDE поставил точку остановки на калькулируемых полях. Как итог - перечитывание данных из датасета с пересчетом полей при каждом клике по группе... Это очень сильно привязывает отчет к датасету, который мы, возможно, хотим закрыть после вывода отчета, или вообще уничтожить, без закрытия самого отчета. Вроде опция удобная по идее, но очень топорная по реализации.
DrillDown полностью перестраивает отчёт