Wie man einen Beleg aus einem Delphi-Programm ausstellt

2020-08-20

Die Programmiersprache Delphi bzw. Turbo Pascal ist für viele Entwickler zum Ausgangspunkt in die Programmierwelt geworden. Dank der einfachen und klaren Syntax und der Möglichkeit, in einem prozeduralen Stil zu schreiben, erwies sie sich als sehr leicht zu erlernen. Viele würden sie mit Visual Basic vergleichen, aber auf dem Höhepunkt ihrer Popularität bot Delphi dank ihrer Komponenten für die Arbeit mit Datenbanken und ihrer eigenen Interbase-Datenbank viel mehr Funktionen.

Obwohl C# und die .Net-Plattform Delphi und die VCL-Bibliothek verdrängt haben, gibt es weltweit immer noch eine große Anzahl von C#-Anhängern. Selbst alte Anwendungen, die in dieser Sprache geschrieben wurden, lassen sich mit modernen Bibliotheken, wie dem FastReport 6 VCL Berichtsgenerator, leicht "aufmotzen". Automatisierte Buchhaltungssysteme benötigen zum Beispiel Berichte.

Ein automatisiertes Verkaufserfassungssystem sollte die Erstellung von Zahlungsbelegen, wie z. B. Kaufbelegen ermöglichen. In diesem Artikel wird gezeigt, wie man einen Kaufbeleg aus einer Delphi-Anwendung heraus erstellen und drucken kann. Der FastReport VCL Berichtsgenerator wird verwendet, um den Beleg selbst zu erstellen, und eine Benutzeranwendung wird verwendet, um ihn zu drucken. Zusätzlich zum Drucken können Sie den Beleg auch einfach im Berichtsfenster anzeigen lassen. Von dort aus können Sie den Beleg entweder ausdrucken, in einem der gängigen Dokumentformate speichern, als E-Mail versenden oder in einen Cloud-Speicher hochladen.

Um einen Kaufbeleg zu erstellen, benötigen wir Informationen über: die Bestellung, den Kunden, den Kundenberater und die Bestellzusammenfassung.

In diesem Beispiel verwenden wir die demo.mdb Datenbank des FastReport VCL Berichtsgenerators.

Zur Erstellung der Anwendung verwenden wir die Delphi 7 Entwicklungsumgebung. Fügen wir dem Formular zwei Schaltflächen hinzu: eine, um den Berichtsdesigner zu starten, eine weitere, um den fertigen Bericht anzuzeigen oder zu drucken. Fügen Sie auch die OpenDialog-Komponente dem Formular hinzu - damit können wir die gewünschte Berichtsdatei zum Ausführen auswählen.

Lassen Sie uns nun mit der Erstellung der Datenquelle für den Bericht, und zwar eines Kaufbelegs, fortfahren. Wie oben erwähnt, verwenden wir die demo.mdb-Datenbank, und zwar die Tabellen: Orders, Customers, Items, Parts und Employee. Um eine Verbindung zur Datenbank herzustellen, verwenden wir die ADOConnection-Komponente, und um Daten aus den einzelnen Tabellen abzurufen, verwenden wir die ADOTable- Komponente. Die Tabelle Orders ist mit den Tabellen Customers, Items und Employees verknüpft. Daher müssen wir diese Verbindungen einrichten. Dazu fügen Sie für jede ADOTable eine DataSource-Komponente hinzu, und um alle diese Tabellen im Bericht verfügbar zu machen, fügen Sie für jede Tabelle die frxBDDataSet-Komponente hinzu.

Um mit einer Tabelle zu arbeiten, sollten wir also drei Komponenten haben: ADOTable, DataSource, frxDBDataSet.

 Data controls needed for the report

Erstellen Sie in ADOConnection eine Verbindung zur demo.mdb-Datenbank aus dem FastReport VCL.

Die Einstellungen für diese Komponenten für jede der fünf Tabellen sind unten aufgeführt.

Tabelle Orders:

1. Eigenschaften für ADOTable festlegen:

− Connection – ADOConnection1;

− Name – Orders;

− TableName – orders.

2. Eigenschaft für DataSource einstellen:

− DataSet – Orders.

3. Eigenschaften für frxDBDataSet einstellen:

− DataSet – Orders;

− UserName – Orders.

Tabelle Customer:

