Erstellung und Verwendung von Office-Berichten - Word, Excel, PDF
Produktlinie
Standard
|Expert
Betriebsart
CLOUD ABO
|ON-PREMISES
Module
Leistung & CRM
Budget & Teilprojekt
Fremdkosten
Ressourcenplanung
Business Intelligence
Vertec stellt einen office-basierten, cloudfähigen Berichtgenerator zur Verfügung.
Die Vertec Office-Berichte bestehen aus der Kombination einer Word- oder Excel-Vorlage für die Layout-Struktur sowie einer Bericht-Definition in Form von Python Code für die Generierung des Inhalts.
Um einen Vertec Office-Bericht zu erstellen, muss er registriert werden. Dabei wird die Word- oder Excel-Vorlage hinterlegt und als Bericht-Definition der dazugehörige Python Code eingefügt.
Das Vorgehen ist im Artikel Berichte registrieren detailliert beschrieben.
Der Dateninhalt des Berichts wird berechnet durch Python-Code, welcher als Berichts-Definition hinterlegt ist. Wie dieser Code genau aufgebaut wird, ist im Artikel Python-Code für Office-Berichte detailliert beschrieben.
Soll die Ausgabe in Word bzw. PDF erfolgen, wird dafür ein Word-Dokument (.docx) als Vorlage hinterlegt.
Alles, was gedruckt wird, befindet sich in sogenannten Bands.
Ein Band wird in der Berichtsvorlage durch eine Textmarke dargestellt. Der Name der Textmarke ist der Band-Name. Erstellen Sie dort, wo Sie ein Band erstellen möchten, einen Beispiel-Text im gewünschten Layout (z.B. eine Tabelle, Zeilen mit Tab etc.). Markieren Sie dann diesen Text und klicken Sie auf Einfügen - Textmarke...
.
Es öffnet sich das Fenster, in dem Sie den Namen der Textmarke angeben können. Es empfiehlt sich, dabei einen Namen zu wählen, bei dem erkennbar ist, worum es sich handelt (also nicht Band1, Band2 etc.). Das erleichtert später das Anpassen der Bänder und der Ausdrücke in den Expressions.
Die Bänder können frei verschachtelt werden. Jede Berichtsvorlage hat mindestens ein Haupt-Band, welches über alles geht. Sie können also, nachdem Sie die Vorlage erstellt haben, alles markieren und mit einer Textmarke umschliessen. Ein Band wird bei der Ausführung eines Berichts ein- oder mehrmals gedruckt, je nachdem, ob es sich um ein einzelnes Objekt oder um eine Liste handelt. In diesem Fall wird das Band so viel mal gedruckt, wie sich Elemente in der Liste befinden.
Die einzelnen Bands werden durch Band-Expressions gesteuert, welche sich in einer durch einen Kommentar markierte Textstelle befinden. Die Syntax ist dabei wie folgt:
:name
angegeben. Dabei handelt es sich um den Feldnamen des entsprechenden TableFields
.Als Band-Expression wird also zum Beispiel bndSpesenExp:spesen
geschrieben, dieser Text markiert und mit einem leeren Kommentar versehen:
Im Code enthält das Schlüsselwort spesen
dann die gewünschten Objekte, welche im Band dargestellt werden sollen. Es sind folgende Band Expressions möglich (bndXXX
bedeutet dabei der Name des Bandes):
True
sein:
True
sein.<> 0
sein.<>''
sein, also kein Leerstring.<> null
sein.True
, null = False
.bndHasSpesenCond:spesen
, wobei spesen
der Name des TableFields ist.not
und dem Feld-Namen umgekehrt werden: bndNoSpesenCond:not spesen
.bndXXXCond:context:variablenname
.
Ein Band kann nicht gleichzeitig Exp- und eine Cond-Expression haben. Falls beides gewünscht ist, müssen zwei Bands gemacht werden, wobei das Cond-Band das Exp-Band umschliesst.
Eine Tabelle mit den Ländercodes finden Sie unter: https://msdn.microsoft.com/de-de/library/ee825488(v=cs.20).aspx
OclTextField
mit dem angegebenen Namen (hier im Beispiel locale
) eingefügt:
Resultat der angegebenen OCL-Expression muss ein Ländercode sein. Dieser kann entweder direkt angegeben werden, wie hier oben im Beispiel ("de-DE"), oder z.B. aus einem Feld ausgelesen werden: OclTextField("locale", "projekt.zusatzfeldasstring('locale')")
.bndSpesenLocale:de-DE
Textmarken, deren Name mit trg
oder src
beginnt, werden vom Vertec Bericht-Mechanismus nicht gelöscht. Wenn Sie also in Ihrem Dokument Textmarken benötigen, die auch nach dem Ausführen bestehen bleiben, nennen sie diese trgXXX
oder srcXXX
.
Anfang und Ende eines Bands müssen sich immer auf gleicher (Hierarchie-)Ebene befinden.
Wenn sich z.B. ein Band-Start am Ende eines Absatzes, welcher Text enthält, befindet, aber nur die Absatzmarke umfasst, ist das eigentlich nicht gültig. Damit der Bericht trotzdem funktioniert, wird der Band-Start interpretativ nach vorne an den Beginn des nächsten Elements (Absatz oder Tabelle) geschoben, falls das Band-Ende am Ende einer Tabellenzeile oder eines Absatzes ist:
Diese automatische Anpassung führt dazu, dass ein Absatzwechsel weniger dargestellt wird. Dies ist im Output sichtbar.
Solche Bands sollten nach Möglichkeit nicht definiert werden, sondern möglichst immer ganze Abschnitte oder Start und Ende innerhalb des Textes als Band definiert werden.
Befindet sich der Start des Bands sogar mitten im Absatztext, wie in der folgenden Abbildung dargestellt, dann erscheint eine Fehlermeldung betreffend ungültiger Band-Definition.
Generell:
Band-Start | Band-Ende | Vertec-generierte Berichte |
Text (normaler Paragraph) | Text (normaler Paragraph) | OK |
Text (normaler Paragraph) | Text (innerhalb Table) | nicht OK |
Text (normaler Paragraph) | Ende von Tabellenzeile | nicht OK |
Beginn Tabellenzeile | Ende von Tabellenzeile | OK |
Beginn Tabellenzeile | Text in einer Tabellenzelle, nicht am Ende | nicht OK |
Beginn und Ende von Textmarken lassen sich ab besten über das Menü Einfügen > Textmarke > bndName -> gehe zu einsehen.
Es gibt Fälle von Band-Definitionen, welche vom Code nicht unterschieden werden können, obwohl sie in Word visuell unterscheidbar sind.
Dies ist zum Beispiel dann der Fall, wenn eine Textmarke am Schluss eines leeren Absatzes endet, welcher auf eine Tabelle folgt:
In diesem Fall befindet sich das Band-Ende innerhalb des leeren Absatzes. Endet das Band aber am Ende der Tabelle, enthält den leeren Absatz also nicht, dann befindet sich das Bookmark-Ende ebenfalls im darauffolgenden Abschnitt.
Bookmark-Enden in einem sonst leeren Absatz werden deshalb immer als Ende der vorangehenden Tabelle interpretiert.
Soll ein leerer Absatz nach einer Tabelle explizit zum Band gehören, kann dies erreicht werden, indem im Absatz irgendein Text (z.B. ein Leerzeichen) eingefügt wird. Dann wird der Absatz als zum Band zugehörig interpretiert.
Wenn ein Band am Anfang einer leeren Tabellenzeile beginnt, dann muss in dieser Tabellenzeile mindestens ein Leerzeichen eingefügt werden:
Ansonsten erscheint eine Fehlermeldung der Art: Invalid overlapping bands bndXY and bndYZ
.
Ein Feld ist ein durch einen Kommentar markierter Text innerhalb eines Bandes, der beim Ausführen des Berichts durch Daten aus Vertec ersetzt wird. Der markierte Text enthält dabei die Referenz auf die im Python-Code definierten Felder. Der Kommentar selbst ist leer oder enthält das Schlüsselwort translation
, um die Übersetzung für dieses Feld zu aktivieren.
Um ein solches Feld zu erstellen, fügen Sie an der Stelle, wo später die Daten aus Vertec eingefügt werden sollen, das Schlüsselwort ein, und klicken Sie auf Überprüfen - Neuer Kommentar
.
Es können auch OCL-Members angegeben werden. Dabei muss auf die Gross-/Kleinschreibung geachtet und eine Businessklasse angegeben werden. Diese wird in der Deklaration der Tabelle
mittels businessclass=
angegeben.
Mit dem Präfix sum:
können Feldwerte summiert werden. Im folgenden Beispiel werden die Werte des Feldes wertext
der Table leistungen
summiert:
sum:leistungen.wertext
Summenfelder können auch Summen über mehrere Table-Hierarchien darstellen:
Als Beispiel gibt es auf einem Spesen-Bericht eine Table, welches eine Gruppierung nach Spesentypen macht (Name der Table: spesentypen
) und darauf eine Sub-Table mit der Liste der Spesen für diesen Typ (Name der Sub-Table: spesen
).
Möchte man nun ausserhalb des Spesentypen-Bands die Summe aller Spesen ausgeben, geht das mit folgender Expression:
sum:spesentypen.spesen.wertext
Dieses Feld muss sich ausserhalb der ersten durch die Summe referenzierten Table befinden, an einem Ort, wo auch die Table Expression erlaubt wäre und die Table liefern würde.
Mittels sogenannten Context-Expressions können Variablen direkt auf dem Bericht-Context ausgegeben werden, ohne dass dafür extra ein Feld auf einer Table-Definition eingeführt werden muss.
Eine Context-Expression ist durch den Präfix context:
gekennzeichnet und referenziert eine Context-Variable
des Berichts. Beispiel:
context:stichdatum
Der Datentyp des Feldes richtet sich nach dem Wert der Context-Variable. Falls es sich bei der Context-Variable um eine Objekt-Referenz oder eine Liste handelt, gibt die Context-Expression als Wert einen String (String-Representation) zurück.
Möchte man also beispielsweise im Titel einen Bericht-Parameter angeben, z.B. das Stichdatum einer Auswertung, kann das direkt über die Context-Expression angegeben werden.
Da in Kopf- und Fusszeilen Kommentare nicht verfügbar sind, werden die Variablen hier in doppelt geschweifte Klammern geschrieben, z.B.:
{{context:stichdatum}}
Um ein Feld zu übersetzen, wird als Kommentar das Schlüsselwort translation
eingetragen. Der Übersetzungsmechanismus schaut dann in der Übersetzungsdatei nach dem Begriff und setzt, falls vorhanden, die entsprechende Übersetzung ein.
Das setzt voraus, dass Begriffe, die ausschliesslich im Bericht verwendet werden (zum Beispiel der Bericht-Titel) in die Übersetzungen eingefügt werden.
In Kopf- und Fusszeilen von Office-Berichten können Translations in doppelten geschweiften Klammern geschrieben werden, z.B.
{{Translation:Page}} X {{Translation:of}} XX
Bilder aus der Datenbank (wie ImageData bei Word-Berichten) werden im Python Code als ImageField
bzw. OclImageField
deklariert. Im Bericht-Dokument können sie als normale Datenfelder (kommentierter Text) eingefügt werden. Es wird auch die Verwendung von PDF Dokumenten als Bild unterstützt, wobei die Vorschau der ersten Seite angezeigt wird.
Die Angabe eines Bilder-Pfades ist nicht möglich.
Um die dargestellte Grösse der eingefügten Bilder in Word zu steuern, empfiehlt es sich, diese in einer Tabelle anzuzeigen wie in den gezeigten Beispielen. Die Skalierung in der Tabelle verhält sich wie folgt:
Die eingefügten Bilder werden nicht hochskaliert, weder horizontal noch vertikal. Die Bilder werden aber bei Bedarf runterskaliert:
Hier nachfolgend eine Übersicht über die Skalierungen:
Zeilenhöhe fix | Grössenanpassung zulassen | Auswirkungen auf das Bild |
---|---|---|
Nein | Nein | Skaliert: ja. Verändert die Zeilenhöhe der Tabelle. Die Zeilenbreite bleibt. |
Nein | Ja | Skaliert: nein. Verändert Zeilenhöhe und Zeilenbreite (das Bild wird skaliert auf maximalbreite der Tabelle - Seitenbreite) |
Ja | Nein | Skaliert: ja. Verändert weder Zeilenhöhe noch Zeilenbreite. |
Ja | Ja | Skaliert: nein. Verändert die Zeilenbreite. Die Zeilenhöhe bleibt, das Bild überlappt. |
Als HTML-formatierter Text z.B. aus Textbausteinen wird im Python Code
als TextField
bzw. OclTextField
deklariert. Im Bericht-Dokument wird er mit dem Präfix html:
eingefügt.
Beispiel Felddeklaration:
OclTextField('textbaustein', "zusatzfeldobj('textbaustein').oclAsType(Textbaustein).text"),
In der Vorlage:
Der Wert wird als formatierter HTML-Text interpretiert und das Ergebnis in den Bericht geschrieben.
Es werden (mit einigen vermerkten Ausnahmen) die im Artikel Textbausteine beschriebenen Elemente unterstützt, auch innerhalb des HTML berechnete OCL-Expressions.
Office-Berichte können ab Vertec 6.3 auch im Excel-Format ausgegeben werden. Der zugrunde liegende Python-Code ist dabei derselbe wie bei Word-Berichten; die beiden Formate unterscheiden sich nur durch die Vorlage.
Um ein Band zu setzen, markieren Sie die entsprechenden Zellen und fügen im Feld oben links den Bandnamen ein.
Es gibt immer ein Main-Band, welches alles umfasst und sich auf das Hauptobjekt bezieht, also die Haupttable enthält.
Die anderen Bänder und Sub-Bänder werden gleich gesetzt: Zellen markieren und oben links den Namen einfügen:
Wichtiger Hinweis: Achten Sie beim Setzen der Bänder darauf, dass nicht die gesamten Zeilen (hinten rechts bis unendlich) markiert sind, sondern nur die Zellen, die tatsächlich benötigt werden. Sonst dauert der Aufbau des Berichts länger, da Vertec durch alle Zellen iterieren muss, um herauszufinden, ob irgendwo ein Wert gesetzt ist.
Um ein Band zu löschen, öffnen Sie über Formeln
den Namens-Manager
:
Es gibt zwei Arten von Band-Expressions: Cond- und Exp-Bands.
Exp
oder Cond
, je nachdem, um welche Art von Expression es sich handelt (siehe unten).:name
angegebenAls Band-Expression wird also zum Beispiel bndProjekteExp:projekte
geschrieben, dieser Text markiert und mit einem leeren Kommentar versehen.
Excel fügt beim Anlegen eines Kommentars den Autor automatisch ein. Es ist wichtig, dass Sie diesen lassen und nicht rauslöschen. Mit "leerem" Kommentar ist also kein gänzlich leerer Kommentar gemeint, sondern einer, bei dem nur der Autor drin steht:
In Excel-Versionen ab Office 365 gibt es "Notes", welche die "Comments" ablösen. Comments gibt es nach wie vor, sind aber neu eine Art Thread, wo sich mehrere User darüber unterhalten können.
Steht beides zur Verfügung, sollte man für die Vertec-Vorlagen die "Notes" verwenden.
Ein Feld ist ein durch einen Kommentar markierter Text innerhalb eines Bandes, der beim Ausführen des Berichts durch Daten aus Vertec ersetzt wird. Der markierte Text enthält dabei die Referenz auf die im Python-Code definierten Felder. Der Kommentar selbst ist leer (siehe oben) oder enthält das Schlüsselwort translation, um die Übersetzung für dieses Feld zu aktivieren.
Pro Zelle kann jeweils nur ein Begriff gesetzt werden. Es können also nicht in einer Zelle gleichzeitig ein Feld und eine Band-Expression gesetzt werden. Im Beispielbericht in Abbildung 3 wurde das so gelöst, dass in der Zelle am Ende der Zeile die Band-Expression eingefügt und das Band um eine Spalte breiter gemacht wurde.
Auch die Context-Variablen werden unterstützt. Statt einem Python-Feld enthält die Zelle den Text context:
, gefolgt von der entsprechenden Variable:
Im Gegensatz zu Word gibt es in Excel verschieden Datentypen. Die automatische Erkennung von Excel ist dabei nicht immer sinnvoll. Deshalb kann in der Excel-Vorlage die entsprechende Zelle mit der gewünschten Formatierung versehen werden. Beim Einfügen der Daten bzw. Kopieren der Zellen nach unten wird die Formatierung mitkopiert.
In Vertec Versionen vor 6.4.0.22 werden Minutenwerte gemäss Systemeinstellungen Projekt / Mandat
> Anzeige Minuten
exportiert.
Ab Vertec 6.4.0.22 wird das Format Stunden Minuten
(HH:MM) nicht mehr berücksichtigt, sondern als Stunden Dezimal
mit 2 Dezimalstellen exportiert. Anzeige Minuten
wird nach wie vor als Minuten exportiert.
Summierung in Excel funktioniert mit der gewohnten Excel Formel =Summe(<Band>)
.
Zeilensummen werden wie üblich mit den Zell-Bezügen gemacht:
Bei den Summen in den Spalten gelten folgende Richtlinien:
=Operator(<Band>)
lautenAufgrund der Formatierung der Datentypen (siehe den Abschnitt Datentypen in Excel) kann es bei den Zellbezügen zum Hinweis kommen "Ein in der Formel verwendeter Wert ist vom falschen Datentyp."
Dies ist deshalb so, weil in den Feldern z.B. leistwertint
, leistwertext
etc. steht, was ja nicht summiert werden kann. Nach der Generierung des Berichts funktioniert die Summierung, da dann die Zahlenwerte drin stehen.
Die Summierung von Zellen in Excel Berichten via Band-Summen summiert alle Zellen einer Spalte innerhalb eines Bands.
In vielen Fällen möchten man einzelne Zellen eines Bands summieren, welches durch mehrere Hierarchiestufen von der Summe entfernt ist.
Ab Vertec 6.4 wird bei Summierung von nur einer Zelle eine Summe über alle Kopien dieser Zellen gemacht.
Beispiel
Die Summierung bezieht sich auf die Total-Zelle
Beim Ausführen wird eine Summe über alle Kopien dieser Zelle gemacht: