Blafasel bloggt

Wo die Macht geistlos ist, ist der Geist machtlos

Tipps, Tricks und Kniffe für Crystal Reports

Wer schon einmal einen Bericht mit Crystal Reports erstellt hat, weiß wie mächtig und wie beliebig nervig der Umgang mit diesem Werkzeug ist. Wie jeder andere Formulargenerator hat auch Crystal seine Macken, Stärken und Schwächen.

Ich werde hier in loser Reihenfolge Beispiele und Lösungen vorstellen, die mir bei meiner Arbeit mit Crystal Reports geholfen haben, bzw. für dessen Lösung ich lange suchen musste.

Variablen Formularübergreifend behandeln
Hier habe ich ganz schön lange gesucht, bis ich die Lösung gefunden habe. Das Problem war, dass ich zwei Summen, aus zwei verschiedenen Unterberichten im Hauptformular weiterverarbeiten wollte. Aber wie an die Felder kommen? Die Lösung ist dafür ganz einfach: Shared Variables!

Um mit Shared Variables arbeiten zu können, muss als erstes im Berichtskopf eine Formel hinterlegt werden, in der die Variablen initialisiert werden:

SHARED STRINGVAR Summe; //Die Variable muss zuerst deklariert werden.
""; // Als Rückgabewert der Formel kommt ein leeres Textfeld hin.

Dann kann ich in jeder anderen Formel mit dieser Variablen arbeiten. Allerdings muss sie jedes Mal am Anfang der Formel deklariert werden:

SHARED STRINGVAR Summe; //Deklaration
Summe := {TABLE.FIELD1}; //Erst jetzt kann ich damit arbeiten...

Um dann den Wert der Variable auszugeben:

SHARED STRINGVAR Summe;
Summe;

Dann kann man problemlos diese Werte in Formeln oder im Bericht nutzen.

Mehrere Record Werte in einer Zeile anzeigen

Mehrere Datensätze in einem Bericht auszugeben ist mit Hilfe der Gruppiermöglichkeit ja kein Problem. Nur was mache ich, wenn die Ergebnisse nicht untereinander, sondern nebeneinander ausgegeben werden sollen.

Lösung 1 (Quick ‚n Dirty): Man fügt eine Kreuztabelle ein, macht alle Felder bis auf die Spaltenbezeichnungen unsichtbar, und gut. Aber eben eine nicht schöne Lösung.

Lösung 2 (Elegant): Man fügt eine Gruppe in sein Formular, besser Unterformular ein. Dann muss man die Werte sammeln und im Gruppenfuß ausgeben:

In den Gruppenkopf ein unterdrücktes Formelfeld zur (Re-)Initialisierung anlegen:

Shared StringVar Array x;
Redim x[5];
Shared NumberVar i := 1

In den Detailbereich wird dann folgende Formel eingefügt, während der Detailbereich aber unterdrückt wird:

Shared StringVar Array x;
Shared NumberVar i;
x[i] := {Feld};
i := i+1

Und zum Schluss erfolgt die Ausgabe in einem Feld über eine Formel im Gruppenfuß:

Shared StringVar Array x;
Shared NumberVar i;
Local NumberVar j;
Local NumberVar n;
Local StringVar str := "";
For j := 1 to i - 1 Do
(
str := str + x[j];
For n:= 1 to 4-Len(x[j]) Do
str := str + " "
);
str

Bestimmte Bereiche oder Felder Aus- und Einblenden

Bestimmte Bereiche / Felder sollen nur auf bestimmten Seiten angezeigt werden?

Kein Problem!

Zum Beispiel soll die Seitenzahl in einem Formular nur auf der zweiten Seite erscheinen.
Das Feld oder die Formel mit der Seitenzahl in den Bericht einfügen und im Formatierdialog unterdrücken. Neben der Checkbox befindet sich die Schaltfläche für den Formeleditor. Im Formeleditor dann als Auswahlformel eingeben:

PageNumber = 1;

Das heißt, dass dieses Feld nur dann unterdrückt wird, wenn die Seitenzahl 1 ist, auf allen anderen Seiten wird das Feld eingeblendet.

