+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

Erledigt - Kopie/Mehrfaches Ausdrucken eines "Card" Berichts


(Carsten Geuer) #1

Hallo zusammen,

ich möchte ein Card-Projekt mehrfach ausdrucken.
Es gibt eine Logik, welche (C#) ListLabel.Variables füllt. Anschließend wird ListLabel.Print() aufgerufen. Einen DataContext habe ich hierbei nicht.

Snippet:

[code]string printerName = “My local Printer”;

// Exemplarisch Variablen füllen
ListLabel.Variables[“MyKey”] = “MyValue”;

// Ein MemoryStream, da das Projekt aus der Datenbank kommt
ListLabel.AutoProjectStream = streamProject;

// Report beinhaltet quasi die Metadaten. ListandLabelType ist vom Typ: LlProject
// Hier im Beispiel ist es “LlProject.Card”
ListLabel.AutoProjectType = report.ListandLabelType;

ListLabel.AutoDestination = LlPrintMode.Normal;

for (int i = 0; i < numberOfCopies; i++) {
ListLabel.Print(printerName);
}
[/code]

Ein Listenprojekt kann ich ohne Probleme mehrfach ausdrucken. Jedes Dokument hat den gleichen Inhalt.

Bei der “Card” verhält es sich anders:

  • Das Projekt hat nur eine einzige DIN A4-Seite
  • Die erste Seite ist immer korrekt
  • Die zweite Seite hat keine Werte (Variablen), obwohl laut Debugger im VisualStudio die Werte von ListLabel innerhalb der Schleife immernoch gleich sind. Es äußert sich darin, dass im Bericht bestimmte Konditionen erfüllt sein müssen (z.B. Variable A == 5) ansonsten werden bestimmte Elemente (beispielsweise Bilder) ausgeblendet. ListLabel.Variables[“A”] hat den Wert 5 und wird beim ersten Aufruf von Print() korrekt ausgegeben. Eine Kondition wie “CurrentPage == 1” gibt es im Bericht nicht (wie gesagt, es ist nur eine Seite).

Was ich versucht habe:

  • ListLabel.AutoMasterMode macht mit None, AsFields, AsVariables keinen Unterschied
  • Aufruf wie in KBTD000497 (In C#: ListLabel.Core.LlPrintSetOption(…)) machen keinen Unterschied. Es wird in dem Falle (trotz Copy-Parameter und LL_PRNOPT_COPIES_SUPPORTED und positiver Rückgabewerte) sogar nur ein einziges Dokument ausgedruckt. LlPrintGetOption(LL_PRNOPT_COPIES) lieferte mir die übergebene Anzahl an Kopien korrekt zurück.

Wie kann ich es schaffen, dass bei einem “Card” Projekt der 2. Aufruf der Print()-Funktion das selbe Ergebnis liefert? Bei Listenprojekten funktioniert es ohne Probleme.
Im Handbuch habe ich leider keine detailierten Informationen hierzu gefunden (außer, dass es 3 Projekttypen gibt).

Mit freundlichen Grüßen
Matthias Büge

EDIT (Lösung):
Dem ListLabel.DataSource wurde nur eine Dummy-Liste übergeben. Als ich den DataSource mit den richtigen Daten (in unserem Falle ein DataSet) gefüllt habe, konnte der Bericht korrekt ausgedruckt werden.


(Günther Schwarze) #2

Schau mal im Thread https://support.combit.net/reporting/forum/t11423/erledigt-hinterlegter-briefbogen-pdf-wird-n/ von gestern, vielleicht ist es bei Dir das Gleiche?

G.


(Carsten Geuer) #3

Hallo Günther,

danke für den Tipp. Das hatte ich gelesen aber nicht probiert, weil es um ein Listenprojekt ging. Ich habe soeben das Dokument geöffnet und ausprobiert. Allerdings hat sich nichts geändert. Die erste Seite ist korrekt. Auf den nachfolgenden Seiten fehlen die Werte und Texte wie oben beschrieben.

Hätte mich gefreut, wenn es das gewesen wäre :slight_smile:

Was mich irritiert ist die Tatsache, dass das beim Typ “List” ohne Probleme funktioniert, nur bei “Card” verhält es sich anders. Ich weiß nicht, ob durch den anderen Projekttyp die Variablen intern anders behandelt werden.

In einem anderen Thread stand, dass es Funktionen wie “LlPrintResetProjectState” oder “LlPrintResetObjectState” gibt. Die führen leider auch zu keiner Lösung.

Viele Grüße
Matthias Büge


(Günther Schwarze) #4

Die Frage für mich ist, welche Datenquelle Du da angebunden hast? Auch wenn Du die Variablen selber übergibst muss ja LL irgendeine Datenquelle bekommen. Hier ist ein Beispiel wie das eigentlich gedacht ist:

https://docu.combit.net/net/de/#Print%20Card%20With%20Simple%20Placeholders.html

Das müsstest Du sonst mal bei combit fragen - ein einfacher Workaround könnte sein, die Schleife weiter außen zu machen - also inklusive Erstellung des LL-Objekts und Setzen der Eigenschaften. Wenn es nicht auf das letzte Prozent Performance ankommt könnte das funktionieren.

G.


(Carsten Geuer) #5

Danke für den Hinweis mit der “DataSource”. In meinem Falle wurde eine “Dummy Liste” übergeben. Laut Quellcode-Kommentar gibt es ohne Datasource eine Exception weshalb eine IList mit einem Item übergeben wurde.

Intern werden die Daten zusammengebaut und per Variables übergeben. Ich habe die Daten (das DataSet) einfach mal an den DataSource gehängt und alle 3-Print Ausdrucke haben nun (fast) den selben Inhalt.

Ein paar Variablen (Felder) sind zwar “weg”, aber im Großen kann ich erstmal sagen, dass es Funktioniert. Da muss ich mir den Bericht und die Variablenübergabe nochmal genauer anschauen.

Setzen des ListLabel.DataSource hat grundsätzlich mein Problem gelöst. Ich denke, ich komme hier weiter.

Vielen Dank nochmals :slight_smile:

Viele Grüße
Matthias Büge