Seite 1 von 1

Frax: optionale Ausgabe von Daten

Verfasst: Mi, 18. Feb 2009 18:09
von peternmb
Hallo, ich beschäftige mich gerade mit der Trial von Frax und komme nicht so richtig weiter:

der Anwender kann vor der Ausgabe über diverse Checkboxen festlegen, welche Daten im Report angezeigt werden sollen.
Die Auswertung dieser Checkboxen übergebe ich an Frax - das funktioniert auch noch problemlos.

Code: Alles auswählen

iif (check10:getData(),FrPrn:AddVariable("Voreinstellungen", "Topp_zeigen",1), ;
                       FrPrn:AddVariable("Voreinstellungen", "Topp_zeigen",0) )
iif (check11:getData(),FrPrn:AddVariable("Voreinstellungen", "Flopp_zeigen",1), ;
                       FrPrn:AddVariable("Voreinstellungen", "Flopp_zeigen",0) )
jetzt versuch ich - wie ich es weiter unten in einem ähnlichen Beitrag gefunden habe - nur wenn die Checkbox markiert ist, die entsprechenden Daten anzeigen zu lassen. Hierzu füge ich im Report bei dem entsprechenden Datenbankfeld (TOPP) unter "Memo" -> "Highlight" -> "Bedingung" folgendes ein:

Code: Alles auswählen

IIF("Topp_zeigen">=1,<RANGLIST."TOPP">,0)
auch so geht es nicht:

Code: Alles auswählen

IIF(Voreinstellungen."Topp_zeigen">=1,<RANGLIST."TOPP">,0)
Leider funktioniert das so nicht, ich erhalte nur einen Fehler im Ausdruck: "Identifier expected".

Re: Frax: optionale Ausgabe von Daten

Verfasst: Do, 19. Feb 2009 8:15
von stevie
also wir machen das so:

Code: Alles auswählen

oFrPrn:AddVariable("Druckinhalt","lMitDruck",aCheck[1])
aCheck[1] beinhaltet den Wert der Checkbox, also meinetwegen .T.
Jetzt habe ich in Frax das Event "ONBeforePrint" mit einem einfachen Pascalscript belegt.

Code: Alles auswählen

procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
    if not <lMitDruck> then
    begin                
             Memo5.visible := false;
             Text4.visible := false                                                             
    end;              
end;

begin

end.
In dem Zustand würde Memo5 und Text4 (Namen meiner Anzeigeobjekte) nur dann angezeigt und gedruckt werden, wenn aCheck[1] ".T." ist, sonst würde es ausgeblendet werden.

Re: Frax: optionale Ausgabe von Daten

Verfasst: Do, 19. Feb 2009 10:58
von peternmb
"ONBeforePrint" habe ich bei dem Datenbankfeld TOPP jetzt so belegt:

Code: Alles auswählen

procedure RANGLISTTOPPOnBeforePrint(Sender: TfrxComponent);
begin
  if not <Topp_zeigen> then
     <RANGLIST."TOPP">.visible:=false
end;

begin

end.
Die Parameterübergabe funktioniert problemlos, aber ich bekomme einen Syntaxfehler:
in Zeile 4 soll ein ; fehlen (ein ; am Ende bringt auch nichts)

Leider bin ich mit Pascal-Syntax absolut nicht vertraut.

Re: Frax: optionale Ausgabe von Daten

Verfasst: Do, 19. Feb 2009 13:54
von stevie
peternmb hat geschrieben:"ONBeforePrint" habe ich bei dem Datenbankfeld TOPP jetzt so belegt:

Code: Alles auswählen

procedure RANGLISTTOPPOnBeforePrint(Sender: TfrxComponent);
begin
  if not <Topp_zeigen> then
     <RANGLIST."TOPP">.visible:=false
end;

begin

end.
Die Parameterübergabe funktioniert problemlos, aber ich bekomme einen Syntaxfehler:
in Zeile 4 soll ein ; fehlen (ein ; am Ende bringt auch nichts)

Leider bin ich mit Pascal-Syntax absolut nicht vertraut.
Zwei Möglichkeiten:
1. probiere ein begin vor Ranglist."topp" und ein end; danach zu setzen, also

Code: Alles auswählen

 if not <Topp_zeigen> then
     begin
     <RANGLIST."TOPP">.visible:=false
     end;

2. Klicke das Textfeld an und nimm statt <RANGLIST."TOPP"> den eigentlichen Namen des Feldes, also wahrscheinlich RANGLISTTOPP und das setzt du mit RANGLISTTOPP.visible auf false.
Dann sollte das gehen.

Re: Frax: optionale Ausgabe von Daten

Verfasst: Do, 19. Feb 2009 14:47
von peternmb
Hallo,

habe ich beides schon probiert - ohne Erfolg.

Falls es eine Rolle spielt:
TOPP ist ein Datenbankfeld der Datenbank RANGLIST.DBF

Ich sehe da absolut keinen Syntaxfehler - die anscheinend große Ähnlichkeit mit Delphi hat

Re: Frax: optionale Ausgabe von Daten

Verfasst: Fr, 20. Feb 2009 10:20
von stevie
also ich habe noch mal getestet und eine funktionsfähige Variante gefunden.
Benutzt habe ich das Datenset "DoDoku" aus meiner Dokument-Datenbank, Bsp.-Feld ist hier "Betreff"

