Abgelegt am 15.12.2006 um 16:42 unter

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.

Wenn Dir der Artikel gefallen oder geholfen hat, würde mich sehr über einen Kommentar von Dir freuen!
  • Seiten

  • flickr

  • Werbung

  • 19 Comments

    1. Schinnerl :

      Jan 31, 2007 23:32 |

      Sehr hilfreich… hab was gelernt!

    2. Marvin :

      Feb 5, 2007 11:15 |

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

    3. Winni :

      May 11, 2007 11:23 |

      Super Hinweis, der viele Stunden … erspart! Danke.

    4. jens :

      May 31, 2007 17:30 |

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

      Grüße aus Freiburg,
      Jens

    5. samuel :

      Feb 3, 2009 10:59 |

      Super Tipp, hat auf Anhieb geklappt

      vielen Dank

      Grüsse aus der Schweiz

    6. top :

      Feb 4, 2009 9:08 |

      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.

    7. Steffi :

      Feb 12, 2009 10:19 |

      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

    8. Martin :

      Feb 12, 2009 10:30 |

      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

    9. Nick :

      Apr 20, 2009 16:25 |

      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

    10. Martin :

      Apr 20, 2009 19:03 |

      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};

    11. erik :

      May 27, 2009 15:41 |

      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

    12. Christian :

      May 29, 2009 11:59 |

      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 :)

    13. erik :

      Jun 19, 2009 7:56 |

      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

    14. erik :

      Jun 19, 2009 10:04 |

      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

    15. daniel :

      Jun 22, 2009 13:17 |

      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

    16. Jens :

      Jul 15, 2009 12:43 |

      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

    17. Jens :

      Jul 15, 2009 12:45 |

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

    18. Max :

      Jul 23, 2009 10:57 |

      Hallo,

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

      Habt ihr eine Lösung?

      Gruß Max

    19. Thom :

      Aug 26, 2009 23:24 |

      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.

    Pings & Trackbacks

    martin-fredrich.de,

    Leave a Reply


    XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

    Get Adobe Flash playerPlugin by wpburn.com wordpress themes