Rechnungslegung aus einer Verkaufsseite II

Rechnungslegung Teil II

Im Teil I dieser Serie wurde über die allgemeinen Forderungen an die Rechnungslegung berichtet. Es wurde u.a. die Fülle von Daten dargestellt, die für eine ordnungsmäßige Rechnung auf der Datenbank der Verkaufsseite vorliegen muss, um eine Rechnung zu erstellen.

In diesem Artikel geht es nun mehr um die Technik, wie man diese Daten verwendet.

Szenario

Um der Aufgabe, die sich hier stellt, zu folgen, stellen Sie sich folgendes Szenario vor:

Sie verkaufen ein Produkt (ein eBook) an Ihre Kunden. Diese Kunden können sowohl Privat- als auch Firmenkunden sein. Unter einem Firmenkunden soll hier der Mitarbeiter eines Unternehmens verstanden werden, der sich aus dienstlichen Gründen für das Produkt interessiert und das Produkt, letztlich von der Firma gekauft wird. Alle anderen Kunden, die also Privatkunden oder auch Firmenmitarbeiter sind, das Buch aber direkt kaufen, sollen hier als Privatkunden subsumiert werden. Das Produkt hat einen Preis und liegt auf einem Server als zip-Datei gespeichert. Aufgabe sei, dieses Buch mittels einer Verkaufspage anzubieten. Dafür klickt der Privatkunde auf einen Verkaufsbutton. Es erscheint ein Eingabeformular, indem der Kunde seine Adressdaten etc. einträgt. Dem Privatkunden soll eine Auswahl von Zahlmöglichkeiten angeboten werden, die von PayPal über sofortüberweisung.de bis zur einfachen Überweisung geht. Beim Firmenkunden wird ebenfalls ein Formular angeboten, dass aber auch Felder wie „Ihre Bestellnummer“ enthält. Zusätzlich wird eine E-Mail-Verbindung für die Firmenkunden angeboten, wo die „Einkaufsabteilung“ eine E-Mail mit einer Bestellung senden kann.

Die eingegebenen Daten werden nun auf eine Datenbank gespeichert, mit denen dann eine Rechnung erzeugt und an den Kunden geschickt werden kann. Nicht betrachtet werden sollen Dinge wie Abweisung von Trashmails, Vorkasse und nicht Vorkasse!

Ein Mittel zur Rechnungserstellung

Um an den Kunden eine Rechnung zu erstellen, könnte man dem Kunden eine nativ erzeugte E-Mail senden, die alle Daten aufführt. Dadurch müsste aber die E-Mail-Adresse des Kunden auch immer den richtigen Ansprechpartner treffen. Man müsste also neben dem Kunden auch noch die E-Mail-Adresse der Einkaufsabteilung mit erfassen. Man könnte durch Versendung einer HTML-Mail diese Mail auch schön aufbereiten und so beim Kunden Eindruck machen. Diese E-Mail ist sicherlich eine Möglichkeit und wird auch von vielen Firmen derart getätigt.

Schöner ist allerdings aus den Daten für die Rechnung ein DIN-A4-Blatt auf dem Drucker zu erzeugen, das die Rechnung darstellt. Als Format eignet sich hier sowohl Word- als auch PDF-Format. Eine reine Textdatei ist zwar möglich, zeugt allerdings nicht von Qualität! Beim senden einer Word-Datei ist es möglich innerhalb der .doc-Datei auf Kundenseite zu manipulieren, deshalb scheidet – abgesehen vom Dokumentschutz der Worddatei – aus! Besser und auf allen Rechnern lesbar ist hier das PDF-Format, das man nicht ändern kann.

Sie schicken also eine PDF-Datei als Mailanhang an Ihren Kunden. Bleibt die Frage, wie eine solche PDF-Datei erstellen?

[So, und nun wird es ein wenig kompliziert in diesem Artikel! Denn um zu zeigen, wie man eine PDF-Datei erstellt, gibt es zwar ein Werkzeug, doch benötigt man dazu die PHP-Programmierung sowie die Darstellung der Datenbankabfragemöglichkeit mit PHP! Einige Begrifflichkeiten wurden für PHP hier im Blog ja schon besprochen (siehe hier), aber es sind noch nicht alle Möglichkeiten eingeführt, deshalb könnte es sein, dass der „Noch-Nicht-PHP’ler“ hier überfordert wird. Ich will aber all diese Besonderheiten noch in die Artikelreihe PHP einführen, so dass irgendwann eine vollständige Beschreibung der hier verwendeten Programmierung sich ergeben wird]

Es gibt eine PHP-Klasse, mit deren Hilfe man eine vollständige PHP-Datei variabel erstellen und mit Daten füllen kann. Sie können sich diese Klasse als Freeware unter http://fpdf.de/ mit vielen Addons herunterladen und in Ihre Verkaufsseite einbauen.

fpdf

fpdf besteht aus einigen Dateien, die Sie als include in ein PHP-Programm einbinden, können und sich durch Aufruf der einzelnen angebotenen Funktionen eine PDF-Seite erstellen können. Am Besten erstellen Sie sich ein neues Verzeichnis z.B. /common/includes/classes/fpdf wohin Sie die heruntergeladenen php-Dateien. hinspeichern.

