Merge big reports

Stimulsoft Reports.JS discussion
Mateus Garrido Kern
Posts: 45
Joined: Wed Sep 04, 2019 5:19 pm
Location: Curitiba/PR (Brazil)

Merge big reports

Post by Mateus Garrido Kern »

Hello,

I need to create a report that can merge with more than one report, but when one of them has a lot of data, the report is blank.

I went to your publishing page and generated the following project:
Plataform: JavaScript | Type: Project | Framework: Angular | Version: 10 | Load Report From: File | What to do with Report: Show | Display the Viewer in Full Browser Window: true
Plataform: JavaScript | Type: Project | Framework: Angular | Version: 10 | Load Report From: File | What to do with Report: Show | Display the Viewer in Full Browser Window: true
Screenshot_2.png (15.38 KiB) Viewed 1605 times
Register Data from Code: JSON | Include Localization: en
Register Data from Code: JSON | Include Localization: en
Screenshot_3.png (11.89 KiB) Viewed 1605 times
which resulted in the following code for the app.component.ts:

Code: Select all

import { Component } from '@angular/core';
import { ViewEncapsulation } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';

declare var Stimulsoft: any;

@Component({
	selector: 'app-root',
	template: `<div>
					<h2>Stimulsoft Reports.JS - Report.mrt - Viewer</h2>
					<div id="viewerContent"></div>
				</div>`,
	encapsulation: ViewEncapsulation.None
})

export class AppComponent {
	options: any = new Stimulsoft.Viewer.StiViewerOptions();
	viewer: any = new Stimulsoft.Viewer.StiViewer(this.options, 'StiViewer', false);

	ngOnInit() {
		Stimulsoft.Base.Localization.StiLocalization.setLocalizationFile("localization/en.xml", true);

		var report = Stimulsoft.Report.StiReport.createNewReport();
		report.loadFile("reports/Report.mrt");

		report.dictionary.databases.clear();

		var dsBalancete = new Stimulsoft.System.Data.DataSet();
		dsBalancete.readJsonFile("data/Balancete.json");
		report.regData("Balancete", null, dsBalancete);

		this.options.appearance.fullScreenMode = true;
		this.options.toolbar.displayMode = Stimulsoft.Viewer.StiToolbarDisplayMode.Separated;
		
		this.viewer.report = report;
		this.viewer.renderHtml("viewerContent");
	}

	constructor(private http: HttpClientModule) {

	}
}
But as I need to merge several reports, I changed it to the following structure:

Code: Select all

import { Component } from '@angular/core';
import { ViewEncapsulation } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';

declare var Stimulsoft: any;

@Component({
	selector: 'app-root',
	template: `<div>
					<h2>Stimulsoft Reports.JS - Balancete.mrt - Viewer</h2>
					<div id="viewerContent"></div>
				</div>`,
	encapsulation: ViewEncapsulation.None
})

export class AppComponent {
	options: any = new Stimulsoft.Viewer.StiViewerOptions();
	viewer: any = new Stimulsoft.Viewer.StiViewer(this.options, 'StiViewer', false);

	ngOnInit() {
		const informacoesRelatorio = /*JSON HERE!!!!!*/[];

		let relatorios: any[] = []
		Stimulsoft.Base.Localization.StiLocalization.setLocalizationFile("localization/en.xml", true)
	
		informacoesRelatorio.forEach(informacaoRelatorio => {
		  const relatorio = Stimulsoft.Report.StiReport.createNewReport()
		  relatorio.loadFile('reports/' + informacaoRelatorio.nomeRelatorio + '.mrt')
	
		  relatorio.dictionary.databases.clear()
	
		  var dataBaseRelatorio = new Stimulsoft.System.Data.DataSet()
		  dataBaseRelatorio.readJson(informacaoRelatorio.json)
		  relatorio.regData(informacaoRelatorio.dataBaseRelatorio, null, dataBaseRelatorio)
		  relatorios.push(relatorio)
		});
	
		var reportMerge = new Stimulsoft.Report.StiReport()
		reportMerge.reportUnit = relatorios[0].reportUnit
		reportMerge.renderAsync()
		reportMerge.renderedPages.clear()
	
		relatorios.forEach(relatorio => {
		  relatorio.renderAsync(function () {
			for (var index = 0; index < relatorio.renderedPages.count; ++index) {
				reportMerge.renderedPages.add(relatorio.renderedPages.getByIndex(index))
			}
		  })
		})
	
		this.options.appearance.fullScreenMode = true
		this.options.toolbar.displayMode = Stimulsoft.Viewer.StiToolbarDisplayMode.Separated
		this.options.toolbar.viewMode = Stimulsoft.Viewer.StiWebViewMode.Continuous
		this.options.toolbar.showFullScreenButton = false
		this.options.toolbar.printDestination = Stimulsoft.Viewer.StiPrintDestination.Pdf
	
		this.viewer.report = reportMerge
		this.viewer.renderHtml('viewerContent')
	}