1. Eigenschaften für ADOTable festlegen:

− Connection – ADOConnection1;

− Name – Customer;

− IndexFieldnames – CustNo;

− MasterSource – DataSource1;

− MasterFields - CustNo;

− TableName – customer.

2. Eigenschaft für DataSource einstellen:

− DataSet – Customer.

3. Eigenschaften für frxDBDataSet einstellen:

− DataSet – Customer;

− UserName – Customer.

Tabelle Items:

1. Eigenschaften für ADOTable festlegen:

− Connection – ADOConnection1;

− Name – Items;

− IndexFieldnames – OrderNo;

− MasterSource – DataSource1;

− MasterFields - OrderNo;

− TableName – items.

2. Eigenschaft für DataSource einstellen:

− DataSet – Items.

3. Eigenschaften für frxDBDataSet einstellen:

− DataSet – items;

− UserName – Items.

Tabellen Parts:

1. Eigenschaften für ADOTable festlegen:

− Connection – ADOConnection1;

− Name – Parts;

− TableName – parts.

2. Eigenschaft für DataSource einstellen:

− DataSet – Parts.

3. Eigenschaften für frxDBDataSet einstellen:

− DataSet – Parts;

− UserName – Parts.

Tabelle Employee:

1. Eigenschaften für ADOTable festlegen:

− Connection – ADOConnection1;

− Name – Employee;

− IndexFieldnames – EmpNo;

− MasterSource – DataSource1;

− MasterFields - EmpNo;

− TableName – employee.

2. Eigenschaft für DataSource einstellen:

− DataSet – Employee.

3. Eigenschaften für frxDBDataSet einstellen:

− DataSet – Employee;

− UserName – Employee.

Die Tabellen Customer, Items und Emplyee sind mit DataSource1 (d. h. mit der ersten Tabelle Orders) verknüpft. Sie sind mit einem Schlüssel so verknüpft, dass für einen Datensatz in Orders jeweilige Datensätze aus diesen Tabellen ausgewählt werden.

Die Tabelle Items enthält Informationen über die Artikel in einer Bestellung. Sie enthält jedoch keine spezifischen Produktdaten, sondern eine Verknüpfung mit der Tabelle Parts. Fügen wir zwei Felder aus der Tabelle Parts – Price und Description - der ADOTable für die Tabelle Items hinzu. So brauchen wir die Tabelle Parts in Zukunft nicht mehr zu verwenden.

Um Felder zur Items-Tabelle hinzuzufügen, doppelklicken Sie auf das ADOTable-Objekt und es erscheint ein Fenster mit den Tabellenfeldern. Zu Beginn ist es leer, aber Sie können die Felder über das Kontextmenü laden, indem Sie Add fields…auswählen:

 Items table with two added fields

Die Felder Price und Description werden aus der Tabelle Parts übernommen.

Wählen Sie New field… im Kontextmenü und fügen Sie das Feld Price hinzu:

 Settings to add Price field

Fügen Sie auf die gleiche Weise eine Produktbeschreibung – das Feld Description – hinzu:

 Settings to add Description field

Nachdem wir nun die Datenquelle erstellt und die Verknüpfungen zwischen den Tabellen konfiguriert haben, fügen wir OnClick-Ereignishandler für unsere Schaltflächen des Formulars hinzu. Wie Sie sich vielleicht erinnern, startet die erste Schaltfläche den Berichtsdesigner und die zweite Schaltfläche zeigt den Bericht an.

Vergessen Sie bitte nicht, dem Formular die frxReport-Komponente hinzuzufügen.

Fügen Sie jeweils ein OnClick-Ereignis für jede Schaltfläche hinzu. Hier ist der Ereignishandler-Code zum Anzeigen des Berichtsdesigners:

1
frxReport1.DesignReport();

Um den fertigen Bericht zu drucken, können Sie dem Formular das Dialogfeld Datei öffnen hinzufügen, um den im Designer erstellten Bericht auszuwählen. Der Code zum Drucken des Berichts sieht dann wie folgt aus:

1
2
3
4
5
6
7
8
OpenDialog1.Filter := 'FastReport VCL (*.fr3)|*.FR3';
 OpenDialog1.Execute();
 if Length(OpenDialog1.FileName)>0 then
 begin
 frxReport1.LoadFromFile(OpenDialog1.FileName);
 frxReport1.PrepareReport();
 frxReport1.Print();
