Berichte

Aus Limbas Wiki

Wechseln zu: Navigation, Suche

<-- zurück zu Admin-Dokumentation / <-- zurück zur Hauptseite


Ein LIMBAS Bericht stellt die Daten einer Tabelle oder einer Abfrage im PDF-, ODT- (OpenOffice) oder XML-Format dar. Die Berichtvorlage wird in LIMBAS mit dem Berichteditor entworfen und kann diverse Gestaltungselemente (z.B. Grafiken, Kopf- und Fußzeilen) enthalten.

Berichteditor

Beim Aufruf des Berichteditors erscheint eine nach Tabellen sortierte Auflistung der vorhandenen Berichtvorlagen mit der Möglichkeit weitere Berichte hinzuzufügen.

  • ID: Eindeutige Identifikation der Berichtvorlage. Beim Hinzufügen einer neuen Berichtvorlage wird diese ID von LIMBAS selbst gesetzt.
  • Durch Mausklick auf das Editier-Symbol lässt sich die entsprechende Berichtvorlage bearbeiten.
  • löschen: Durch Mausklick auf das Papierkorb-Symbol wird die entsprechende Berichtvorlage nach Rückfrage gelöscht.
  • Bericht: Name der Berichtvorlage
  • für Tabelle: Tabelle, auf die die Berichtvorlage angewandt werden soll
  • Bericht-Erweiterung: Bietet eine Auswahl an php-Dateien des EXTENSIONS Order. Dieses eigene Skript wird anstelle des IMBAS Berichts ausgeführt. Die komplette Rechtestruktur bleibt erhalten.
  • Ablageordner: Für jeden neuen Bericht wird ein Ordner mit dem Namen des Berichts angelegt. Standardmäßig wird der Bericht in diesem Ordern abgelegt. Alternativ können auch Unterordner dieses Ordner als Ablageort über den Dateimanager hinzugefügt und als Ablageordner definiert werden. Es werden nur Unterordner des übergeordneten Hauptordners des jeweiligen Berichts zur Auswahl angezeigt. Es ist jedoch auch möglich die Ordner -ID direkt einzugeben was es ermöglicht jeden Ordner des Dateisystems auszuwählen. Ist der Ausgewählte Ordner ein Unterordner eines Tabellen-Feldes des Typs "Verknüpfung zu Dateisystem" wird der erstellte Bericht zusätzlich in dieses Feld verknüpft.
  • Ablagename: Vordefinierter Name beim Abspeichern des Berichts. Der Name kann mit Variablen wie die Datensatz-ID ergänzt werden. Z.B. ["Rechnung_$ID"] oder ["Bericht_$ID_".$session[user_id]."_".date()]
  • Standardformat: Aktuell können Berichte als PDF, ODT oder XML generiert werden. Für ODT Berichte wird ein zusätzliches ODT Template benötigt.
  • Open Office Template: Auswahl des ODT Templates aus dem Dateisystem.

Berichtvorlage hinzufügen

  • Name: siehe oben "Bericht"
  • Tabelle: siehe oben "für Tabelle"
  • kopieren: Name einer bereits vorhandenen Berichtvorlage, dessen Berichtelemente in der neuen Berichtvorlage übernommen werden.

Bei Mausklick auf den Button "neuer Bericht" lässt sich die neue Berichtvorlage bearbeiten.

Berichtvorlage bearbeiten

Auf der linken Seite des Berichteditors befindet sich die jeweils aktuelle Ansicht der Berichtvorlage. Eine gerade neu angelegte Berichtvorlage ist hier noch leer.

Auf der rechten Seite des Berichteditors befindet sich die Werkzeugleiste mit folgender Unterteilung:

  • Name der Berichtvorlage und der Tabelle, auf die die Berichtvorlage angewandt werden soll
  • Koordinaten, Breite und Höhe des selektierten Berichtelements
  • Globale Berichteinstellungen:
    • Z-Satz/Größe: Der hier eingestellte Zeichensatz und die hier eingestellte Zeichengröße werden als Voreinstellung für Berichtelemente, die Text beinhalten und dem Bericht neu hinzugefügt werden, verwendet.
    • Seitengröße (mm): Breite/Höhe definieren die Seitengröße des Berichts in Millimeter.
    • Seitenränder (mm): In der Ansicht der Berichtvorlage werden entsprechend den Einstellungen "oben:"/"unten:"/"links:"/"rechts:" Linien für den Seitenrand als Editierhilfe eingeblendet. Für die Generierung des Berichts haben diese keine Bedeutung.
    • name:
    • Proportionen erhalten: Ist diese Eigenschaft gesetzt, so können Höhe und Breite des selektierten Berichtelements nur so geändert werden, dass dabei die Proportionen erhalten bleiben. Ansonsten können Höhe und Breite des selektierten Berichtelements auch unabhängig voneinander geändert werden.
    • Z-Index berücksichtigen: siehe zIndex
    • Z-Index erneuern: siehe zIndex
    • Sortierung: Diese Einstellung legt fest, wie die Seiten des Berichts generiert werden. Dies hat z.B. Auswirkungen darauf, welches Berichtelement bei sich überlappenden Elementen im Vorder- bzw. Hintergrund dargestellt wird.
      • Z-Index: Die Berichtelemente werden in der Reihenfolge ihres zIndex-Wertes auf der Seite platziert. Überlappende Elemente mit höherem zIndex werden somit vor denen mit niedrigerem zIndex dargestellt. Bei identischen Werten ist es dem Zufall überlassen, welches Element im Vorder- bzw Hintergrund gezeigt wird.
      • Y-Pos: Die Reihenfolge, in der die Berichtelemente auf der Seite platziert werden, wird durch die y-Koordinate der Berichtelemente bestimmt. Dabei wird das Element mit der niedrigsten y-Koordinate zuerst platziert. Bei sich überlappenden Berichtelementen wird daher das Element mit höherer y-Koordinate im Vordergrund sein. Bei identischen Werten ist es dem Zufall überlassen, welches Element im Vorder- bzw Hintergrund gezeigt wird.
  • Buttons zum Hinzufügen von Berichtelementen: Wird der Mauszeiger für kurze Zeit auf einem Button belassen, so wird die Funktionalität des Berichtelements eingeblendet.
  • Button "übernehmen" zum Speichern der Berichtvorlage
  • Tabelle mit Auflistung der verwendeten Berichtelementen: Die Tabelle zeigt für jedes in der Berichtvorlage verwendete Berichtelement
    • die Element-Nr.
    • den Typ des Berichtelements
    • einen Hinweis auf den Inhalt des Berichtelements