	constructor(private http: HttpClientModule) {

	}
}
As the forum doesn't allow me to create large posts, I separated the JSON into a separate file:
balancete.json
(101.66 KiB) Downloaded 114 times
Here's the report I'm using to print this example:
Balancete.mrt
Balancete Report
(32.63 KiB) Downloaded 111 times
Could you help me to get these pages to print correctly?

Thank you
Mateus Garrido Kern
Email: mateus.kern@digibyte.com.br
Lech Kulikowski
Posts: 6237
Joined: Tue Mar 20, 2018 5:34 am

Re: Merge big reports

Post by Lech Kulikowski »

Hello,

Please check the following code for merging reports:

Code: Select all

var report1 = new Stimulsoft.Report.StiReport();
report1.loadFile("Reports/1.mrt");
var report2 = new Stimulsoft.Report.StiReport();
report2.loadFile("Reports/2.mrt");
var reportMerge = new Stimulsoft.Report.StiReport();
reportMerge.reportUnit = report1.reportUnit;
reportMerge.render();
reportMerge.renderedPages.clear();
report1.renderAsync(function () {
    for (var index = 0; index < report1.renderedPages.count; ++index) {
        reportMerge.renderedPages.add(report1.renderedPages.getByIndex(index));
    }
});
report2.renderAsync(function () {
    for (var index = 0; index < report2.renderedPages.count; ++index) {
        reportMerge.renderedPages.add(report2.renderedPages.getByIndex(index));
    }
});
viewer.report = reportMerge;
viewer.renderHtml("viewerCont");
viewtopic.php?f=27&t=56842

Thank you.
Mateus Garrido Kern
Posts: 45
Joined: Wed Sep 04, 2019 5:19 pm
Location: Curitiba/PR (Brazil)

Re: Merge big reports

Post by Mateus Garrido Kern »

Hello,

Yes, I followed that post, but it's not printing the reports with a lot of data.

Do you have any other tips?
Mateus Garrido Kern
Email: mateus.kern@digibyte.com.br
Mateus Garrido Kern
Posts: 45
Joined: Wed Sep 04, 2019 5:19 pm
Location: Curitiba/PR (Brazil)

Re: Merge big reports

Post by Mateus Garrido Kern »

Is there any way to merge between reports in a way that is not async?
Mateus Garrido Kern
Email: mateus.kern@digibyte.com.br
Lech Kulikowski
Posts: 6237
Joined: Tue Mar 20, 2018 5:34 am

Re: Merge big reports

Post by Lech Kulikowski »

Hello,

Please send us a sample project that reproduces the issue for analysis.

Thank you.
Mateus Garrido Kern
Posts: 45
Joined: Wed Sep 04, 2019 5:19 pm
Location: Curitiba/PR (Brazil)

Re: Merge big reports

Post by Mateus Garrido Kern »

Hello,

Follow the file:
Show-Balancete-Angular10-Pack.rar
Please, run 'npm instal' before 'ng serve'
(1.98 MiB) Downloaded 128 times
Thank you
Mateus Garrido Kern
Email: mateus.kern@digibyte.com.br
Mateus Garrido Kern
Posts: 45
Joined: Wed Sep 04, 2019 5:19 pm
Location: Curitiba/PR (Brazil)

Re: Merge big reports

Post by Mateus Garrido Kern »

Follows the project with a smaller JSON than the report can print:
Show-Balancete-Angular10-Pack-SmallerJson.rar
(1.98 MiB) Downloaded 147 times
Thank you
Mateus Garrido Kern
Email: mateus.kern@digibyte.com.br
Lech Kulikowski
Posts: 6237
Joined: Tue Mar 20, 2018 5:34 am

Re: Merge big reports

Post by Lech Kulikowski »

Hello,

We need some additional time to investigate the issue, we will let you know about the result.

Thank you.
Mateus Garrido Kern
Posts: 45
Joined: Wed Sep 04, 2019 5:19 pm
Location: Curitiba/PR (Brazil)

Re: Merge big reports

Post by Mateus Garrido Kern »

Hello,

Any information on this issue?
Mateus Garrido Kern
Email: mateus.kern@digibyte.com.br
Lech Kulikowski
Posts: 6237
Joined: Tue Mar 20, 2018 5:34 am

Re: Merge big reports

Post by Lech Kulikowski »

Hello,

We are still working on the issue, we will let you know about the result.

Thank you.
Post Reply