Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Mal ne "Wie macht denn Ihr das"-Frage (https://www.delphipraxis.net/194641-mal-ne-wie-macht-denn-ihr-das-frage.html)

TigerLilly 15. Dez 2017 11:49

Mal ne "Wie macht denn Ihr das"-Frage
 
Ich hab, was Reports und Ausdrucke anbelangt, bisher ReportBuilder verwendet bzw EkRTF-Engine und Word. Vor allem das zweite hab ich sehr vielseitig und elegant gefunden, weil der Kunde damit ein Ergebnis hat, das er in Word gleich weiter verarbeiten kann.

Jetzt hab ich aber immer wieder Kunden, die ihre eigenen Schriften haben wollen, die ein eigenes Basis-Layout ihrer Seite haben wollen, Grafik da und Pünktchen dort.

Eigentlich wäre RTF da recht gut geeignet, aber das Zusammenbauen von RTF Teilen aus unterschiedlichen Quellen klappt nicht so gut. HTML und CSS wär am leichtesten handzuhaben, weil Trennung von Inhalt und Darstellung, aber das ist nicht seitenorientiert (Kopf/Fusszeile, Mehrseitigkeit). Ich bräuchte irgendwas, wo der Kunde leicht sein Basislayout (=Hintergrund) erstellt, grundsätzliche Formateigenschaften festlegt und meine Software füllt dann die Daten nur mehr ein.

Fastreport kenne ich gar nicht + zB Mustache oder andere Template basierte Lösungen auch nicht. Von TMS gibt es eine XLS basierte Reporting Lösung, aber XLS zum Reporting macht mir irgendwie Kopfweh.

Wenn man die Option "das geht nicht" und "das machen wir nicht" mal weglässt, wie macht ihr so was?

Danke für einen Gedankenaustausch! :-)

Lemmy 15. Dez 2017 12:04

AW: Mal ne "Wie macht denn Ihr das"-Frage
 
Hallo,

Fastreport bietet in gewissem Maße auch eine Trennung von Formatierung und Inhalt an - jedem Element kannst Du einen Style zuordnen, den du zur Reportdatei dazuladen kannst. Hier kann dann der Kunde individuelle Anpassungen vornehmen (eigener Font, Größe.---)

Das ganze ist natürlich Grenzen gesetzt über die grafische Ausgestaltung (was soll wo gedruckt werden, was hat wie viel Platz).

Wenn es dann noch um die Randgestaltung geht (z.B. Briefkopf) wäre z.B. denkbar, dass der Kunde über den Designer große und umfangreiche Anpassungsmöglichkeiten bekommt (die er aber vermutlich gar nicht selbst umgesetzt bekommt, aber das kann man ja auch kostenpflichtig anbieten), und den eigentlichen Inhalt dann per Subreport in die Vorlage rein bringt. Damit hat man sehr große Gestaltungsmöglichkeiten.


Grüße

Sigi55 15. Dez 2017 12:21

AW: Mal ne "Wie macht denn Ihr das"-Frage
 
Hallo,

ich arbeite seit Jahren mit List & Label von combit.

https://www.combit.net

Gruß

Sigi

Daniel 15. Dez 2017 12:23

AW: Mal ne "Wie macht denn Ihr das"-Frage
 
@TigerLilly: Bitte gib Deinem Beitrag einen aussagekräftigen Titel. Bei etwa der Hälfte aller Fragen geht es darum zu erfahren, wie andere ein bestimmtes Problem lösen würden.
Danke. :thumb:

Delphi.Narium 15. Dez 2017 12:50

AW: Mal ne "Wie macht denn Ihr das"-Frage
 
Wenn man bei Word bleibt, hat man die Möglichkeit Formulare zu nutzen.

Der Kunde liefert eine Vorlage seines "Geschäftsbriefes" (oder was man auch immer haben möchte).

In diese Vorlage werden an den Stellen, wo programmatisch was eingefügt werden soll, Formularefelder platziert. Die kann man dann befüllen.
Delphi-Quellcode:
// FWordDoc sei ein Worddokument, auf das man in Delphi Zugriff hat.
Var
  ovAnrede : OleVariant;
  sAnrede : String;
...
begin
  ovAnrede := 'Anrede';
...
  // Irgendwo aus 'ner Datenbank oder dem Formular oder ...
  sAnrede := 'Sehr geehrte Damen und Herren,';
...
  FWordDoc.FormFields.Item(ovAnrede).Result := sAnrede;
...
In der Wordvorlage muss es nun ein Formularfeld mit dem Namen Anrede geben, dieses wird dann mit der Zeichenfolge 'Sehr geehrte Damen und Herren,' befüllt.

Dann hat man in Word die Möglichkeit, Textmarken zu vergeben. Die sind geeignet, wenn an einer Stelle "beliebiger Inhalt" eingefügt werden soll, z. B. Tabellen, Grafiken, irgendwelche textliche "Prosa" ...

Zu 'ner Textmarke kommt man z. B. mit
Delphi-Quellcode:
procedure GeheZuTextmarke(aTextmarke : String);
var
  vParam       : OleVariant;
begin
  vParam := aTextmarke;
  FWordDoc.Bookmarks.Item(vParam).Select;
end;
Text bekommt man an die so "gewählte Stelle" mit
Delphi-Quellcode:
procedure SchreibeText(aText : String);
begin
  FWordDoc.Selection.TypeText(aText);
end;
Den Aufruf dieser Methoden kann man dann beliebig wiederholen. Der Text wird jeweils an der Cursorposition im Worddokument eingefügt. Natürlich könnte man dort jetzt auch 'ne Tabelle aus 'ner Datenbanbkabfrage einfügen.

Will man die Formatierung des Textes ändern, ginge das in etwa so:
Delphi-Quellcode:
procedure FormatSetzen(aFormat : String);
var
  vParam      : OleVariant;
begin
  vParam := aFormat;
  WordApplication.Selection.Set_Style(vParam);
end;
aFormat muss halt nur der Name einer Formatvorlage sein, die aus Wordsicht bei der Arbeit in der gewählten Dokumentenvorlage verfügbar ist.

Eigentlich hat man da unendliche Freiheiten aus Programmsicht und auch der Kunde hat, wenn er sich an ein paar Vorgaben bezüglich der Textmarken, Formularfelder ... hält, annähernd "Narrenfreiheit".

Auf diese Weise hab' ich schonmal recht individuelle Rezeptbücher aus Datenbankinhalten erstellt. Select auf die Rezepte, die man haben möchte. Vorlage auswählen und Formularfelder für den Buchtitel befüllen. Dann zur Textmarke für das erste Rezept gehen. Rezeptnamen ausgeben. Bild mit fertig angerichtetem Rezept ausgeben. Tabelle mit den Rezeptzutaten. Und dann als Liste die einzelnen Verarbeitungsschritt. Anschließend noch 'ne Nährwerttabelle, ein Seitenwechsel und das nächste Rezept.

Wenn man für den Rezeptnamen eine Überschriftsformatierung wählt, kann man auch von Word automatisch ein Inhaltsverzeichnis generieren lassen.

Funktioniert mit Strickanleitungen, Kurzgeschichten ... natürlich ebenso flexibel. Und selbstverständlich auch mit Geschäftsbriefen, Reports ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz