Wie Reports archivieren

19. Februar 2015 12:18

Hallo Community,

ich suche einen Lösungsansatz zum performanten archivieren von Reportläufen (z.B. Rechnungen). Es gibt ja die Möglichkeit über die Funktion SAVEASPDF aber das kostet doppelt Zeit. 1 x der Gesamtlauf der auf den Drucker geht und dann nochmal je Rechnung SAVEASPDF fürs Archiv. Hat jemand eine Idee, wie man das eleganter bzw. schneller, in einem Aufwasch lösen kann?

Hat man vielleicht irgendwie die Möglichkeit das ganz anders "von außen" zu lösen? Also evtl. lediglich das DataSet mit den zugehörigen Daten und dem zugehörigen Layout zu archivieren? Wenn man sich dann eine archivierte Rechnung erneut aus dem Archiv anschauen/ausdrucken möchte wird aus den gespeicherten Daten z.B. eine PDF erzeugt oder in der Seitenansicht des Reportviewers angezeigt. Ist das zu realisieren?

Oder gibt es, wie zuvor gefragt, vielleicht eine einfachere schnellere Lösung direkt aus NAV heraus? :roll: :?:

Danke im Voraus für Eure Hilfe!

Grüße,
Uwe

Re: Wie Reports archivieren

19. Februar 2015 14:43

Hallo Uwe,

ich sehe zwei Lösungsansätze:

Du erzeugst nur das PDF, archivierst dieses und schickst es dann zum Drucker. Mögliche Lösungen hier und hier.

Die andere Variante druckt den Bericht und archiviert diesen im Anschluss im Hintergrund per Job Queue.

Re: Wie Reports archivieren

19. Februar 2015 15:41

Hallo Carsten,

vielen Dank für Deine schnelle Antwort!
Das hört sich ja schon mal gut an, dass es gleich 2 mögliche Lösungswege gibt.
Bzgl. des C#-Lösungsansatzes, müsste ich ja ne DLL schreiben und diese dann in NAV2015 bzw. in CSIDE - C/AL instantiieren oder nicht?
Dabei stellt sich mir die Frage, hatte diese Problem noch nie jemand bzw. musste noch keine aus der Community etwas in der Art umsetzen? Falls doch wäre ich auch hier für Beispiele dankbar!

Grüße,
Uwe

Re: Wie Reports archivieren

19. Februar 2015 16:10

Hallo Uwe,

nicht ganz. Die verlinkten Komponenten erlauben es, eine PDF-Datei an einen (physikalisachen) Drucker zu schicken, also zu drucken. Im Netz kursieren die wildesten Lösungsansätze dazu, diese hier erscheinen mir die einzig sinnvollen. Spire.PDF hab ich auch schon selbst, zumindest grob, getestet.

Du musst also keine DLL selbst schreiben, sondern diese nur aus C/AL nutzen. Beide Lösungen muss man allerdings kaufen, wobei Spire-PDF für eine begrenzte Anzahl Seiten kostenlos ist.

Re: Wie Reports archivieren

19. Februar 2015 18:08

Achso, ich hatte die Artikel vorhin nur überflogen...

Hhhm, das rückt die Sache wieder in ein schlechteres Licht. Meine Vorgesetzten werden sich sicher nicht darauf einlassen eine Drittanbieter-DLL zu kaufen. Wenn müsste ich eine entsprechende DLL selbst schreiben und diese dann in NAV2015 instantiieren. Hat denn sonst niemand dieses Problem und hat einen Beispiel-Lösungsansatz wie man das ohne Drittanbieter-Tool umsetzen kann?

Danke für Eure Hilfe vorab.

Grüße,
Uwe

Re: Wie Reports archivieren

19. Februar 2015 18:12

WNTS-UK hat geschrieben:Hat denn sonst niemand dieses Problem und hat einen Beispiel-Lösungsansatz wie man das ohne Drittanbieter-Tool umsetzen kann?
Wenn du dir 4 Stunden á 120 EUR Gedanken dazu machst, dann kannst du die DLL besser kaufen...

Aber da wäre ja noch Lösung 2: Erst drucken, dann per Hintergrundjob die Archivierung durchführen (inkl. PDF-Erzeugung usw.).

Re: Wie Reports archivieren

20. Februar 2015 10:25

