Verschiedene Projekte in einem Druck kombinieren

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

Empfohlene Artikel

9 Kommentare zu “Verschiedene Projekte in einem Druck kombinieren”

  1. 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.

    Antworten
  2. 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.

    Antworten
  3. 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.

    Antworten
  4. Hallo,

    Sollte auch ein Aufruf unterschiedlicher LlProject-Typen funktionieren (BRF und LST)?

    => LL.AutoProjectFile = @“Deckblatt.brf;Datenblatt.lst“;

    Danke und Grüße

    Antworten
  5. Der Projekttyp muss leider der gleiche sein, es ist lediglich noch möglich, ein Inhaltsverzeichnis (*.toc) anzugeben. Sie können aber ein Listenprojekt auch ohne Tabelle anlegen und einfach alle Inhalte des Deckblattes hineinkopieren, dann sollte das ohne wesentlichen Komfortverlust möglich sein.

    Antworten
  6. Da müssten sie entweder auf ein Repository umschwenken (wenn die Anforderung „darf nicht im Filesystem liegen“ wichtig ist) oder die Dateien temporär auf die Platte schreiben und deren Pfade übergeben. Eine Übergabe als Stream ist leider nur via Repository möglich.

    Antworten

Schreibe einen Kommentar