News combit Dev Blog

Verschiedene Projekte in einem Druck kombinieren

Veröffentlicht: Donnerstag, 20. August 2020 | 5 Kommentar(e)
 
Dies war eine weitere FAQ ohne eine wirklich gute Antwort: Wie bekomme ich einen Bericht mit völlig unterschiedlichen Abschnitten wie einem Deckblatt, einem Inhaltsverzeichnis, einigen tabellarischen Berichten, einigen Diagrammen und Bildern, dann einem Textblock und so weiter zusammengestellt? 

Um zu diesem Ergebnis zu gelangen, mussten bisher verschiedene Vorschaudateien zu einer einzigen Vorschau zusammengefasst werden. Dieser Ansatz ist jedoch nicht so flexibel, wie er sein könnte und das Sammeln eines gemeinsamen Inhaltsverzeichnisses war auf diese Weise schlicht unmöglich. List & Label 26 hilft mit einer Funktion, die wir "Kombinationsdruck" getauft haben. Sie erlaubt, beliebige Projekte zu einem Druck zusammenzufassen.

Die Verwendung dieser Funktion ist recht einfach. Sie übergeben die erforderlichen Projektdateien mit Semikolon getrennt an LlPrintWithBoxStart oder – bei Verwendung einer unserer Komponenten – an AutoProjectFile. Dieses Feature erfordert eine Data-Provider-Implementierung als Datenquelle, d.h. es kann aus .NET, VCL oder C++ verwendet werden.

Lassen Sie uns einen kurzen Rundgang machen. Für dieses Beispiel habe ich drei Berichte vorbereitet: ein Deckblatt, ein Dashboard und einen Detailabschnitt. Der Code, um diese drei in einem einzigen Ausdruck zu erhalten, würde einfach lauten:

LL.DataSource = GetMyDataSource();
LL.AutoProjectFile = @"C:\Reports\Cover Sheet.lst;c:\Reports\Dashboard.lst;c:\Reports\Details.lst";
LL.AutoShowSelectFile = false;
LL.Print();

Das war's! Die Zuweisung an AutoProjectFile weist List & Label an, diese drei Berichte hintereinander zu drucken. Das Ergebnis in der Vorschau sieht dann wie erwartet aus:

Kombinationsdruck List & Label

Dieser Ansatz hat enorme Vorteile gegenüber dem Ausdrucken verschiedener Berichte und dem Zusammenfügen der jeweiligen Vorschaudateien, mit denen früher ein ähnliches Ergebnis hätte erzielt werden können:

  • Inkrementelle Anzeige der Vorschau während des Drucks wie bei einem "normalen" Bericht.
  • Unterstützung für den Fortschritt wie ein "normaler" Bericht.
  • Berichtsübergreifende Seitenzahl, einschließlich korrektem TotalPages$-Zähler. Dies war zuvor für kombinierte Berichte nicht ohne weiteres möglich und erforderte einen zeitaufwändigen Ansatz in zwei Durchgängen.
  • Berichtsübergreifendes Inhaltsverzeichnis und Index: Fügen Sie einfach ein Inhaltsverzeichnis oder ein Indexprojekt zur Liste der zu druckenden Projekte hinzu. Dies war bisher nicht möglich.
Um noch mehr Flexibilität zu bieten, gibt es auch einen Callback/Ereignis ("NextCombinationPrintStep" oder LL_NTFY_COMBINATIONPRINTSTEP), wann immer das nächste Projekt ausgelöst wird. Er liefert Ihnen den Index und den vollständigen Pfad des zu druckenden Projekts. Dies kann dann verwendet werden, um Optionen anzupassen, zusätzliche Daten hinzuzufügen usw. – je nach Bedarf.


Weitere neue Features in List & Label 26:
Leistungsstarke, wiederverwendbare Unterberichte für Ihre Reports
Neue Drag & Drop Features für die Tabelle




Autor: Jochen Bartlau
Entwicklungsleiter List & Label

Jochen Bartlau leitet als Geschäftsführer die Softwareentwicklung bei combit. Microsoft .NET und Agiles Projektmanagement sind zwei seiner Steckenpferde. Der technikbegeisterte Physiker verbringt seine Freizeit am liebsten mit seiner Familie.


  


Kommentare


Jürgen Steinblock
Hier der Link zum Eintrag im Forum.

https://forum.combit.net/t/support-project-aggregation-for-master-mode/6548
28.08.2020 14:02:37

combit - Jochen Bartlau
Der Mastermode wird genauso gehandhabt wie der "normale" Druck - ein Projekt wird nach dem anderen abgearbeitet. Die Logik in dem Fall wäre also, dass erst das Rechnungs-, dann das Datenblattprojekt mit allen Datensätzen gedruckt würde, also Ihre Variante 1. Ich verstehe, dass in diesem Falle die andere Variante auch sinnvoll sein könnte, das wäre aber etwas komplexer umzusetzen. Sie können gerne einen entsprechenden Wunsch in unserem Idea Place unter https://forum.combit.net eintragen, machbar wäre es vermutlich schon.
26.08.2020 12:14:24

Jürgen Steinblock
Klingt sehr vielversprechend. Wie würde das Feature denn in Verbindung mit dem Master Mode funktionieren?

LL.DataSource = GetMyDataSource();
LL.AutoProjectFile = @"rechnung.lst;datenblatt.lst";
LL.AutoShowSelectFile = false;
LL.Print();

Wenn ich dann 3 Datensätze im Mastermode übergebe, würde dann

Rechnung 1
Rechnung 2
Rechnung 3
Datenblatt 1
Datenblatt 2
Datenblatt 3

gedruckt, oder

Rechnung 1
Datenblatt 1
Rechnung 2
Datenblatt 2
Rechnung 3
Datenblatt 3

Die letztere Variante wäre optimal.
26.08.2020 11:25:50

combit - Jochen Bartlau
Solange sie die Repository-IDs der einzelnen Projekte kennen sollte das problemlos funktionieren. Intern geht unsere File-Klasse auf identische Weise mit "echten" Dateien und streambasierten Repository-Inhalten um, so dass der Code dahinter keinen Unterschied zwischen den beiden Modi macht.
20.08.2020 11:38:50

Marco Müller
Funktioniert das auch mit dem Repository?
20.08.2020 11:27:14


Ergänzen Sie hier Ihren Kommentar
 
 
 
 
 
+49 (0) 7531 90 60 10