Code: Alles auswählen

if not <lDoku> then
    begin                
             DODOKUBETREFF.visible:= false                                                    
    end;              

Den Namen habe ich gefunden, indem ich das Feld vorher per Drag n Drop auf das Blatt eingefügt und im Objektbrowser links den Inhalt des Feldes "Name" in den Code kopiert habe.
So funktionierts jedenfalls bei mir mit der Demo von Frax für Xbase.

Re: Frax: optionale Ausgabe von Daten

Verfasst: Fr, 20. Feb 2009 12:38
von peternmb
ja super, so funktioniert es :blob8:

... aber, wie kann ich wenn eine Spalte nicht ausgegeben wird den Rest "aufrücken" ? :?:

Die Dokumentation ist wirklich sehr spartanisch, und hilft kaum weiter.

Re: Frax: optionale Ausgabe von Daten

Verfasst: Mo, 23. Feb 2009 8:17
von stevie
Hast du unter "Report" -> "Optionen" das Häkchen bei "Zweipass"?
Du schreibst doch deine Daten in diese Masterdatenbänder, also Masterdata1 oder Subdetail1 und so weiter, oder?
Wenn du nun statt der einzelnen Felder das gesamte Band ausblenden lässt, müsste es hochrücken.
Bsp.:
Masterdata1 enthält Projektdaten und Masterdata2 Dokumente. Du möchtest nur Dokumente drucken.

Code: Alles auswählen

    if not <lDoku> then
    begin               
             MasterData1.visible := false
    end;             
Masterdata1 ist wieder der Name des Datenbandes.
Damit rutscht es bei mir automatisch hoch.

Re: Frax: optionale Ausgabe von Daten

Verfasst: Mo, 23. Feb 2009 10:56
von peternmb
Hallo,

meine Ausgabe sieht ähnlich aus, wie im Beispiel 1 ("Simple List") der FRAX-Demo.

Ich habe das Band "PageHeader" und das Band "MasterData".
Es werden in einer Art Tabelle bis zu 12 Spalten angezeigt.
Wenn ich jetz z.B. die Spalte 3 nicht anzeigen lassen möchte kann ich zwar Überschrift und Werte nicht anzeigen, aber es bleibt eine leere Spalte. Im Idealfall möchte ich einfach die Breite der Spalten, die nicht angezeigt werden z.B. auf 10 Pixel setzen. Ich finde aber nirgendwo eine Möglichkeit, die Breite der Spalten per Script zu beeinflussen.

Code: Alles auswählen

procedure RANGLISTMAXOnBeforePrint(Sender: TfrxComponent);
begin
  if not <Topp_zeigen> then
     begin
     RANGLISTMAX.visible:= false;      // Spaltenkopf ausblenden -> funktioniert
     RANGLISTMAX1.visible:= false      // Spalteninhalt ausblenden -> funktioniert
     RANGLISTMAX.width:= 10            // funktioniert so leider nicht
     RANGLISTMAX1.width:= 10           // funktioniert so leider nicht
     end;
end;
Ich habe auch schon in diversen Pascal-Foren gesucht, aber nichts verwertbares gefunden

Re: Frax: optionale Ausgabe von Daten

Verfasst: Mo, 23. Feb 2009 12:42
von stevie
peternmb hat geschrieben:Hallo,

meine Ausgabe sieht ähnlich aus, wie im Beispiel 1 ("Simple List") der FRAX-Demo.

Ich habe das Band "PageHeader" und das Band "MasterData".
Es werden in einer Art Tabelle bis zu 12 Spalten angezeigt.
Wenn ich jetz z.B. die Spalte 3 nicht anzeigen lassen möchte kann ich zwar Überschrift und Werte nicht anzeigen, aber es bleibt eine leere Spalte. Im Idealfall möchte ich einfach die Breite der Spalten, die nicht angezeigt werden z.B. auf 10 Pixel setzen. Ich finde aber nirgendwo eine Möglichkeit, die Breite der Spalten per Script zu beeinflussen.

Code: Alles auswählen

procedure RANGLISTMAXOnBeforePrint(Sender: TfrxComponent);
begin
  if not <Topp_zeigen> then
     begin
     RANGLISTMAX.visible:= false;      // Spaltenkopf ausblenden -> funktioniert
     RANGLISTMAX1.visible:= false      // Spalteninhalt ausblenden -> funktioniert
     RANGLISTMAX.width:= 10            // funktioniert so leider nicht
     RANGLISTMAX1.width:= 10           // funktioniert so leider nicht
     end;
end;
Ich habe auch schon in diversen Pascal-Foren gesucht, aber nichts verwertbares gefunden
nimm für Spaltenüberschriften lieber Columnheader, ob das anders ist, oder nicht, weiß ich nicht, aber da dies ein Feld für Spaltenüberschriften ist, passt das vlt. besser.
Da wird dir Pascal auch wenig helfen. ".width:=10" funktioniert schon, nur dass die anderen Spalten nicht automatisch aufrücken.
Aber wie die aufrücken sollen, kann ich nicht sagen.
Tipp: Die Spalten müssen nicht so breit wie nötig sein, bei fast jeden Elementen gibt es im Kontextmenü "Autowidth" für die automatische Anpassung der Spaltenbreiten, falls der Text länger als die Spalte ist.