Hinzufügen eines Berichtelements

Bei Mausklick auf einen Button zum Hinzufügen eines Berichtelements wird ein entsprechendes Element in der Ansicht in der oberen linken Ecke hinzugefügt, und zwar mit den für das jeweilige Element gültigen Default-Eigenschaften. Die Eigenschaften eines Berichtelements sind Typ-abhängig und lassen sich wie unten (Einstellen/Ändern der Eigenschaften eines Berichtelements) beschrieben ändern.

Soll sich ein Element in einer Tabelle befinden, so muss diese zuerst angelegt werden. Vor dem Hinzufügen des inneren Berichtelements muss das entsprechende Tabellenfeld selektiert sein. Das erste innere Berichtelement wird dann in der oberen linken Ecke des Tabellenfeldes platziert, weitere folgen je nach Breite der Tabellenspalte rechts oder unterhalb.

Die folgenden Elemente werden vom LIMBAS Berichteditor zur Platzierung auf einer benutzerdefinierten Berichtvorlage angeboten:

  • Textblock
  • Dateninhalte
Bei Mausklick auf den Button für "Dateninhalte" wird in der Werkzeugleiste unterhalb der Buttons ein Baum der Tabellenfelder eingeblendet. Erst bei Mausklick auf eines dieser Tabellenfelder wird das Berichtelement in der Ansicht der Berichtvorlage hinzugefügt.
  • Graphik
Bei Mausklick auf den Button für "Graphik" wird in der Werkzeugleiste unterhalb der Buttons ein Feld zur Eingabe einer Datei mit Pfad eingeblendet. Ist ein gültige Grafik-Datei eingetragen, so wird diese bei Mausklick auf "übernehmen" in der Ansicht der Berichtvorlage hinzugefügt.
  • Rechteck
  • Tabelle
Die Tabelle ermöglicht die geordnete Platzierung von Berichtelementen "Textblock", "Dateninhalt", "Datum" und/oder "Formel" nebeneinander. Bei der Generierung des Berichts werden momentan nur die Tabellenspalten berücksichtigt, die in der ersten Zeile ein inneres Berichtelement haben. Dabei ist leerer "Textblock" ausreichend.
Ein Tabellenfeld kann mehrere innere Berichtelemente aufnehmen. Ist dies der Fall, werden bei der Generierung des Berichts die Eigenschaften des ersten Berichtelementes (links oben) auch für alle weiteren Elemente in diesem Tabellenfeld verwendet.
  • Datum
  • Seiten-Nr
Bei Berichten für mehrere Datensätze fängt die Seiten-Nr für jeden Datensatz wieder mit "1" an, dann fortlaufend bis zur letzten Seite des Datensatzes.
  • Formel
  • Unterformular

Selektieren eines Berichtelements

Es kann immer nur ein Berichtelement selektiert sein. Dieses erkennt man daran, dass es

  • in der Tabelle mit den aktuell verwendeten Berichtelementen farblich hervorgehoben ist
  • in der Ansicht der Berichtvorlage an der unteren rechten Ecke ein Symbol zum auf/zusammenziehen hat

Das Selektieren eines Berichtelements ist somit möglich durch

  • Mausklick auf den entsprechenden Eintrag in der Tabelle mit den aktuell verwendeten Berichtelementen
  • Mausklick auf das entsprechende Element in der Ansicht der Berichtvorlage

Einstellen/Ändern der Eigenschaften eines Berichtelements

Beim Einstellen/Ändern der Eigenschaften eines Berichtelements ist zu beachten, dass bei der Generierung des Berichts die Elemente auf die folgenden Bereiche der Seite platziert werden:

  • Hintergrund
  • Kopfzeile
  • eigentlicher Inhalt
  • Fußzeile

