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:
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
... 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.