ReplaceText() - Mal funktionier's, mal nicht ...

Alles, was den Reportdesigner und Drucken betrifft. Fehlermeldungen, Fragen, Reports

Moderatoren: Raffenberg, A. Schüller, Pfotenhauer

Antworten
c.buchner
Beiträge: 94
Registriert: Donnerstag 24. Januar 2019, 12:35
Schulform: Berufskolleg

ReplaceText() - Mal funktionier's, mal nicht ...

Beitrag von c.buchner »

Hallo,
schon mal von dem folgenden Phänomen gehört?

In einem Report gibt es das Richtext-Feld "rtGeborenAm". In diesem Feld ist standardmäßig ein Satz inkl. der Variablen $KonfDatum$ eingefügt.
Durch folgenden Befehl wird die Variable durch Text erstetzt:
rtGeborenAm.RichText := ReplaceText(rtGeborenAm.RichText, '$KonfDatum$', Lernabschnitte['Konferenzdatum']);

In einem zweiten Feld "rTxtGeborenAm" mit gleichem Inhalt ersetze ich die gleiche Variable mit folgendem Befehl:
rTxtGeborenAm.RichText := ReplaceText(rTxtGeborenAm.RichText, '$KonfDatum$', Lernabschnitte['Konferenzdatum']);

Jetzt will ich für mehrere Schüler drucken.
Phänomen bei Feld1: beim ersten Schüler wird die Variable durch das Konferenzdatum ersetzt (wie gewünscht). Bei den weiteren Schülern bleibt trotz unterschiedlichen Konferenzdatum der Wert gleich.
Feld2: da funktioniert es.

Schaue ich mir während der Vorschau den Inhalt der beiden Richtext-Felder an, so steht in Feld1 vor Ausdruck Schüler1 auch "$KonfDatum$" drin, vor Schüler2 aber das Konferenzdatum von Schüler1. Dann kann $KonfDatum$ ja auch nicht ersetzt werden - fehlt ja im Feldinhalt.
Bei Feld2 steht vor dem Ausdruck immer "$KonfDatum$ drin. Also kann es bei jedem Schüler ersetzt werden.

Beide Felder liegen im Detailbereich. Beide haben die gleiche Programmierung (eine Befehlszeile im OnPrint).

Im Anhang liegt der Report. Es wäre nett, falls sich das jemand mal ansehen könnte.
Dateianhänge
00-Abgangszeugnis, Ver.1.5.7.rtm
(225.74 KiB) 61-mal heruntergeladen
Viele Grüße

Christian Buchner
Berufskolleg Wirtschaft u. Verwaltung des Kreises Siegen
christian.buchner@berufskolleg-wirtschaft.de
Benutzeravatar
Raffenberg
Beiträge: 2564
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Re: ReplaceText() - Mal funktionier's, mal nicht ...

Beitrag von Raffenberg »

Hallo. Auf die Schnelle,
wenn Sie beim ersten Schüler mit ReplaceText einen Text in einem RichtextFeld ändern, so steht beim zweiten Schüler der geänderte Text auch drin. Da beim ersten Schüler der Text schon ersetzt wurde, kann beim zweiten also kein zu ersetzender Text mehr gefunden werden.

Sie können so vorgehen. Speichern sie direkt beim Aufruf den Richtext in einer Variable global zwischen. Wenden Sie nun bei der Zuweisung die ReplaceText Anweisung immer auf diese Variable an.

Code: Alles auswählen

Var (Global im Hauptbericht)
OriginalRtfText: TppRichtext;

OnCreate (im Hauptbericht)
OriginalRtfText:= TppRichtext.Create (Report);
OriginalRtfText.Richtext := rtGeborenAm.RichText;

OnPrint
rtGeborenAm.RichText := ReplaceText(OriginalRtfText.RichText, '$KonfDatum$', Lernabschnitte['Konferenzdatum']);
Zuletzt geändert von Raffenberg am Dienstag 21. Mai 2019, 21:11, insgesamt 1-mal geändert.
Mit freundlichen Grüßen
Jens Raffenberg
c.buchner
Beiträge: 94
Registriert: Donnerstag 24. Januar 2019, 12:35
Schulform: Berufskolleg

Re: ReplaceText() - Mal funktionier's, mal nicht ...

Beitrag von c.buchner »

Hallo Herr Raffenberg,
vielen Dank für die schnelle Antwort.
Raffenberg hat geschrieben: Montag 20. Mai 2019, 11:37 Auf die Schnelle,
wenn Sie beim ersten Schüler mit ReplaceText einen Text in einem RichtextFeld ändern, so steht beim zweiten Schüler der geänderte Text auch drin. Da beim ersten Schüler der Text schon ersetzt wurde, kann beim zweiten also kein zu ersetzender Text mehr gefunden werden.
Sie haben völlig Recht. Allerdings erklärt das nicht das (vermeintlich richtige) Verhalten bei Feld2. Aber ich lasse die Sache auf sich beruhen und wende mich der "richtigen" Lösung zu.
Viele Grüße
Chrsitian Buchner
Viele Grüße

Christian Buchner
Berufskolleg Wirtschaft u. Verwaltung des Kreises Siegen
christian.buchner@berufskolleg-wirtschaft.de
Benutzeravatar
Raffenberg
Beiträge: 2564
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Re: ReplaceText() - Mal funktionier's, mal nicht ...

Beitrag von Raffenberg »

Hallo Herr Buchner,
Sie haben das eine Textfeld als Serienbrief-Textfeld deklariert. Sie erkennen dies an der Eigenschaft "MailMerge" (aktivierter Haken). Diese Eigenschaft wird auch im RichText-Bearbeitungsfenster oben rechts angeboten. Mit aktivem Haken wird das Textfeld erst zur Laufzeit berechnet, ohne dass sein Inhalt überschrieben wird, da die Serienbrieffunktion ebenfalls mit Platzhaltern arbeitet. Mit diesem Trick ist der Umweg über eine Globale-Variable nicht notwendig. Das war mir bis heute auch nicht bewusst, leuchtet aber ein.
Mit freundlichen Grüßen
Jens Raffenberg
Antworten