Dabei kann der Hintergrund den Platz der gesamten Seite nutzen. Kopfzeile, eigentlicher Inhalt und Fußzeile überlappen sich normalerweise nicht (Ausnahme durch Option "Fixiere Position", siehe unten).

Entsprechend den Einstellungen für "Hintergr" und "versteckt" (siehe unten) werden die Berichtselemente des Hintergrunds, der Kopfzeile und der Fußzeile auf allen Seiten, nur auf der ersten Seite, auf allen Folgeseiten, auf allen geraden Seiten oder allen ungeraden Seiten des Berichts eines Datensatzes dargestellt. Die Berichtelemente des eigentlichen Inhalts werden einmalig dargestellt. Sind nach Fertigstellung einer Seite noch weitere Berichtselemente im eigentlichen Inhalt zu platzieren, erfolgt nach der Fußzeile ein Seitenumbruch und eine weitere Seite wird dem Bericht hinzugefügt.


Voraussetzung für das Einstellen/Ändern der Eigenschaften eines Berichtelements ist, dass dieses selektiert ist.

  • Die Position lässt sich per Drag&Drop in der Ansicht der Berichtvorlage oder durch Eingabe der Koordinaten in der Werkzeugleiste ändern. Dabei entspricht X=0, Y=0 der oberen linken Ecke des Berichts. Handelt es sich um ein Berichtelement in einer Tabelle, so kann die Position nur durch Verschieben der ganzen Tabelle bzw. Ändern der Spaltenbreite verändert werden. Die X-/Y-Koordinaten werden für Elemente in einer Tabelle nicht gezeigt.
  • Die Höhe und Breite lässt sich durch auf/zusammenziehen in der Ansicht der Berichtvorlage oder durch Eingabe entsprechender Werte (in Pixel) in der Werkzeugleiste ändern. Bei Berichtelementen mit Text wird die Höhe im generierten Bericht allerdings automatisch dem Text angepasst, so dass bei diesen Elementen der hier dafür eingestellte Wert nur für die Ansicht im Berichteditor verwendet wird. Die Breite einer Tabelle sowie eines Berichtelements in einer Tabelle lässt sich nur über die Breite der zugehörigen Tabellenspalte(n) anpassen. Dazu muss der linke oder rechte Rand eines verwendeten (!) Tabellenfeldes mit der Maus entsprechend verschoben werden.


Beim Selektieren des Berichtelements öffnet sich ein Kontext-Menü, welches die Einstellung weiterer Eigenschaften ermöglicht.

Folgende Menüpunkte/Anzeigen/Einstellmöglichkeiten befinden sich bei allen Berichtelementen im Kontext-Menü:

  • Die Element-Nr. ist eine eindeutige Identifikation (positive ganze Zahl) für das Berichtelement. Beim Hinzufügen eines neuen Berichtelements wird diese nicht änderbare ID von LIMBAS selbst gesetzt.
  • Der zIndex-Wert
    • ist nur bei entsprechender Einstellung für Sortierung von Bedeutung.
    • wird durch die Menüpunkte in den Vordergrund bzw. in den Hintergrund entsprechend verändert.
    • wird bei gesetzter globaler Berichteinstellung Z-Index berücksichtigen beim Selektieren eines Berichtelements auf den in der Berichtvorlage aktuell höchsten Wert gesetzt.
    • wird durch Z-Index erneuern allen Berichtelementen neu zugewiesen, und zwar so dass es keine Lücken bei den zIndex-Werten gibt. Die bisherige Reihenfolge wird beibehalten.
  • Bei kopieren wird das Berichtelement mit den eingestellten Eigenschaften kopiert.
  • Für den Rahmen der Berichtelemente läßt sich neben der Rahmenfarbe, der Art und der Dicke auch einstellen, welche Kanten (links, rechts, oben, unten) gerahmt werden.
  • Transp. ermöglicht das Durchscheinen des Berichtelements im in Prozent eingestellten Grad.
  • Durch entsprechende Einstellung bei Hintergr wird das Berichtelement auf den Seiten-Hintergrund platziert. Es wird dann je nach Einstellung auf allen Seiten, nur auf der ersten Seite, auf allen Folgeseiten, auf allen geraden Seiten oder allen ungeraden Seiten des Berichts eines Datensatzes dargestellt.
  • Umbruch kann je nach Einstellung vor oder nach dem Berichtelement einen Seitenumbruch erzwingen.
  • Relativ legt fest, dass der Abstand des Berichtelements zum unteren Rand des hier referenzierten Elements immer dem Abstand entspricht, wie es in der Ansicht der Berichtvorlage eingestellt ist. Dies kann sinnvoll sein, wenn das referenzierte Berichtelement variablen Text enthält und daher eine variable Höhe hat.
  • Ist bei abhängig ein Berichtelement des Typs "Dateninhalt" referenziert und ist dieses bei der Generierung des Berichts leer, so wird das eigentliche Berichtelement im generierten Bericht nicht hinzugefügt.
  • Das Berichtelement wird je nach Einstellung bei versteckt auf allen Seiten, nur auf der ersten Seite, auf allen Folgeseiten, auf allen geraden Seiten oder allen ungeraden Seiten des Berichts eines Datensatzes dargestellt. Das "Verstecken" eines Berichtelements macht nur Sinn für sich wiederholende Elemente der Kopf-/Fußzeile oder des Hintergrunds.
  • Durch eine der Optionen Kopf oder Fuß wird das Berichtelement zur Kopf- bzw. Fußzeile hinzugefügt und wird nicht als Teil des eigentlichen Inhalts behandelt.
  • Die Option Fixiere Position ist nur sinnvoll für Berichtelemente des eigentlich Inhalts. Bei gesetzter Option werden diese im generierten Bericht an genau der gleichen Position wie in der Berichtvorlage platziert und können den Bereich der Kopf- oder Fußzeile überlappen.
  • Bei löschen wird das Berichtelement ohne weitere Rückfrage gelöscht.

