Jmix version: 1.4.2
Jmix Studio plugin version: 1.5.3-223
IntelliJ version: IntelliJ IDEA 2022.3.1 (Ultimate Edition)
При выполнении отчета в конце должен был выгрузиться .xslx файл, но возникает ошибка из-за ограничений в размере выгружаемого файла:
io.jmix.reports.exception.ReportingException: An error occurred while saving result report. Template name [Название отчета.xlsx] Report name [Название отчета] Failed to add parts from relationships of / Failed to add parts from relationships of /xl/workbook.xml Problem saving part /xl/worksheets/sheet1.xml Error marshalling JaxbXmlPart /xl/worksheets/sheet1.xml xl/worksheets/sheet1.xml's size exceeds the limit of 4GByte. at io.jmix.reports.runner.impl.ReportRunnerImpl.createReportDocumentInternal(ReportRunnerImpl.java:169) at io.jmix.reports.runner.impl.ReportRunnerImpl.run(ReportRunnerImpl.java:96) at io.jmix.reportsui.runner.impl.UiReportRunnerImpl$2.run(UiReportRunnerImpl.java:188) at io.jmix.reportsui.runner.impl.UiReportRunnerImpl$2.run(UiReportRunnerImpl.java:182) at io.jmix.ui.executor.LocalizedTaskWrapper.run(LocalizedTaskWrapper.java:54) at io.jmix.ui.executor.impl.WebBackgroundWorker$WebTaskExecutor.call(WebBackgroundWorker.java:206) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.jmix.ui.executor.impl.WebBackgroundWorker$WebTaskExecutor.lambda$startExecution$1(WebBackgroundWorker.java:385) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
Какие есть методы изменения ограничений библиотеки?
Пока ищу решение проблемы, можете рассказать подробнее об отчёте? Что это за отчёт (количество полей, примерное количество строк и тд)? Как часто он создаётся? И генерация происходит через API или UI?
Отчетов несколько, но один из отчетов 680 тыс строк, 22 столбца. Отчет запускается ежедневно и генерируем через UI.
Есть еще отчеты, в них ±1 млн строк
При этом бывают отчеты в разы больше, которые успешно выполняются и так же есть отчеты в разы меньше, которые падают с ошибкой. По моему тут больше дело в весе данных
Можно реализовать такой вариант:
В генерируемые отчёты добавить параметры для фильтрации данных, это может быть дата создания данных или диапазон строк выводимых в отчёте. Далее реализовать Job’у которая будет асинхронно выполняться через заданных промежуток времени (Например, ежедневно, каждый час и тд) и генерировать отчёты.
Мы сами рассматривали вариант дробления отчета на множество отчетов поменьше, но заказчиков это не устраивает. Нет вариантов в которых мог бы выгружаться цельный отчет?
Пока не вижу других вариант. Ошибку бросает библиотека Apache Compress, которая используется в POI для формирования отчёта. Можно посмотреть в ту сторону и поискать способы конфигурации библиотеке Apache POI.