30 Kommentare

  1. Pingback: Blafasel bloggt » Tipps, Tricks und Kniffe für Crystal Reports

  2. Sehr hilfreich… hab was gelernt!

  3. Danke für die Tipps!
    Wie kann ich denn Bilder (BLOB-Felder) nebeneinander positionieren?

  4. Super Hinweis, der viele Stunden … erspart! Danke.

  5. Hi, danke für den Tipp Werte in einer Zeile.
    Funktioniert super!

    Grüße aus Freiburg,
    Jens

  6. Super Tipp, hat auf Anhieb geklappt

    vielen Dank

    Grüsse aus der Schweiz

  7. Eigentlich ganz gut. Habe aber eine Frage. Wo und wie kann ich eine shared Variable überwachen? Oder wie kann ich einen Array und CR auslesen, den ich von einer global variable an eine shared variable übergeben habe.

  8. Zu Variablen Formularübergreifend behandeln

    Ich habe einen Unterbericht, aus welchem ich den Wert auslesen möchte, um in im Hauptbericht in einer Formel zu verwenden. Wie von dir beschrieben, habe ich die Variable deklariert. Nur für was steht {TABLE.FIELD1}? Dies müsste doch irgendein Bezug zum Unterbericht sein, oder? Mein Unterbericht lautet: srKnz und die darin enthaltene Tabelle: relAcp; auszugebendes Feld: MwstKnz

    Es wäre sehr dringend! Danke schon mal…

    Gruß
    Steffi

  9. Hallo Steffi,

    {TABLE.FIELD1} steht für das Feld in der Tabelle, aus dem Du die Variable füllen möchtest. In Deinem Fall sollte das dann so aussehen:
    {relAcp.MwstKnz};

    HTH
    Martin

  10. Hallo,

    scheitere an diesem Punkt:

    Shared StringVar Array x;
    Shared NumberVar i;
    x[i] := {Feld};
    i := i+1

    CR teilt dann immer brav mit, dass hier eine Zeichenfolge benötigt wird. Mein DB-Feld ist eine Zahl. Wie bekomme ich das nun hin, damit es klappt?

    Gruss
    Nick

  11. Hallo Nick,

    ist das oben genau Deine Formel?
    Insbesondere geht es um diese Zeile:

    x[i] := {Feld};

    Weil hier, wie auch schon bei Steffi, die Spalte Deiner Tabelle stehen müsste.
    Woher soll Crystal denn sonst wissen, was verwendet werden soll?
    Also statt

    x[i] := {Feld};
    x[i] := {DeineTabelle.DeineSpalte};

  12. Servus Martin,
    kurze Frage. Hast Du ein Lösung gefunden Unterbrichte zu unterdrücken so das sie doch ausgeführt werden?
    Ich habe immer wieder das Problem, das ich in einem UB etwas ermittle und im Anschluss im HB auswerte. Exportiert man den CR Bericht nach Excel, wird der Berichtsabschnitt in dem der UB positioniert ist, als leer Zeile exportiert. Sehr unschön.
    Ich würde gerne den Berichtsabschnitt unterdrücken und trotzdem soll der UB ausgeführt werden. Analog zu Formeln. Die können unterdrückt werden und werden trotzdem berücksichtigt.

    Danke & Gruß,
    Erik

  13. Hey, super Tipp mit den Records in einer Zeile!
    Hab es mit einer IF Funktion noch erweitert, weil nur bestimmte Records angezeigt werden sollten, die gleichzeitig noch einen bestimmten Eintrag besitzen… vielen Dank!
    Da ich im Textfuß diese Ausgabe benötige ist das eine schöne Lösung, kann man ggf. mit einem Code noch vorgeben, dass er einen Zeilenumbruch machen soll? Danke :)

  14. Hallo noch mal :)

    keiner eine Idee, wie man einen Unterbericht unterdrücken könnte obwohl er ausgeführt wird und Daten in Variablen zur verfügung stellt. Der UB selbst stellt keine Daten da. Lediglich eine Berechnungs – Formel ist die UB enthalten. Selbige ist auch unterdrückt. Eigentlich ein leerer Bericht…

    Wäre super wenn einer zumindest eine Idee hätte was ich noch probieren könnte.

    Danke

  15. habs :)
    war ganz einfach ^^

    Berichtsabschnitt mit dem Hacken leeren Bericht unterdrücken versehen und zusätzlich den UB ebenfalls mit dem selben haken versehen.

    hatte ich schon mal ausprobiert. Hat aber nie geklappt. Nun auf einmal schon…

    Danke & gruß,
    Erik

  16. Hallo,

    es gibt auch noch eine andere Möglichkeit mehrere Datensätze nebeneinander anzeigen zu lassen:

    Bereichs-Assistent –> Details und dann “Mehrspaltig formatieren”
    Dann öffnet sich das Tab “Layout”. Dort wird bestimmt wie die einzelnen Datensätze aufgelistet werden soll. Jetzt nicht mehr alles untereinander sonder ob zuerst Horizontal, dann vertikal aufgefüllt werden soll oder umgedreht. Bei Breite wird eingestellt wie breit die Spalte sein soll, in der die Datensätze einzeln von links nach rechts angezeigt werden.

    Jetzt habe ich auch noch eine Frage zu Variablen:
    Im HB bei Details habe ich ein UB mit der ich mir einen Wert anzeigen lasse bzw. aus einer anderen Tabelle auslese. Diesen benötige ich direkt in der gleichen Details-Zeile. Sprich im muss damit weiterarbeiten. Momentan sieht es so aus, dass der Wert mir erst in der nächsten Zeile angezeigt wird.
    z.B. wenn Details A und Details B existieren und ich bei Details A den UB habe wird er mir erst bei Details B angezeigt. Ich benötige ihn aber schon bei Details A. Hat jemand eine Lösung?
    Ansonsten habe ich beim Excel-Export zwei Zeilen :(.

    Danke und Gruß,

    Daniel

  17. Hallo,

    vielen Dank für den Tipp mit den Feldern nebeneinander mit Array. Ich habe allerdings beim Export (egal welcher Art) das Problem das ich die Fehlermeldung “A subscript must be between 1 and the size of the array”.

    Hast du eine Idee an was das liegen könnte?

    Gruß Jens

  18. Achja, die Meldung kommt bei der Formel die im Detailbereich steht

  19. Hallo,

    ich möchte mehrere Bilder (BLOB) nebeneinander darstellen, bekomme es aber leider nicht hin.

    Habt ihr eine Lösung?

    Gruß Max

  20. ich möchte in einem Report die Seitenorientierung von Seite 1 (Hochformat) in Seite 2 (Querformat) zu wechseln.
    Hat jemand dazu eine Lösung ?
    Danke.

  21. Hallo Martin,
    ich habe einmal eine Frage zu Subreports und Zwischensummen. Und zwar ist das Ziel, dass ich eine Tabelle mit unterschieldichen Werten und VAT Codes ausgebe und die Summe der Umsatzsteuercodes am Ende des Subreports darstelle und nicht zwischen den Records.
    Bsp:
    ID VAT Code VAT Amount
    123 EC 20
    123 AB 10
    234 CD 5
    234 AB 20
    245 EC 10

    Dies sind meine Werte, die ich im Subreport darstellen möchte. Darunter möchte ich diese noch einmal zusammenfassen und zwar nach VAT Code:

    EC 30
    AB 30
    CD 5

    Wenn ich nach Code gruppiere und die Summen in den Groupfooter berechne, sind zwar die Werte korrekt, ich möchte aber dass diese Werte nicht zwischen den einzelnen Records auftauchen sondern nur am Schluss.

    Ist dieses innerhalb eines Subreports möglich??

    Danke vielmals!

    LG
    Sabrina

  22. Hallo,

    habe ein anderen Problem mit Crystal…
    wir haben einen Brother QL-1060N Etikettendrucker, der von Crystal mit Daten aus unserer ERP-Software versorgt werden soll.

    Soweit so gut, der Druck funktioniert problemlos auf einem Standard-A4-Laserdrucker (Querformat, zentriert, Barcode im richtigen Format, richtige Größe).

    Wenn ich den Etikettendrucker mit Etiketten im Format 62×29 (quer) bestücke (er hat eine Format-Sensor vorm Abschneider eingebaut), dann sieht der Ausdruck aus Crystal so aus, dass der Barcode im Hochformat in der Mitte des Etiketts stark verkleinert aufgedruckt wird.

    Habe die Seiten-Abmessungs-Definitionen im Seite-einrichten-Dialog bereits x-mal angepasst und korrigiert, was jedoch keine Verbesserung des Problems brachte.

    Der Anruf beim Drucker-Hersteller ergab nur den Hinweis, man wisse ja nicht, welche Format-Definitionen Crystal an den Drucker schickt (bei A4 klappt es jedoch einwandfrei) und ich solle mir die Drucker-SDK runterladen und den Druck selber programmieren.

    Da müsste es aber doch auch noch einfacherer Lösungen geben, schließlich ist nicht jeder Verwender von Crystal auch gleichzeitig ein Programmierer…

    LG
    Kevin

  23. Hallo,

    ich möchte gerne eine Kreuztabelle aufbauen in der in den Zeilen die Artikelnummer steht.
    In den Spalten wird die offene Liefermenge in KW angegeben. Bis dahin alles kein Problem!

    Jetzt soll die Tabelle jedoch so erweitert werden, dass in der 1. Spalte die Aufsummierung der Liefereinteilungen mit Rückstand stehen und in den weiteren Spalten dann die Aufsummierung der Liefereinteilungen in KW.

    Wäre super, wenn es hierzu eine Lösung gibt.

    Danke

  24. Super einfache Erklärung zur Verwendung von Shared Variables in Unter- und Hauptberichten! Danke sehr!

  25. Hallo,

    Haben Sie eine Idee wie ich eine Variable aus einem Details Feld in den Kopf bekommen? geht das überhaupt?

    Gruß
    Marco

  26. Hallo,

    ich möchte das Ergebnis einer Summenformel aus einem Unterbericht in den Hauptbericht übertragen und dort für Berechnungen weiter nutzen. Mit folgender Formel funktioniert es leider nicht:

    shared numbervar b:= Sum ({iaspuritem.QUANTITY})

    Kann mir jemand einen Tip geben?

    Vielen Dank!

    Johannes

  27. Hallo Martin,
    Ich mein Subrepots in CRXI mit CRPE32 funktionieren nicht,
    ich die Subrepots loswerfen und in main reports alles platzieren
    wie geht das wenn mein Business Object Auftrag soviele Positionen aus verschieden
    Business Objects wie Kann man mit Parameter Arbeiten?
    Gruss
    Danke im veraus

  28. Hallo Martin,

    ich habe einen neuen Job und damit ein neues Problem. Mein neuer Chef stellte mir vor 4 Tagen Crystal Reports vor. Ich habe über das Wochenende versucht mich einzuarbeiten. Einen Bericht konnte ich schon erstellen. Nun zu meinem Problem:
    Mein Vorgänger hat einen Katalog mit Crystal Reports erstellt. Darin gibt es ein Problem. Es geht um eine Ware die immer gleich aussieht aber sich in manchen Werten verändert. In “Detail “steht die Artikelnummer der Preis und die Größe. Jetzt das Problem. Links neben den Daten in “Detail” ist ein Bild eingefügt welches aber nur einmal erscheinen soll. Im Moment ist es so dass zu jeder Beschreibung das gleiche Bild erscheint. Wie schaffe ich es nur dem ersten Artikel das Bild zuzuweisen. Wie gesagt ich bin ganz frisch in Crystal Reports. Für eine rasche und vor allem verständliche Antwort wäre ich mehr als dankbar.
    Ganz liebe Grüße aus dem Raum Bodensee
    Inge Höweler

  29. Hallo Martin,

    gibt es eine Möglichkeit mit Crystal Reports QR-Codes auf den erstellten Reports auszugeben?

    Vielen Dank für Tips und herzlichen Gruß

    Johannes

  30. Hallo Martin …

    Vielleicht können Sie mir helfen, ein Problem mit Crystal Report zu lösen.

    Habe eine ASP.NET Web-Anwendung und wenn Internet Explorer erzeugen einen Bericht direkt aus Crystal Report, aber das Druckfenster ist leer und reagiert nicht mehr. Das heißt, wenn Sie die Option “Drucken” aus dem Bericht klicken, nicht wird das Popup-Fenster angezeigt, um den Drucker auszuwählen.

    Nur einige Nutzer dieses Problem haben, können alle anderen Benutzer richtig gedruckt.

    Für das, was es wert ist, sind die Entwicklungswerkzeuge:
    - Visual Studio 2010
    - ASP.NET
    - NET Framework V.4
    - Crystal Report v.10
    - V.10 Internet Explorer

    Die Komponente der Client-Computer:
    . Crystal Reports für NET Framework 2.0 (Version: 10.2.0)

    Ich erwarte Ihre Antwort und ich entschuldige mich für die Übersetzung aus dem Deutsch, ich spreche Spanisch ….

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.