Folgende Menüpunkte/Anzeigen/Einstellmöglichkeiten befinden sich abhängig vom Typ des Berichtelements im Kontext-Menü:

  • Bei Berichtelementen mit Text lässt sich der Font, die Größe, die Darstellung, die Fontfarbe und die Hintergrundfarbe des Textes einstellen. Weiter gibt es eine Einstellung für den Mindest-Abstand vom Rahmen zum Text.
  • Ist die Option Liste beim Berichtelement "Dateninhalt" gesetzt, bewirkt dies
  • bei zugehörigen Tabellenfeldern vom Typ Verknüpfung, dass die Dateninhalte des jeweiligen Tabellenfeldes von allen verknüpften Datensätzen gelistet werden. Bei nicht gesetzter Option wird nur der erste verknüpfte Datensatz im Bericht berücksichtigt.
  • bei allen anderen zugehörigen Tabellenfeld-Typen, dass die Werte aller Datensätze des zugehörigen Tabellenfeldes gelistet werden.
  • Die bei Separator eingetragenen Zeichen haben zwei Verwendungszwecke:
  • Wird (wie oben beschrieben) beim Berichtelement "Dateninhalt" der Inhalt aus mehreren Datensätzen gelistet, werden die eingetragenen Zeichen als Trennzeichen verwendet. Falls es keine Eintragung gibt, wird ein Zeilenumbruch eingefügt.
  • Falls in einem Tabellenfeld mehrere innere Berichtelemente vorhanden sind, werden die eingetragenen Zeichen im generierten Bericht zwischen diesen Elementen als Trennzeichen eingefügt. Falls es keine Eintragung gibt, wird in diesem Fall auch nichts eingefügt.
  • Durch Setzen der HTML-Option wird der Text in den Berichtelementen "Textblock" und "Formel" als HTML interpretiert. Dabei ist zu beachten, dass hierdurch andere Einstellungen aus dem Kontextmenü überschrieben und somit ungültig werden.
  • Wird bei beim Berichtelement "Dateninhalt" das Häkchen für ersetzen gesetzt und sofort danach ein neues "Dateninhalt"-Berichtelement, das mit einem anderen Tabellenfeld verknüpft ist, erstellt, so wird das ursprüngliche Berichtelement gelöscht und dem neuen werden die Eigenschaften des ursprünglichen zugewiesen. Diese Funktionalität kann zusammen mit der Kopier-Funktion das Platzieren mehrerer "Dateninhalt"-Berichtelemente in dem Bericht erleichtern. Das Häkchen wird automatisch nach der folgenden Aktion gelöscht.
  • Die Anzahl der Spalten und Zeilen des Berichtelements "Tabelle" wird durch die Angaben im Kontext-Menü festgelegt.
  • Durch Setzen von colspan bei einem Tabellenfeld kann sich dieses über mehrere Spalten hinweg erstrecken.
  • Bild-Infos zeigen die entsprechenden Informationen einer Graphik-Datei an.
  • proportional für Grafiken aus Dateninhalten
  • Durch Setzen des tagmode für das erste Berichtelement innerhalb eines Tabellenfeldes kann der Text dieses Tabellenfeldes im generierten Bericht über selbst definierte Tags formatiert werden. Ansonsten werden die Eigenschaften vom ersten Berichtelement des Tabellenfeldes für den Text des gesamten Tabellenfeldes verwendet. Die Tags werden in der Datei ./dependent/EXTENSIONS/system/report_tab_tags entsprechend folgendem Beispiel definiert:
  • <exampleTag> mit Schriftart Arial, italic, Textgröße 11, und Textfarbe : $pdf->SetTagStyle("exampleTag","arial","I",11,"0,151,200");
Ein Tag kann dann im Text eines Textblocks, Dateninhalts oder einer Formel auf folgende Weise verwendet werden:
  • Text ohne Tag, <exampleTag>dieser Text wird im generierten Bericht entsprechend der Tag-Definition dargestellt,</exampleTag> Text ohne Tag

Unterberichte