Moin Carsten,

Wenn du dir 4 Stunden á 120 EUR Gedanken dazu machst, dann kannst du die DLL besser kaufen...


das ist wohl wahr aber kaufen hat auch den Nachteil, dass man auf den Drittanbieter angewiesen ist, da meinen i.d.R. keinen Zugriff auf den Sourcecode hat. Und da wir selbst entwickeln (C/AL) und dieses Drittanbieter-Tool auch mit an unsere Kunden ausliefern müssten (Lizenzfrage), ist das wohl nicht die optimalste Lösung. Also denke ich, entweder selbst bauen oder Lösung 2 in Betracht ziehen, wobei, wenn ich ehrlich bin, ich keinen Schimmer hab wie das in NAV ablaufen soll. Hättest Du dazu vielleicht ein Beispiel?

Herzlichsten Dank auch für Deine bisherige Hilfe!

Gruß,
Uwe

Re: Wie Reports archivieren

20. Februar 2015 11:51

Ungetestet ungefähr so:

Code:
ParameterXML := REPORT.RUNREQUESTPAGE(<Report ID>);
REPORT.PRINT(<Report ID>, ParameterXML);

TempJobQueueEntry.INIT;
TempJobQueueEntry.Status := JobQueueEntry.Status::"On Hold";
TempJobQueueEntry.VALIDATE("Object Type to Run", JobQueueEntry."Object Type to Run"::Report);
TempJobQueueEntry.VALIDATE("Object ID to Run", <Report ID>);
TempJobQueueEntry.INSERT(TRUE);
TempJobQueueEntry.SetReportParameters(ParameterXML);
TempJobQueueEntry."Run in User Session" := TRUE;

CODEUNIT.RUN(CODEUNIT::"Job Queue - Enqueue", JobQueueEntry);


Wenn der Bericht ohne Benutzereingriff gestartet werden soll, musst du ggf. die Parameter vorher (manuell) anreichern. Schau dir am besten mal die Doku zu den neuen Befehlen an.

Ich habs noch einmal etwas angepasst, der Standardcode ist etwas merkwürdig. Du musst eine temporäre Instanz der Job Queue Entry-Tabelle befüllen.
Zuletzt geändert von SilverX am 20. Februar 2015 12:46, insgesamt 1-mal geändert.

Re: Wie Reports archivieren

20. Februar 2015 12:18

Hallo Carsten,

ok, das hilft mir erstmal weiter bzw. wird mich ein wenig beschäftigen. Vor Dienstag komme ich eh nicht dazu aber dann werde ich mich mit Deinen Vorschlägen der Sache annehmen. Ich werde die Ergebnisse dann hier posten bzw. mich ggf. mit weiteren Fragen wieder melden.

Erstmal vielen, vielen Dank für Deine kompetente Hilfe!

Gruß,
Uwe

Re: Wie Reports archivieren

24. Februar 2015 15:19

Hallo an Alle,

ich habe mich nun mit den Vorschlägen von Carsten auseinandergesetzt und es taten sich natürlich weiterführende Probleme auf, zu denen ich auch entsprechende Fragen habe und hoffe ihr könnt mir dabei helfen diese zu beantworten.

Carstens erste Antwort zu dem Ursprungsproblem war:
Du erzeugst nur das PDF, archivierst dieses und schickst es dann zum Drucker. Mögliche Lösungen hier und hier.


Grundsätzlich immer eine PDF erzeugen und diese ggf. an den Drucker zu senden war auch mein erster Gedanke. Aber wie bzw. woran kann ich denn feststellen ob in der Requestpage tatsächlich der Drucker-Button und nicht in dem Button-DropDown-Menü in der Requestpage z.B. PDF oder Excel oder Word... gedrückt wurde? Komme ich irgendwie an den entsprechenden Rückgabewert im "OnPreReport" und kann ich irgendwie, wenn tatsächlich der Druckerbutton gedrückt wurde, das aufpoppen des Druckerdialogs unterdrücken, damit ich z.B. ein Drittanbiertertool, so wie von Carsten vorgeschlagen, anstoßen kann und nachdem das PDF generiert wurde den Druckerdialog manuell aufrufen kann um dann die PDF tatsächlich ausdrucken zu können?

Vielen Dank vorab für Eure Hilfe!

Gruß,
Uwe