|
|
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
Формируется отчет (Crystal Reports .Net 2005) из ~ 1.5 - 2 млн. записей. На входе передается DataSet, в котором содержатся все данные. При формировании отчета вылзит exeption: Out of memory. Вопрос, собственно, можно ли как-то формировать отчет частями (страницам)? Допустим, возможно ли как-то задать какое-то кол-во страниц, которое необходимо сформировать и получить при этом, сколько записей из DataSet на это потребовалось (чтобы затем выдать следующую порцию данных). Тупо расчитать кол-во записей на страницу не получается: данные (да и сама структура отчета) неоднородна: на одной странице может выводится как 60 записей, так и,например, 5... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2009, 19:24 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
BagNum, А че так много-то? У вас реально есть пользователи, которым не лень хотя бы глазами пробежаться по 1.5-2 млн записей? Если учесть, что 2 млн буковок находится в одном томе БСЭ, то заставить пользователя читать 2 млн записей... Кажись, абсурдно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2009, 05:44 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
У нас есть "замечательные" контролирующие органы (в лице ЦБ, ИФНС,...) которым юр. лица должны вести различного рода отчетность (декларации, балансы,...). В частности, есть такой отчет, называемый "Книга регистрации лицевых счетов". Для обычных ЮЛ это,может быть и не так много, а вот что касается банков... А уж там, поверьте мне, очень много всяких счетов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2009, 18:10 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
BagNumУ нас есть "замечательные" контролирующие органы (в лице ЦБ, ИФНС,...) которым юр. лица должны вести различного рода отчетность (декларации, балансы,...). В частности, есть такой отчет, называемый "Книга регистрации лицевых счетов". Для обычных ЮЛ это,может быть и не так много, а вот что касается банков... А уж там, поверьте мне, очень много всяких счетов... А если дробить по какому-нибудь реквизиту? По дате открытия, например. Или по группе счетов. В этом случае, можно дробить крупно 3, 4 или помельче 301, 302, 401, 407. А DataSet можно попробовать уменьшить не за счет высоты, а за счет ширины. Проверьте, не тянете ли вы лишних полей, не джойните ли таблички локально. И т.п. А то что вы говорите, в кристалах недостижима. На момент формирования отчета движку нужны все данные, иначе нет смысла в его трехпроходности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2009, 05:49 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
Kruchinin PahanBagNumУ нас есть "замечательные" контролирующие органы (в лице ЦБ, ИФНС,...) которым юр. лица должны вести различного рода отчетность (декларации, балансы,...). В частности, есть такой отчет, называемый "Книга регистрации лицевых счетов". Для обычных ЮЛ это,может быть и не так много, а вот что касается банков... А уж там, поверьте мне, очень много всяких счетов... А если дробить по какому-нибудь реквизиту? По дате открытия, например. Или по группе счетов. В этом случае, можно дробить крупно 3, 4 или помельче 301, 302, 401, 407. А DataSet можно попробовать уменьшить не за счет высоты, а за счет ширины. Проверьте, не тянете ли вы лишних полей, не джойните ли таблички локально. И т.п. А то что вы говорите, в кристалах недостижима. На момент формирования отчета движку нужны все данные, иначе нет смысла в его трехпроходности. Возможно дробление по счету 2-го порядка (первые 5 знаков), однако и при таком дроблении, некоторые группы тоже получаются "увесистыми". Локально ничего не связываю - все на сервере. У меня такое подозрение, что кристал делает копию передаваемого мною датасета (ну или какую-то свою внутреннюю копию этих эе данных данных). В результате память "пожирается" в двойном размере. А можно ли как-то в Кристале прекратить формирование отчета? Например, есть счетчик, который считает кол-во сформированных страниц. При достижении определенного кол-ва вызывается данная функция (вот только какая и есть ли вообще?), и формирование отчета прекращается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2009, 08:48 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
Bag_Num А можно ли как-то в Кристале прекратить формирование отчета? Например, есть счетчик, который считает кол-во сформированных страниц. При достижении определенного кол-ва вызывается данная функция (вот только какая и есть ли вообще?), и формирование отчета прекращается... Счетчик страниц это уже поздно. К этому моменту все данные уже получены, отсортированы, размечены на группы и т.д. Более того, уже сделан предварительный прогон по данным, который рассчитал высоты отдельных секций. Большинство формул к моменту разметки страниц уже посчитано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2009, 09:48 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
Для монстрообразных отчётов можно попробовать list&label. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2009, 21:21 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
или использовать FastReport.. в демках есть пример построения отчёта Matrix->Stress-Test (1000*1000) а это 1 000 000 записей ;) отчёт был построен за 32422 мс... разница между кристалом ощутимая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2009, 09:17 |
|
||
|
Большие отчеты
|
|||
|---|---|---|---|
|
#18+
Рискуя навлечь на себя гнев модератора всё же дополню... Буквально вчера один из крупных клиентов звонил. Один из тройки крупнейших розничных банков. У них там некая проблема была при печати документа о миллионе листов! Т.е. формировался отчёт нормально, но буфер печати переполнялся. Т.е. речь уже даже не о миллионе записей. Так что сразу надо будет посмотреть - будут ли ПЕЧАТАТЬСЯ сформированные отчёты! PS: проблема решилась оптимизацией картинок в отчёте. Клиент использует FastReport 3. В FastReport 4 эта проблема решена на уровне ядра... PPS: Да, кристал делает полную локальную копию датасета. Причём даже на этапе рисования отчёта... Т.е. в кристале реально надо будет строить по какому-то признаку (ID - ну бери не первые 5, а перве 6 знаков), а потом "дёргать" следующий отчёт на построение... dron-sили использовать FastReport.. в демках есть пример построения отчёта Matrix->Stress-Test (1000*1000) а это 1 000 000 записей ;) отчёт был построен за 32422 мс... разница между кристалом ощутимая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2009, 16:50 |
|
||
|
|

start [/forum/topic.php?fid=31&msg=36028167&tid=1536140]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 510ms |

| 0 / 0 |