Über den Punkt Untermenü der Toolbox im Berichte-Editor können Unterberichte eingehängt werden. Dazu wählt man die Art des Unterberichts (einbetten oder einhängen) aus und den gewünschten Bericht.

  • Einbetten - versucht den Unterbericht direkt in den Hauptbericht zu integrieren als ob er Teil des Hauptberichts ist. Dabei wird Kopf und Fuß des Hauptbericht beibehalten. Elemente des Unterberichts werden einzeln in den Hauptbericht geschrieben. Es wird nur die Y Position des Elements berücksichtigt. Die X Position ergibt sich durch die Positionierung der Elemente des Unterberichts. Ebenso sind Formatierungen des Elements wie z.B. Rahmen oder Breite und Höhe nur über den Unterbericht selbst möglich.
    Ist ein Unterbericht Teil einer Verknüpfung wird Limbas versuchen diese zu finden, aufzulösen und somit nur die verknüpften Datensätze in den Unterbricht zu schreiben. Um dies zu ermöglichen dürfen in einer Tabelle des Unterberichts die Listenelemente nicht mit dem "Liste" Parameter versehen werden. Bei Unterberichten des Typs "Einhängen" muß der Parameter "Liste" gesetzt werden da ansonsten keine Verknüpfungs-Ergebnisse angezeigt werden. Eigenschaften
    Es können aber auch eigenen Parameter übergeben werden welche die Ergebnisse des Unterberichts erzeugen. get_gresult()
    Soll eine eigene Ergebnismenge für den Unterbericht benutzt werden kann dies durch Übergabe eines Arrays mit den Gewünschten IDs geschehen.
  • Einhängen - erzeugt zuerst einen unabhängigen Bericht welcher dann in den Hauptbericht wie ein Bild eingehängt wird. Dies geschieht mittels fpdi. Formatierung sowie Kopf und Fuß können je nach Größe des Unterberichts variieren. Es wird die X und Y Position sowie die Größe des Elements berücksichtigt. Der Unterbericht wird dementsprechend verkleinert oder vergrößert. Dynamische Filter oder Parameter sind derzeit nicht möglich.


Beispiel Parameter

Parameter

$filter["anzahl"][$gtabid] = "all";
$filter["nolimit"][$gtabid] = 1;
$filter["order"][$gtabid][0] = array($gtabid,12,'DESC');
$gsr[$gtabid][12][0] = 'Meier';

Ergebnismenge

return array(1,2,3,4,5);

Formeln & Funktionen

Berichte können mit eigenen Funktionen oder Berechnungen erweitert werden. Ebenso kann direkt mit Hilfe der fpdf-Funktionen auf den Bericht Einfluss genommen werden. Umgesetzt werden kann dies mit Hilfe des Formel-Elements welches PHP Code enthalten kann. Formel-Elemente können als Einzelelemente oder auch in Tabellen genutzt werden.

Styledefinitionen

  • 0 = font-family;
  • 1 = font-style;
  • 2 = font-variant;
  • 3 = font-size;
  • 4 = font-weight;
  • 5 = word-spacing;
  • 6 = letter-spacing;
  • 7 = text-decoration;
  • 8 = text-transform;
  • 9 = color;
  • 10 = text-shadow;
  • 11 = line-height;
  • 12 = text-align;
  • 13 = (border)
  • 14 = border-style;
  • 15 = border-color;
  • 16 = border-width;
  • 17 = border-left;
  • 18 = border-right;
  • 19 = border-top;
  • 20 = border-bottom;
  • 21 = background-color;
  • 22 = cellpadding;
  • 23 = vertical-align;
  • 24 = opacity;

Zusatz-Style

  • 25 = line-reverse;
  • 26 = prop (proportional);
  • 27 = head;
  • 28 = foot;
  • 29 = hidden;
  • 30 = report_tab_rows;
  • 31 = report_tab_cells;
  • 32 = background;
  • 33 = list;
  • 34 = pagebreak;
  • 35 = lock pagebreak;
  • 36 = relativepos;
  • 37 = colspan;
  • 38 = rowspan;
  • 39 = display if element;
  • 40 = seperator of multible table-row elements;
  • 41 = tagmode;
  • 42 = html;
  • 43 = writing-mode

auf Variablen zugreifen

Auf Inhalte von Elementen im Bericht (auch versteckten) kann über das Formel-Element zugegriffen werden.

Einzelelement:

$glob_el[elid][number]
  • elid: Die eindeutige Element-ID. Ist über das Kontextmenü als erster Punkt "Element" bei klick auf ein Element ersichtlich.
  • number: Die Element-Nummer. Aufsteigende Nummer beginnend mit "0". Falls mehrere Werte vorhanden (Aus Verknüpfung) kann hier die Reihennummer gewählt werden, ansonsten immer "0".

Tabellenelement:

$glob_rowel[elid][$ROWNR] 
  • elid: Die eindeutige Element-ID. Ist über das Kontextmenü als erster Punkt "Element" bei klick auf ein Element ersichtlich.
  • $ROWNR: Die Tabellen-Zeile. Aufsteigende Nummer beginnend mit "0". Es kann direkt die Variable "$ROWNR" genutzt werden um auf Elemente der Gleichen Zeile zuzugreifen.

Elementstyle bearbeiten:

