OBS/Kostenfreie Module/ReportWorkshop Syntax

Aus OBS Wiki
Version vom 5. Juni 2020, 14:57 Uhr von Thiel (Diskussion | Beiträge) (→‎Dynamische Funktionenen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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

RW Design.png RW Design Maker.png

Daten Selektion (Berichtseigenschaften)

RW Datenselektion.png

Zeilenerstellungsregeln

RW Tabellen Regel def.png RW Tabellen Regel.png

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>

ACHTUNG: Operanden und Operation müssen durch Leerzeichen begrenzt sein.

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

RW --Macro.png
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.

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.
In dieser wird ebenfalls die Datenabfrage

SELECT "--macro"

definiert.
RW --Macro beisp.png