OBS/Kostenfreie Module/ReportWorkshop Syntax: Unterschied zwischen den Versionen
Thiel (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Thiel (Diskussion | Beiträge) |
||
(18 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
Alle wichtigen Kommandos werden aber hier erklärt | Alle wichtigen Kommandos werden aber hier erklärt | ||
==Erstellen== | |||
[[Datei:RW_Design.png|1000px]] | |||
[[Datei:RW_Design_Maker.png|1000px]] | |||
==Daten Selektion (Berichtseigenschaften)== | |||
[[Datei:RW_Datenselektion.png]] | |||
==Zeilenerstellungsregeln== | |||
[[Datei:RW_Tabellen_Regel_def.png|500px]] | |||
[[Datei:RW_Tabellen_Regel.png|500px]] | |||
==Kommandos== | ==Kommandos== | ||
Zeile 149: | Zeile 158: | ||
2. worker H | 2. worker H | ||
|} | |} | ||
=Macros= | |||
Für jeden erstellten Workshop lassen sich Macros hinterlegen. Dabei wird das StartProc immer vor erstellung und das EndProc immer nach der erstellung ausgeführt. | |||
Für diese beiden Funktionen steht immer das Übergeben Objekt TReportWorkshop zur Verfügung. | |||
Über dieses Objekt kann unteranderem auf volgende Variablen und Funktionen zugegriffen werden: | |||
{| class="wikitable" | |||
|- | |||
! Variable !! Beschreibung | |||
|- | |||
| lDesignMode || identifizierung des Designmoduses | |||
|- | |||
| lCockpit || identifizierung ob der Report aus dem Cockpit aufgerufen wird | |||
|- | |||
| cSysUID || ID des aktuellen Datensatz, wenn aus einer Liste aufgerufen (z.B. Aufträge) | |||
|- | |||
| cMarkedRecords || IDs der markierten Datensätze, wenn aus einer Liste aufgerufen (z.B. Aufträge) | |||
|} | |||
Mit lDesignMode und lCockpit können zum Beispiel Variablen und Funktionen unterschiedlich definiert werden, da einige Werte in den verschiedenen Modis nicht zur Verfügung stehen. | |||
<syntaxhighlight lang="delphi"> | |||
if (oRWS.lDesignMode ) then begin | |||
oRWS.AddRWSVariable('cAufnr', '700004'); | |||
end else if (oRWS.lCockpit ) then begin | |||
oRWS.AddRWSVariable('cAufnr', '700100'); | |||
end else begin | |||
cAufNr := DB_ReadSQLValue(oDB, 'Auftrag', 'a_nr', 'sys_uid=' + DB_SQLVal(oRWS.cSysUID)); | |||
oRWS.AddRWSVariable('cAufnr', cAufNr); | |||
end; | |||
</syntaxhighlight> | |||
'''Beispiel:''' | |||
<source lang="delphi"> | |||
function StartProc(oRWS: TReportWorkshop):Boolean; | |||
var cAufNr : String; | |||
cKNr : String; | |||
begin | |||
if (oRWS.lDesignMode ) then begin | |||
oRWS.AddRWSVariable('cAufnr', '700004'); | |||
oRWS.AddRWSVariable('cKNr', DB_ReadSQLValue(oDB, 'Auftrag', 'a_knr', 'a_nr =' + DB_SQLVal('700004'))); | |||
end else if (oRWS.lCockpit ) then begin | |||
oRWS.AddRWSVariable('cAufnr', '700004'); | |||
oRWS.AddRWSVariable('cKNr', DB_ReadSQLValue(oDB, 'Auftrag', 'a_knr', 'a_nr =' + DB_SQLVal('700004'))); | |||
end else begin | |||
cAufNr := DB_ReadSQLValue(oDB, 'Auftrag', 'a_nr', 'sys_uid=' + DB_SQLVal(oRWS.cSysUID)); | |||
cKNr := DB_ReadSQLValue(oDB, 'Auftrag', 'a_knr', 'sys_uid=' + DB_SQLVal(oRWS.cSysUID)); | |||
oRWS.AddRWSVariable('cAufnr', cAufNr); | |||
oRWS.AddRWSVariable('cKNr', cKNr); | |||
end; | |||
oRWS.AddRWSFunction('Ueberschrift'); | |||
oRWS.AddRWSFunction('GetKundeAdresse'); | |||
end; | |||
function EndProc(oRWS: TReportWorkshop):Boolean; | |||
begin | |||
end; | |||
function Ueberschrift():String; | |||
begin | |||
Result := 'Auftragszusammenstellung'; | |||
end; | |||
function GetKundeAdresse(cStr: String):String; | |||
begin | |||
Result := DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_name', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF + | |||
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_strasse', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF + | |||
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_plz', 'ps_nr = ' + DB_SQLVal(cStr)) + ' ' + | |||
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_ort', 'ps_nr = ' + DB_SQLVal(cStr)) | |||
end; | |||
</source> | |||
==Dynamische Variablen== | |||
In jedem Report können unterschiedlich Variablen registriert werden, welche dann während der Ausführung entsprechend gefüllt werden: | |||
'''Syntax Report:''' | |||
{%cAufNr} | |||
'''Syntax Makro:''' | |||
<syntaxhighlight lang="delphi"> | |||
procedure AddRWSVariable(cName: String; cValue: String); | |||
procedure AddRWSVariable(cName: String; cValue: TObject); | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="delphi"> | |||
function StartProc(oRWS: TReportWorkshop):Boolean; | |||
begin | |||
oRWS.AddRWSVariable('cAufnr', '700004'); | |||
end; | |||
</syntaxhighlight> | |||
==Dynamische Funktionenen== | |||
In jedem Report können unterschiedlich Funktionen registriert werden, welche dann während der Ausführung über '''--macro Funktionsname''' entsprechend ausgeführt werden können: | |||
'''Syntax Report:''' | |||
{--macro <Funktionname> [Parameter (mit Komma getrennt)]} | |||
'''Bespiel:''' | |||
{--macro GetKundeAdresse "{%cknr}}"} | |||
'''Syntax Makro:''' | |||
<syntaxhighlight lang="delphi"> | |||
procedure AddRWSFunction(cName: String); | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="delphi"> | |||
function StartProc(oRWS: TReportWorkshop):Boolean; | |||
begin | |||
oRWS.AddRWSFunction('GetKundeAdresse'); | |||
end; | |||
function GetKundeAdresse(cStr: String):String; | |||
begin | |||
Result := DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_name', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF + | |||
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_strasse', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF + | |||
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_plz', 'ps_nr = ' + DB_SQLVal(cStr)) + ' ' + | |||
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_ort', 'ps_nr = ' + DB_SQLVal(cStr)) | |||
end; | |||
</syntaxhighlight> | |||
===Wichtig "--Macro" Funktion=== | |||
der Aufruf '''--macro''' steht nur innerhalb von Datenabfragen und Zeilenerstellungsregeln zur Verfügung!<br /> | |||
Um diesen Aufruf auch "außerhalb" solcher abfragen verfügbar zu haben, müssen Dummys geschrieben werden:<br /> | |||
====Dokument==== | |||
[[Datei:RW_--Macro.png]]<br /> | |||
Hier sehen Sie, dass für das Gesamte Dokument die Datenabfrage <br /> | |||
SELECT "--macro" | |||
über Berichtseigenschaften hinterlegt wurde. Dies führt dazu, dass innerhalb des Hauptberichtes auf '''--macro''' zugegriffen werden kann.<br /> | |||
{{Hinweis|Wenn hier eine andere Datenabfrage definiert wurde, steht ebenfalls die '''--macro''' Funktion zur Verfügung}} | |||
====Kopf- und Fußzeilen==== | |||
Um den Aufruf '''--macro'' ebenfalls in den Kopf- oder Fußtext nutzen zu können, müssen Sie diesen in einer Tabelle kapseln (Randlos) und eine Zeilenerstellungsregeln definieren.<br /> | |||
In dieser wird ebenfalls die Datenabfrage <br /> | |||
SELECT "--macro" | |||
definiert.<br /> | |||
[[Datei:RW_--Macro_beisp.png]] |
Aktuelle Version vom 5. Juni 2020, 14:57 Uhr
Report Workshop
In der Hilfe des Drittanbieters TRichView finden Sie weiterführende Hilfe zum ReportWorkshop: https://www.trichview.com/help-report/
Alle wichtigen Kommandos werden aber hier erklärt
Erstellen
Daten Selektion (Berichtseigenschaften)
Zeilenerstellungsregeln
Kommandos
"IF – ENDIF" or "IF – ELSE – ENDIF"
Mit dem Befehl "If" können einige Inhalte aus dem Berichtsergebnis ausgeschlossen werden. Es kann optional durch den "Else" -Befehl gefolgt werden und muss durch den "EndIf" -Befehl beendet werden. Alle diese Befehle müssen sich im selben Unterdokument (d. H. In derselben Tabellenzelle) befinden.
Syntax:
<if> :: = if <if-Bedingung> <if condition> :: = <operand> [<Vergleichsoperation> <operand>] <operand> :: = <vollständiger Datenfeldname> |% <Variablenname> | <Integerkonstante> | <Stringkonstante>
Im ersten Fall ist <if condition> ein einzelner Operand, der als True oder False ausgewertet wird.
<Operand> kann entweder ein Datenfeld oder eine Variable sein. Sie müssen definiert werden, andernfalls ist der Befehl fehlerhaft.
Bei Datenfeldern mit ganzzahligen Werten wird jeder Wert ungleich Null als True ausgewertet, null wird als False ausgewertet.
Beispiel:
{$ IF count} Anzahl der Details: {count} {$ ELSE} Keine Details verfügbar {$ ENDIF}
Der zweite Fall, <if condition>, besteht aus drei Parametern: <operand> <comparation operation> <operand>
Der Befehl vergleicht zwei Operanden mit der angegebenen Vergleichsoperation.
<Vergleichsoperation> :: = = | <> | <|> | <= |> = | == |! =
Vergleichsoperation | Bedeutung |
---|---|
= == |
gleich |
<> != |
Nicht gleich |
< | kleiner als |
> | größer als |
<= | kleiner als oder gleich |
>= | größer als oder gleich |
Zusätzlich zu Feldern und Variablen kann der Operand eine Zeichenkette oder eine Ganzzahlkonstante sein.
String-Konstante ist ein Text in Anführungszeichen:
<Zeichenfolgenkonstante> :: = "| <Text> |"
Um ein doppeltes Zitat in Text aufzunehmen, duplizieren Sie es.
Ganzzahlkonstante besteht aus Ziffern und einem optionalen Minuszeichen:
<integer constant> :: = [-] <Ziffer> +
<Ziffer> :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Wenn der Feldname nur aus Ziffern besteht, schließen Sie ihn in einfache Anführungszeichen ein, um zu verhindern, dass er als Integer-Konstante interpretiert wird.
Beispiele:
{$ IF test = "bestanden"} OK {$ ENDIF} {$ IF Gewicht> 200} Zu schwer {$ ENDIF}
Bei Zeichenfolgen wird zwischen Groß- und Kleinschreibung unterschieden. Wenn eine Zeichenfolge mit einem numerischen Wert verglichen wird, konvertiert die Komponente diese Zeichenfolge vor dem Vergleich in einen numerischen Wert (wenn dies nicht möglich ist, ist der Befehl "If" fehlerhaft). Die Konvertierung in einen Gleitkommawert verwendet das numerische Standardtrennzeichen des Systems. Der Zeichenfolgenwert kann nur mit einer anderen Zeichenfolge oder einer Zahl verglichen werden (z. B. kann er nicht mit einem Datum verglichen werden).
"IFDEF – ENDIF" or "IFDEF – ELSE – ENDIF"
Der Befehl "IfDef" ähnelt "If" und hat eine ähnliche Syntax und Bedeutung, aber eine Bedingung wird anders bewertet.
Syntax:
<ifdef> :: = ifdef <Bedingung> <Bedingung> :: = <vollständiger Datenfeldname> |% <Variablenname>
Beispiel:
{$ IFDEF phone2} Telefon 2: {phone2} {$ ENDIF}
<Wert> kann entweder ein Datenfeld oder eine Variable sein.
Ein Datenfeld in der Bedingung muss existieren, ansonsten ist der Befehl fehlerhaft. NULL-Felder (oder leere Zeichenfolgenfelder) werden als False ausgewertet, alle anderen Werte werden als True ausgewertet.
Für Variablen werden nicht vorhandene oder leere Variablen als Falsch ausgewertet, Variablen mit nicht leerem Text werden als Wahr ausgewertet.
"IFNDEF – ENDIF" or "IFNDEF – ELSE – ENDIF"
Der "IfNDef" -Befehl ähnelt "IfDef", aber die Regel der Zustandsbewertung ist genau das Gegenteil.
Syntax:
<ifndef> :: = ifndef <Bedingung> <Bedingung> :: = <vollständiger Datenfeldname> |% <Variablenname>
Beispiel:
{$ IFnDEF Kommentare} Keine Kommentare {$ ENDIF}
LISTRESET
"ListReset" gibt an, wenn die Absatznummerierung auf 1 zurückgesetzt werden muss. Dieser Befehl muss in einen nummerierten Absatz eingefügt werden, andernfalls ist er fehlerhaft.
Syntax:
<listreset> :: = listreset [<Tiefe>]
<Tiefe> ist ein ganzzahliger Wert, null oder positiv. Wenn es weggelassen wird, wird Null angenommen.
Standardmäßig ist die Absatznummerierung im gesamten Dokument fortlaufend. Dieser Befehl erlaubt es auf 1 zurückzusetzen.
Der Parameter depth gibt die Datenabfrage an, auf die die Liste zurückgesetzt wird. 0 bedeutet die am meisten verschachtelte Abfrage, 1 bedeutet die Abfrage, die sie enthält, und so weiter.
Beispiel:
Lassen Sie uns eine Organisationsstruktur generieren. Es gibt Abfragen "Chefs", "Manager", "Arbeiter", die eine Master-Detail-Beziehung haben.
ohne ListReset | {$LISTRESET 1} | {$LISTRESET} or {$LISTRESET 0} |
---|---|---|
boss A manager A 1. worker A 2. worker B manager B 3. worker C 4. worker D boss B manager C 5. worker E 6. worker F manager D 7. worker G 8. worker H |
boss A
manager A 1. worker A 2. worker B manager B 3. worker C 4. worker D boss B manager C 1. worker E 2. worker F manager D 3. worker G 4. worker H |
boss A
manager A 1. worker A 2. worker B manager B 1. worker C 2. worker D boss B manager C 1. worker E 2. worker F manager D 1. worker G 2. worker H |
Macros
Für jeden erstellten Workshop lassen sich Macros hinterlegen. Dabei wird das StartProc immer vor erstellung und das EndProc immer nach der erstellung ausgeführt. Für diese beiden Funktionen steht immer das Übergeben Objekt TReportWorkshop zur Verfügung. Über dieses Objekt kann unteranderem auf volgende Variablen und Funktionen zugegriffen werden:
Variable | Beschreibung |
---|---|
lDesignMode | identifizierung des Designmoduses |
lCockpit | identifizierung ob der Report aus dem Cockpit aufgerufen wird |
cSysUID | ID des aktuellen Datensatz, wenn aus einer Liste aufgerufen (z.B. Aufträge) |
cMarkedRecords | IDs der markierten Datensätze, wenn aus einer Liste aufgerufen (z.B. Aufträge) |
Mit lDesignMode und lCockpit können zum Beispiel Variablen und Funktionen unterschiedlich definiert werden, da einige Werte in den verschiedenen Modis nicht zur Verfügung stehen.
if (oRWS.lDesignMode ) then begin
oRWS.AddRWSVariable('cAufnr', '700004');
end else if (oRWS.lCockpit ) then begin
oRWS.AddRWSVariable('cAufnr', '700100');
end else begin
cAufNr := DB_ReadSQLValue(oDB, 'Auftrag', 'a_nr', 'sys_uid=' + DB_SQLVal(oRWS.cSysUID));
oRWS.AddRWSVariable('cAufnr', cAufNr);
end;
Beispiel:
function StartProc(oRWS: TReportWorkshop):Boolean;
var cAufNr : String;
cKNr : String;
begin
if (oRWS.lDesignMode ) then begin
oRWS.AddRWSVariable('cAufnr', '700004');
oRWS.AddRWSVariable('cKNr', DB_ReadSQLValue(oDB, 'Auftrag', 'a_knr', 'a_nr =' + DB_SQLVal('700004')));
end else if (oRWS.lCockpit ) then begin
oRWS.AddRWSVariable('cAufnr', '700004');
oRWS.AddRWSVariable('cKNr', DB_ReadSQLValue(oDB, 'Auftrag', 'a_knr', 'a_nr =' + DB_SQLVal('700004')));
end else begin
cAufNr := DB_ReadSQLValue(oDB, 'Auftrag', 'a_nr', 'sys_uid=' + DB_SQLVal(oRWS.cSysUID));
cKNr := DB_ReadSQLValue(oDB, 'Auftrag', 'a_knr', 'sys_uid=' + DB_SQLVal(oRWS.cSysUID));
oRWS.AddRWSVariable('cAufnr', cAufNr);
oRWS.AddRWSVariable('cKNr', cKNr);
end;
oRWS.AddRWSFunction('Ueberschrift');
oRWS.AddRWSFunction('GetKundeAdresse');
end;
function EndProc(oRWS: TReportWorkshop):Boolean;
begin
end;
function Ueberschrift():String;
begin
Result := 'Auftragszusammenstellung';
end;
function GetKundeAdresse(cStr: String):String;
begin
Result := DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_name', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF +
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_strasse', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF +
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_plz', 'ps_nr = ' + DB_SQLVal(cStr)) + ' ' +
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_ort', 'ps_nr = ' + DB_SQLVal(cStr))
end;
Dynamische Variablen
In jedem Report können unterschiedlich Variablen registriert werden, welche dann während der Ausführung entsprechend gefüllt werden:
Syntax Report:
{%cAufNr}
Syntax Makro:
procedure AddRWSVariable(cName: String; cValue: String);
procedure AddRWSVariable(cName: String; cValue: TObject);
function StartProc(oRWS: TReportWorkshop):Boolean;
begin
oRWS.AddRWSVariable('cAufnr', '700004');
end;
Dynamische Funktionenen
In jedem Report können unterschiedlich Funktionen registriert werden, welche dann während der Ausführung über --macro Funktionsname entsprechend ausgeführt werden können:
Syntax Report:
{--macro <Funktionname> [Parameter (mit Komma getrennt)]}
Bespiel:
{--macro GetKundeAdresse "{%cknr}}"}
Syntax Makro:
procedure AddRWSFunction(cName: String);
function StartProc(oRWS: TReportWorkshop):Boolean;
begin
oRWS.AddRWSFunction('GetKundeAdresse');
end;
function GetKundeAdresse(cStr: String):String;
begin
Result := DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_name', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF +
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_strasse', 'ps_nr = ' + DB_SQLVal(cStr)) + CRLF +
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_plz', 'ps_nr = ' + DB_SQLVal(cStr)) + ' ' +
DB_ReadSQLValue(oDB, 'PERSSTA', 'ps_ort', 'ps_nr = ' + DB_SQLVal(cStr))
end;
Wichtig "--Macro" Funktion
der Aufruf --macro steht nur innerhalb von Datenabfragen und Zeilenerstellungsregeln zur Verfügung!
Um diesen Aufruf auch "außerhalb" solcher abfragen verfügbar zu haben, müssen Dummys geschrieben werden:
Dokument
Hier sehen Sie, dass für das Gesamte Dokument die Datenabfrage
SELECT "--macro"
über Berichtseigenschaften hinterlegt wurde. Dies führt dazu, dass innerhalb des Hauptberichtes auf --macro zugegriffen werden kann.
Kopf- und Fußzeilen
Um den Aufruf '--macro ebenfalls in den Kopf- oder Fußtext nutzen zu können, müssen Sie diesen in einer Tabelle kapseln (Randlos) und eine Zeilenerstellungsregeln definieren.
In dieser wird ebenfalls die Datenabfrage
SELECT "--macro"