$report['style'][$report['arg_result'][elid]][styleid] = 1; 
  • elid: Die eindeutige Element-ID. Ist über das Kontextmenü als erster Punkt "Element" bei klick auf ein Element ersichtlich.
  • styleid: Die Style-Nummer. Die Nummer des Styles, den man verändern möchte. Siehe oben.

Funktionen

Die Rückgabe von Werten über Formel-Element wird durch "return" oder durch die Variable "$arg_result" definiert. Es können auch eigene Funktionen aufgerufen werden.

Beispiele

Beispiel 1 - freie Inhalte

Example:

Ein Rechnungsbericht hat unter anderem die Elemente (Name, Vorname und Anrede) für die Adresszeile. Im Bericht soll eine spezifische Anrede genutzt werden. Die Elemente haben die folgenden IDs : Name:1; Vorname:2; Anrede:3. Es wird ein neues Formel-Element mit folgendem Inhalt hinzugefügt:

if($glob_el[3][0] == 'Frau'){
   $arg_result = "Sehr geehrte Frau ".$glob_el[2][0];
 }elseif($glob_el[3][0] == 'Herr'){
   $arg_result = "Sehr geehrter Herr ".$glob_el[2][0];
 }else{
   $arg_result = "Sehr geehrte Damen und Herren";
 }

Beispiel 2 - Häckchen einbinden

Example:

Boolean-Felder werden standardmäßig als 1 oder 0 dargestellt. Mit einem Trick können auch Häckchen angezeigt werden.
Dazu muß in den Limbas Zeichensatzeinstellungen ein "Dingbats / Symbol" Font intalliert werden. Dieser Font wird dann als Font für das Booleanfeld ausgewählt. Um das richtige Zeichen für das Häckchen auszuählen muß im Erweiterungsfenster des Kontextmenüs (edit) das Zeichen über eine Variable definiert werden. Für den "Webdings" Zeichensatz ist das "a" für ein Häckchen und "r" für ein X. Für "Zapf Dingbats" ist "3" oder "4" für ein Häckchen und "5" oder "6" für ein X. Es kann jeweils ein Zeichen für ja und nein gesetzt werden.

 $dingbats_char_on = "a";
 $dingbats_char_off = "r";

Beide Variablen können auch in der Berichsterweiterung (ext_report.inc) global gesetzt werden.

 $GLOBALS["dingbats_char_on"] = "4";

Beispiel 3 - Rechnen

Example:

Berechnung eines Wertes über eine eigene Funktion. Es kann das ganze Elemnt-Array "$glob_el" übergeben werden. Die Funktion "getMyExtZF()" kann über die Skript-Erweiterungen hinzugefügt werden.

return getMyExtZF($glob_el);

Die Funktion getMyExtZF summiert dann als Beispiel die Inhalte des Feldes der ID 1:

getMyExtZF($glob_el){
 return array_sum($glob_el[1]);
}

Beispiel 4 - Rechnen in Tabellenzeile

Example:

Berechnung des Bruttowertes von Rechnungspositionen einer Berichts-Tabelle. Es existiert ein Tabellenelement des Nettowertes mit der Element-ID 12 in der gleichen Zeile wie das Formelelement

$arg_result = ($glob_rowel[12][$ROWNR]*1.19);

Beispiel 5 - Summieren in Tabelle

Example:

Berechnung der Summe von Rechnungspositionen einer Berichts-Tabelle.

$arg_result = number_format(array_sum($glob_rowel[12]),'2',',','.')." €";

Beispiel 6 - Tabellenzeile ausblenden

Example:

Tabellen-Zeile bei Bedingung nicht anzeigen:

if($glob_rowel[4][$ROWNR] > 100){
   $arg_result="#HIDEROW";
}

Beispiel 7 - Tabellenzellen formatieren

Example:

Eine Tabellenzelle kann auf zwei Arten formatiert werden. Die einfachste Art ist den Inhalt der Zelle mit eigenen HTML TAGs zu ergänzen die im Vorfeld definiert werden müssen. Das Beispiel verwendet das Formelelement und erweitert den Inhalt der Zelle um ein einschließendes "<com1>" TAG. Für das Zellenelement muß der "tagmode" aktiv sein! Der Typ des Zelleninhalts sollte TEXT und nicht Zahl sein damit die Tags korrekt interpretiert werden können. Insbesondere wenn keine Tags vorhanden sind würde ein trim() langen.

$pdf->SetTagStyle("com1","arial","I",11,"0,151,200");
$pdf->SetTagStyle("bold1","arial","B",11,"0,151,200");
$pdf->SetTagStyle("del1","arial","BI",11,"0,151,200");
 
$arg_result = "hallo <com1>".$glob_rowel[12][$ROWNR]."</com1>, <bold1>this is bold</bold1> ";