Nun brauchen Sie noch eine php-function, die das PDF erstellt. Diese Funktion braucht natürlich Input-Daten. Diese sind all die Daten, die Sie in der Rechnung benötigen:

  1. Ihre Adressdaten z.B. $m_MyReData[]
  2. Ihre Bankdaten z.B. $m_MyBankData[]
  3. Ihre Artikeldaten z.B. $m_ProductData[]
  4. Die Adressdaten des Käufers, Adresse, ggf. Bestellnummer z.B. $m_VendorData[]
  5. Ein Dateiname, wohin die PDF erzeugt wird z.B. $s_PDF_InvoiceFile
  6. Eine eindeutige Rechnungsnummer z.B. $s_ReNum

Wenn Sie diese PDF-Erstellungs-Routine function create_invoice nennen, so hätten Sie die obigen Array als Parameter an die Funktion zu übergeben. Innerhalb der create_invoice würden Sie nun noch Ihr Firmenlogo als Bilddatei einbinden, sowie die gesamten Formatierungen der PDF-Seite erstellen. Am Ende würde die Funktion die fertige PDF-Datei aus dem Speicher in eine Datei speichern, die außerhalb Ihrer Webpage liegt z.B. My_invoices/

fpdf ist relativ modular erstellt, so dass sie mit wenigen Definitionen eine Seite Ihrer Rechnung vorformatieren können. Dazu müssen Sie eine neue PHP-Klasse PDF_Invoice in z.B. der Datei „/common/includes/classes/pdf_invoice.php“ erzeugen, die Ihnen das Grobgerüst der Seite bestückt.

class PDF_Invoice extends FPDF {
  var $tpl_mylogo;
  var $tpl_myfirma_kurz;
  var $tpl_myfirma_lang;
  …..
  …..
  var $tpl_mybankname;
  …..
  …..
}

In dieser Klasse die Sie sich als veränderte Kopie aus der gelieferten Klasse PDF.php erzeugen können, werden alle konstanten Daten der Rechnungsdatei definiert. Dies beginnt bei der Logo-Datei bis hin zu Ihrem Banknamen den Kontonummern etc. Im Prinzip werden hier nur Variablen definiert. Da dann später diese Klasse in unserer function erzeugt wird, haben Sie sogleich das Grundgerüst Ihrer Rechnung.

Innerhalb der function create_invoice(….) wird dann mit der Anweisung

  $PDFDokument = new PDF_Invoice(„P“, „mm“, „A4“);
  $PDFDokument->typ = „RE“;
  $PDFDokument->tpl_myname = $m_MyReData[„tpl_myname“];

eine sog. Instanz einer Klasse PDF_Invoice als DIN-A4-Blatt erzeugt und mit Daten bestückt.
Es würde hier zu weit führen, die einzelnen Aufrufe von fpdf einzeln zu erklären. Diese können sie in der Dokumentation von fpdf herunterladen. Die Instanz der Klasse legt auch mit den Parametern der funktion PDF_Invoice(..) die globalen Messinstrumente und Maßeinheiten des PDF’s fest.
So ist der Parameter „P“ für die Orientierung der Seite verantwortlich hier mit „P“ ein Hochformat, „L“ wäre ein Querformat. Der 2.Parameter legt die Maßeinheit für die Positionierungen als „mm“ = Millimeter, „pt“ = Punkte, „cm“ = Zentimeter, „in“ = Inches fest. Als 3.Parameter werden die Blattformate A3, A4, A5, Letter, Legal erkannt.

Positionierungen können entweder mit SETXY(), oder direkt in der Cell()-Anweisung gemacht werden, wo dann auch Texte auf’s Papier gebracht werden. Die „Sprache“ von fpdf ist nicht unbedingt leicht, und man benötigt einige Versuche, um so eine Seite vollständig aufzubauen. Denn alles was hier erzeugt wird muss über Funktionsaufrufe genau angegeben werden. Dabei sind Überlagerungen durchaus möglich, so dass Ihr 1. Rechnungsformular ziemlich unsauber aussehen kann. [Deshalb kann ich wieder nur zum eigenen XAMPP-Server raten, sonst werden Sie nur noch die einzelnen Dateien hochladen, und kommen zu keinen Überlegungen mehr 🙂 ]

Mit allen Anweisungen definieren Sie Ihr Blatt. Wenn Sie damit fertig sind, können Sie mit der Anweisung

$PDFDokument->Output($s_PDF_InvoiceFile);

eine Datei erzeugen, wo die PDF-Datei hingeschrieben werden kann. Dann ist das Programm auch fertig.

Hier noch ein kleiner Ausschnitt aus einer Rechnungsdatei: Das Schreiben der Betreffzeile

  $zz = 105;
   $PDFDokument->SetXY(20, $zz);
   $PDFDokument->SetFont(‚Arial‘,’B‘,11);
   $PDFDokument->Cell(20,5,$A_Betreff[„betreff1“],’0′,2,’L‘);
   $PDFDokument->Cell(20,5,$A_Betreff[„betreff2“],’0′,2,’L‘);
  $zz += 15;

Weitere Informationen und Erklärungen werden dann demnächst kommen.

Viele Grüße
Bernd Klüppelberg

Bisher gibt es keinen Kommentar. Schreiben Sie einen Kommentar!

Schreibe einen Kommentar