News combit Dev Blog

Mehrpassverfahren: Ein Blick in die Zukunft

Veröffentlicht: Montag, 19. Oktober 2020 | 0 Kommentar(e)
 
Für Probleme vom Typ "das geht nicht" ist häufig eine Funktion mit Blick in die Zukunft erforderlich. Dinge wie "drucke diese Gruppe nicht, wenn sie keinen Datensatz xy enthält" oder "drucke einen Verweis auf die Seitenzahl eines Artikels, der erst später gedruckt wird". Vor List & Label 26 gab es dafür keine einfache Lösung und die Magie musste, wenn überhaupt möglich, in der Anwendung angewendet werden. Beginnend mit List & Label 26 werden wir eine neue Funktion einführen, die darauf abzielt, genau solche Herausforderungen zu lösen.

Die Lösung ist ein automatisierter Mehrpassdruck. Wir haben darauf geachtet, die Funktion so flexibel wie möglich zu gestalten. Sie können entscheiden, ob die Durchläufe im Ergebnis angezeigt werden sollen, wodurch ähnliche Funktionen wie beim Ausfertigungsdruck ermöglicht werden. Diesmal jedoch mit voller Flexibilität und nicht auf das bloße Ein- oder Ausblenden von Objekten beschränkt. Sie können auch Durchläufe ausblenden, z.B. alle bis auf den letzten, und mit SetVar() und GetVar() arbeiten, um mit Ihrem zukünftigen Selbst zu sprechen. Klingt verrückt? Tauchen wir hinein.
 

Beispiel: Seitenverweise

Nehmen wir als Beispiel einen Verkaufsbericht, für den wir eine Zusammenfassung für das Management hinzufügen. Der (hypothetische) Bericht besteht aus einem Deckblatt mit der Zusammenfassung und zwei Seiten mit Diagrammen. Die Herausforderung besteht darin, die Seitenzahlen der Diagramme in der Zusammenfassung zu referenzieren. Das Grundlayout sieht folgendermaßen aus:

Objektstruktur

Die Lösung ist jetzt einfach – Sie müssen nur ein SetVar in die Überschrift des jeweiligen Diagramms einfügen, in etwa so:
"Sales by customers"+SetVar("Reference.Chart1", Page$(), false)

SetVar ist eine leistungsstarke Funktion, mit der beliebige Werte für zukünftige Referenzzwecke gespeichert werden können. Der erste Parameter kann beliebig benannt werden. Wenn Sie den dritten Parameter auf "false" setzen, wird sichergestellt, dass tatsächlich nichts gedruckt wird. Im Objekt "Zusammenfassung" können wir dann auf diese Variable wie folgt verweisen:

Mehrpassverfahren

Jetzt müssen wir nur noch die Anzahl der Durchläufe auf 2 setzen. Dies führt dazu, dass SetVar() vor dem tatsächlich sichtbaren GetVar() in Durchgang zwei aufgerufen wird, obwohl GetVar() zuerst gedruckt wird. Auf diese Weise erhalten wir die erforderlichen Seitenverweise:

Diagrammverweis
 

Beispiel: Flexible Kopien

List & Label unterstützt bereits eine ähnliche Funktion: das Drucken von mehreren Ausfertigungen. Wenn Sie die Anzahl der Ausfertigungen z.B. auf zwei setzen, erhalten Sie eine Kopie des Originaldrucks, können aber einem Objekt eine "Anzeigebedingung für den Ausfertigungsdruck" hinzufügen. Das gute am Ausfertigungsdrick ist, dass er nur einen Durchgang benötigt und es trotzdem erlaubt, bestimmte Objekte in der Kopie ein- oder auszublenden. Dies ist jedoch das Einzige, was Sie tun können. Die Kopie ist in jeder anderen Hinsicht identisch. Eine typische Anwendung für den Ausfertigungsdruck ist z.B. das Drucken eines "Kopie"-Wasserzeichens auf eine Rechnung.

Wenn Sie mehr Flexibilität brauchen, ist das Mehrpassverfahren die Lösung. Ursprünglich stammt die Idee für diese Funktion aus unserem Idea Place, unserem Portal für Benutzerinnovation. Lassen Sie uns als Beispiel einen kombinierten Rechnungs- und Lieferscheindruck erstellen. Beide Belege sind sich zwar recht ähnlich, aber benötigen doch etwas andere Informationen. 

Lassen Sie uns für den zweiten Durchgang die Überschrift von "Rechnung" in "Lieferschein" ändern. Es ist ganz einfach:

Cond(PrintPassIndex()==1, "Invoice", "Delivery Note")

Das bedeutet, "wenn wir uns im ersten Durchgang befinden, drucke "Invoice", andernfalls "Delivery Note". Für die Artikeltabelle selbst ist es einfacher, dem Berichtscontainer eine ganz neue Tabelle hinzuzufügen und die Darstellungsbedingungen anzupassen:

Mehrpassverfahren Rechnung

Für dieses Beispiel habe ich einfach die Rechnungstabelle kopiert, aber alle Preise für den Lieferschein entfernt. Hier ist das Ergebnis in einer Seite-an-Seite-Darstellung:

Mehrpassverfahren Side by Side Vergleich

Intern macht diese Funktion vom Kombinationsdruck Gebrauch, der ebenfalls neu ist in List & Label 26. Daher hat sie die gleichen Anforderungen – eine DataProvider-Implementierung, die für .NET, VCL und C++ verfügbar ist.

Ich freue mich sehr darauf zu sehen, wofür diese Funktion sonst noch verwendet wird. Sie ist eine Allzweckantwort für viele Anfragen, die wir in der Vergangenheit erhalten haben.
 

Weitere neue Features in List & Label 26
Was gibt es Neues für .NET?
Verschiedene Projekte in einem Druck kombinieren
Leistungsstarke, wiederverwendbare Unterberichte für Ihre Reports




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


Aktuell gibt es noch keine Kommentare zu diesem Blogbeitrag.

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