Eine weitere Möglichkeit besteht in dem Überschreiben der Style Definition der Zelle. Dies gilt allerdings nur für die gesamte Zelle und nicht für Teile wie im obigen Beispiel. Das Arrayelement [21] bezeichnet im folgenden Beispiel den Style der ID 21 also die Hintergrundfarbe. Dieses Beispiel berechnet zuerst den aktuellen Zeilenindex. Danach wird für jede Spalte (in diesem Fall giebt es 2 Spalten) eine neue intergrundfarbe gesetzt. Zusätzlich wird die aktuelle Zeile geprüft und anhand des Zeilenindex die Farbe ausgewählt.
Der erste Schlüssel des Arrays "$cell_style" ist die Spaltennummer beginnend mit 1. Der zweite Schlüssel des Arrays "$cell_style" ist die Elementnummer inerhalb einer Zelle, also bei einem Element in einer Zelle die [1].

Der dritte Schlüssel des Arrays "$cell_style" ist die Reihennummer berechnet durch "$row = count($cell_value[$bzm3][$bzm4])"

Der vierte Schlüssel des Arrays "$cell_style" ist die Stylenummer. (siehe Styledefinitionen)

$row = count($cell_value[$bzm3][$bzm4]);
for($column=1;$column<=2;$column++){
  if($row == 0 OR $row == 2 OR $row == 4){
    $cell_style[$column][1][$row][21] = 'FFFFD2';
  }elseif($rownr != 0){
    $cell_style[$column][1][$row][21] = 'E1E1F0';
 }

}

Beispiel 8 - abwechselnde Hintergrundfarbe pro Zeile

Example:

In der entsprechenden Zeile muß in eine beliebige Zelle eine Formel hinzugefügt werden welche die Farbe der einzelnen Zellen entsprechend anpasst.

if(($ROWNR-$current_row) % 2 != 0){
for($mE=1; $mE <=$report_tab_cells;$mE++)
$cell_style[$mE][1][$ROWNR-$current_row][21] = 'F3F3F3';
}

Beispiel 9 - Tabelleninhalte filtern und sortieren

Example:

Das Ergebnis einer Tabelle eines Berichts kann zusätzlich gefiltert werden. Dazu wird über das Array "$extensions" zusätzliche Parameter an den SQL Aufruf gegeben. Diese Array wird wird für das erste Element der Zeile einer Tabelle mit den Datenbankeinträgen, also die Zeile die sich als Liste mit den Datenbankinhalten füllt in das Erweiterungstextfeld geschrieben. Das Erweiterungstextfeld ist über das Kontextmenü im Punkt Edit aufrufbar. Das folgende Beispiel sortiert die SQL Abfrage zusätzlich nach Name.

$extension["select"][0] = "ADDRESSES.NAME";
$extension["where"][0] = "ADDRESSES.NAME = 'Hans'";
$extension["where"][1] = "CUSTOMER.NAME = ADDRESSES.NAME";
$extension["from"][0] = "ADDRESSES";
$extension["order"][0] = "ADDRESSES.NAME DESC";

siehe auch Abfrage Erweiterungen

Beispiel 10 - PDF anhängen

Example:

Eine Seite eines weiteres PDF Dokuments an Position X/Y anhängen. Sollen alle Seiten angehängt werden kann als $page 'all' übergeben werden.

append_pdf($pdf,$file='path to file',$page=1,$posx=0,$posy=0);

Beispiel 11 - Bericht anhängen

Example:

Einen weiteren Bericht mit der Bericht-ID 6 anhängen. Kopf und Fuß werden vom ersten Bericht übernommen und in den Folgeberichten ignoriert

append_report(6,$ID);

Beispiel 12 - Unterbericht als Extension einbinden

Example:

Die einfachste Art einen Unterbericht einzubinden geschieht über die Funktion "append_subReport()" im Formelelement. Die Größe und Rahmen des Berichts richtet sich nach der Positionierung und Formatieren des Formelelements im Bericht. Durch das Setzen der Höhe oder Breite auf true wird der Unterbericht entweder auf die Y oder X Achse, ansonsten auf die absolute Höhe und Breite des Formelelements skaliert. Das Beispiel bindet einen Bericht der ID 14 mit variabler Breite und fester Höhe ein.

$report_id = 14;
$h=true;
append_subReport($pdf,$report,$ID,$el,$report_id,$h,$w);

Eine Alternative dazu ist die direkte Verwendung der Funktion zur Einbindung von Grafiken welche auch PDFs unterstützt. Die Erstellung des Unterberichts kann über LIMBAS oder eine eigene Erweiterung erfolgen. Ebenso können Statische PDFs eingebunden werden. Dabei enthält die hier verwendete Variable $report["tab_size"][$el] den Pfad der einzubindenden PDF Datei.

$report_id = 14;
$report_rename = "temp1.pdf";
$subreportfile = generate_pdf($report_id,$ID,$report_output,$report_rename);
$report["tab_size"][$el] = $subreportfile;
$report["height"][$el] = 0;
print_bild($pdf,$ID,$report,$el);
return;

Beispiel 13 - Diagramme einbinden

Example:

Auf gleiche Weise werden Diagramme eingebunden. Diagramme werden in LIMBAS über ein Template erstellt. Dieses Template muss eine Grafik mit dem Namen "USER/".$session['user_id']."/temp/chart_[$chart_id].png" generieren wobei $chart_id die Giagramm-ID ist. Die Größe und Rahmen des Diagramms richtet sich nach der Positionierung und Formatieren des Formelelements im Bericht. Durch das Setzen der Höhe oder Breite auf true wird der Unterbericht entweder auf die Y oder X Achse, ansonsten auf die absolute Höhe und Breite des Formelelements skaliert. Das Beispiel bindet eine Diagramm der ID 12 mit variabler Höhe und fester Breite ein.