end

Wenn Sie eine Vorschau des Berichts benötigen, können Sie die Funktion Drucken durch die Berichtsanzeige ersetzen:

1
 frxReport1.ShowReport();

Nun können Sie die Anwendung starten, auf die Schaltfläche Design report klicken und mit der Erstellung des Berichts fortfahren.

Wählen Sie zunächst die Daten für den Bericht aus.

 Data sources needed in the report

Die Tabelle Parts wird in diesem Bericht nicht benötigt und kann daher nicht ausgewählt werden. Fahren wir nun mit der Erstellung der Vorlage fort. In unserem Bericht gibt es zwei Datenebenen: MasterData und DetailData. In dem ersten Datenband zeigen wir Informationen über den Kunden an:

  • Name - Customer.Company;
  • Anschrift - Customer.Addr1;
  • Telefonnummer - Customer.Phone.

 und über den/die Kundenberater/-in:

  • Firmenname;
  • Kundenberater/-in – Employee.FirstName Employee.Last Name;
  • Bestellnummer – Orders.OrderNo;
  • Verkaufsdatum – Orders.SaleDate.

Dieses Band ist mit der Tabelle Orders verknüpft. Die Inhaltsinformationen der Bestellung werden in einem untergeordneten Datenband angezeigt: Produktname, Menge, Einzelpreis, Preis für bestimmte Menge.

In der Fußzeile werden Gesamt-Werte angezeigt: der gesamte Nettobetrag, Steuerprozentsatz und der Brutto-Endbetrag.

Sales receipt teplate

Die Zwischensumme Line Total, die innerhalb eines einzelnen Tabelleneintrags berechnet werden, werden durch Multiplikation der Menge und des Einzelpreises berechnet:

[<Items."Qty">*<Items."Price">]

Der Netto-Gesamtbetrag aller Waren Subtotal wird nach der folgenden Formel berechnet:

∑(Warenmenge * Einzelpreis)

[SUM(<Items."Qty">*<Items."Price">)]

Gesamtsteuerwert:

∑(Warenmenge * Einzelpreis * Steuerprozentsatz)

[SUM(<Items."Qty">*<Items."Price">)*0.05]

Brutto-Gesamtbetrag:

∑(Warenmenge * Einzelpreis)+ ∑( Warenmenge * Einzelpreis * Steuerprozentsatz)

[SUM(<Items."Qty">*<Items."Price">) + SUM(<Items."Qty">*<Items."Price">)*0.05]

Auch die Zahlungsmethode wird in der Fußzeile des Datenbands angezeigt. Es wird angenommen, dass sie beim Drucken eines Kassenbelegs manuell eingegeben wird.

Jetzt kann der Bericht angezeigt werden. Speichern Sie ihn auf der lokalen Festplatte und schließen Sie den Berichtsdesigner. Wählen Sie mit der zweiten Schaltfläche im Formular den erstellten Bericht auf der lokalen Festplatte aus und es erscheint das Druckdialogfeld oder der erstellte Bericht, wenn Sie ShowReport() im Schaltflächencode ausgewählt haben.

The report with sales receipt

Das war's. Mit wenig Aufwand können Sie nützliche Funktionen für Ihr Buchhaltungssystem implementieren. Jetzt können Sie den Bericht aus dem Anzeigefenster heraus drucken oder in einem der gängigen Dokumentformate speichern: pdf, docx, xlsx, xml, rtf und viele andere.

26. November 2024

Installing FastReport on .NET 8.0 and Creating a Simple Report

The purpose of this article is to explain step by step how to install FastReport on .NET 8.0 and how to create a simple report. Taking the reporting process from the beginning, it will show how to connect, design and view reports.
20. November 2024

Lokalisierung und Ändern von Sprachen in FastReport VCL

FastReport VCL unterstützt 40 Sprachen für die Schnittstellenlokalisierung und ermöglicht es Ihnen, die Sprache im laufenden Betrieb über Menüs oder Code ohne Neukompilierung zu ändern.
1. November 2024

Neue Funktionen des FastReport VCL Berichtseditors

Wir betrachten die neuen Funktionen des Berichtseditors: Hilfslinien, Hervorhebung von sich schneidenden Objekten, aktualisierte Berichts- und Datenbäume.
Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2024 Fast Reports Inc.