$chart_id = 12;
$w=true;
append_subChart($pdf,$report,$ID,$el,$chart_id,$h,$w);

Eine Alternative dazu ist die direkte Verwendung der Funktion zur Einbindung von Grafiken. Die Erstellung der Grafik kann über ein Diagramm Template oder eine eigene Erweiterung erfolgen.

require_once('EXTENSIONS/generateMyChart.php'); # eigenes Template
$mychartfile = printMyChart(); # eigene Funktion
if(file_exists($mychart)){
   $prv = array( $mychartfile,
   $report["posx"][$el],
   $report["posy"][$el],
   $report["width"][$el],
   $report["height"][$el],
   $report["style"][$el],
   'bild');
   $pdf->print_element($pdf->printcell($prv));
}

Beispiel 14 - Externe Datenquelle

Example:

Es ist möglich für Berichts-Tabellen eine externe Datenquelle anstatt einer Limbas Datenbank-Tabelle anzugeben. Dazu müssen als Platzhalter für die gesamte Zeile Elemente von Typ 'Formel' in die entsprechenden Tabellenzellen hinzugefügt werden. Wichtig ist das diese Elemente den Parameter "Liste" aktiviert haben. Hat das Element diesen Parameter nicht wird es als normale Formel interpretiert. Das erste Formelelement von Links beinhaltet den Namen der Funktion aus welcher die Daten kommen sollen. (z.B. <myExt_getMyData>) Diese kann als Erweiterung in dem Erweiterungsscript "ext_reports.inc" erstellt werden. Den Funktionsnamen nur als Text ohne () oder Semikolon angeben. Übergabewerte werden automatisch mit übergeben. Die Werte werden aufsteigend von Links nach Rechts interpretiert. Dabei ist es gleichgültig an welcher Stelle in der Tabellenzeile sie sich befinden. Die Funktion muß ein Array mit folgender Struktur zurückgeben.

Array
 (
    [0] => Array
        (
            [0] => line-1-0
            [1] => line-2-0
            [2] => line-3-0
        )
 
    [1] => Array
        (
            [0] => line-1-1
            [1] => line-2-1
            [2] => line-3-1
        )
 
    [2] => Array
        (
            [0] => line-1-2
            [1] => line-2-2
            [2] => line-3-2
        )
 )


Folgende Funktion würde in unserem Beispiel aufgerufen:

myExt_getMyData($ID,$report_id,$report_tab,$report,$report_tab_cells,$bzm2,$rowid)


Übergabewerte:

  • $ID
  • $report_id
  • $report_tab
  • $report
  • $report_tab_cells
  • $bzm2
  • $rowid

OpenOffice

Eine weitere Alternative, Berichte mit LIMBAS zu generieren, ist das Berichtsmodul für .odt Dokumente Mit dieser Erweiterung lässt sich ein OpenOffice-Dokument aus einer schon vorhandenen PDF-Vorlage erstellen. Dazu wird der Bericht zuerst als XML geschrieben, womit dann letztendlich die Vorlage ergänzt wird.
Um einen .odt Dokument zu generieren, benötigen wir eine Vorlage, die selbst ein .odt Dokument ist. Wir definieren lediglich die Platzhalter, die später ersetzt werden sollen. Zur Übersicht können wir uns den Bericht als XML ausgeben lassen und die Namen mit den Platzhaltern vergleichen. Danach speichern wir es im LIMBAS-Dateimanager in einem beliebigen Verzeichnis und wählen es im Admin-Bereich der Berichtsübersicht als Office-Vorlage aus. Bei Änderungen am Template kann das Template direkt im Dateimanager ausgewechlselt werden.
Es müssen alle Felder die im Template benötigt werden auch in der Limbas-Berichtvorlage vorhanden werden. Dabei wird die Positionierung und Formatierung der Elemente nicht berücksichtigt, wohl aber Verknüpfungen oder Listen. Es kann auch auch ein als PDF vorgesehener Bericht als Berichtvorlage genutzt werden und so zwischen dem PDF und odt Format gewechselt werden.
Zu beachten ist das die Vorlagen weitestgehend eigenhändig und weniger mit copy&paste aus anderen Dokumenten gefüllt werden. Ansonsten besteht die Gefahr das das Dokument nicht mehr von Limbas generiert werden kann.

Beispiel

Template Platzhalter:

${zeit_von} - ${zeit_bis}
Land: ${land}
Ort: ${ort}
PLZ: ${plz}
${positionen:name} ${positionen:preis} # für Tabellenausgaben

Hier die zugehörige XML-Ausgabe:

<report name=“Chronik“>
<item id=“1“>
<text name=“zeit_von“>17.10.1977</text>
<text name=“zeit_bis“>22.10.1977</text>
<text name=“land“>Schweiz</text>
<text name=“ort“/>
<text name=“plz“>12356</text>
</item>
</report>