{"id":1240,"date":"2016-01-08T06:14:52","date_gmt":"2016-01-07T21:14:52","guid":{"rendered":"http:\/\/www.weschkalnies.de\/blog\/?p=1240"},"modified":"2026-03-25T02:52:39","modified_gmt":"2026-03-24T17:52:39","slug":"rechnungsverwaltung-fuer-selbststaendige","status":"publish","type":"post","link":"https:\/\/www.weschkalnies.de\/blog\/rechnungsverwaltung-fuer-selbststaendige\/","title":{"rendered":"Rechnungsverwaltung f\u00fcr Selbstst\u00e4ndige"},"content":{"rendered":"<p>Jahrelang habe ich Faktura + Auftrag von Lexware als Rechnungssoftware eingesetzt. Im Gro\u00dfen und Ganzen war ich, abgesehen von der Update-Politik und dem nicht offenem Datenformat, auch ganz zufrieden. Ich hatte allerdings wenig Lust f\u00fcr ein neues Frontend jedes Jahr ein Update kaufen zu m\u00fcssen, zumal ich f\u00fcr meine Auftragsverwaltung nur die Grundfunktionen nutzte. Nachdem ich vor Kurzem von Windows auf Linux umgestiegen bin, wurde es Zeit sich etwas Neues zu \u00fcberlegen. Also habe ich mich mal umgeschaut. Es gibt eine Reihe von brauchbaren online Rechnungsverwaltungen auf dem Markt, mein Problem damit ist nur, dass ich Kunden und Rechnungsdaten nicht online bei Anbietern speichern m\u00f6chte.<br \/>\n<!--more--><\/p>\n<p>Also *hands on* &#8211; in 2 1\/2 Wochen habe ich eine einfache Rechnungsverwaltung mit Webtechnologien geschrieben. Es gab keine gro\u00dfe Vorabplanung, ich wusste am Anfang nur, welche Funktionen ich ben\u00f6tige und habe bei der Entwicklung die ein oder andere Library zum Selbstzweck ausprobiert, die Anwendung einfach strukturiert und *frontend first* entwickelt.<\/p>\n<p>Herausgefallen ist Version 0.0.8, die ich schon im Produktiveinsatz verwende.<\/p>\n<h2>Voraussetzungen&#038;Eingesetzte Techniken<\/h2>\n<p>Lokaler Webserver mit PHP 5.3+<br \/>\nBibliotheken\/Frameworks: JQuery, PURE CSS, perfect-scrollbar, jquery-ui, font-awesome, hover-css, jquery.redirect, fpdf, animatesModal.js<\/p>\n<h2>Frontend<\/h2>\n<h3>Kundenverwaltung und Auftragsverwaltung im \u00dcberblick<\/h3>\n<div id=\"attachment_1251\" style=\"width: 670px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173810.png\" rel=\"attachment wp-att-1251\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1251\" src=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173810-1024x494.png\" alt=\"Frontend: Kunden- und Auftrags\u00fcbersicht\" width=\"660\" height=\"318\" class=\"size-large wp-image-1251\" srcset=\"https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173810-1024x494.png 1024w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173810-300x145.png 300w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173810-768x371.png 768w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173810.png 1904w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/a><p id=\"caption-attachment-1251\" class=\"wp-caption-text\">Frontend: Kunden- und Auftrags\u00fcbersicht<\/p><\/div>\n<h3>Einfache Kundenverwaltung<\/h3>\n<div id=\"attachment_1252\" style=\"width: 670px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173826.png\" rel=\"attachment wp-att-1252\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1252\" src=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173826-1024x488.png\" alt=\"Frontend: Einfache Kundenverwaltung\" width=\"660\" height=\"315\" class=\"size-large wp-image-1252\" srcset=\"https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173826-1024x488.png 1024w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173826-300x143.png 300w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173826-768x366.png 768w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173826.png 1900w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/a><p id=\"caption-attachment-1252\" class=\"wp-caption-text\">Frontend: Einfache Kundenverwaltung<\/p><\/div>\n<h3>Auftragsverwaltung<\/h3>\n<div id=\"attachment_1253\" style=\"width: 670px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173843.png\" rel=\"attachment wp-att-1253\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1253\" src=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173843-1024x492.png\" alt=\"Frontend: Auftragsverwaltung\" width=\"660\" height=\"317\" class=\"size-large wp-image-1253\" srcset=\"https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173843-1024x492.png 1024w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173843-300x144.png 300w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173843-768x369.png 768w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173843.png 1887w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/a><p id=\"caption-attachment-1253\" class=\"wp-caption-text\">Frontend: Auftragsverwaltung<\/p><\/div>\n<h3>Backup<\/h3>\n<p>Die integrierte Backupfunktion sichert sowohl die komplette Datenbank als auch alle Dateien im Anwendungsverzeichnis. So ist sichergestellt, dass man erstmal immer eine konsistente Anwendungssicherung erstellen kann.<\/p>\n<h3>PDF-Ausgabe von Auftr\u00e4gen<\/h3>\n<div id=\"attachment_1254\" style=\"width: 670px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173908.png\" rel=\"attachment wp-att-1254\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1254\" src=\"http:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173908-1024x500.png\" alt=\"PDF-Ausgabe eines Auftrags\" width=\"660\" height=\"322\" class=\"size-large wp-image-1254\" srcset=\"https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173908-1024x500.png 1024w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173908-300x147.png 300w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173908-768x375.png 768w, https:\/\/www.weschkalnies.de\/blog\/wp-content\/uploads\/2016\/01\/Bildschirmfoto-vom-2016-01-07-173908.png 1883w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/a><p id=\"caption-attachment-1254\" class=\"wp-caption-text\">PDF-Ausgabe eines Auftrags<\/p><\/div>\n<p>Ich habe noch einige Ideen zur Erweiterung, aber daf\u00fcr muss sich die Zeit erst noch finden. Darunter:<\/p>\n<h4>Refaktorisierung&#038;Sicherheit<\/h4>\n<p>Der Code ist gewachsen und wie gesagt ohne gro\u00dfe Planung entstanden. Es gibt zahlreiche Optimierungsm\u00f6glichkeiten. Zum Beispiel w\u00e4re es wichtig die Data Klasse in verschiedene Klassen aufzusplitten. Hier sei auch noch mal darauf hingewiesen, dass die Anwendung nicht daf\u00fcr gedacht ist, sie auf einem Online-Webserver laufen zu lassen. Sicherheitsaspekte, wie z.B. SQL-Injections wurden bisher nicht ber\u00fccksichtigt, weil die Anwendung daf\u00fcr gedacht ist auf einem lokalen Webserver zu laufen. \u00dcber die Datenbankstruktur l\u00e4sst sich sicher auch noch mal nachdenken &#8230;<\/p>\n<h4>Filter&#038;Pagination<\/h4>\n<ul>\n<li>Filter zur Ausgabe der Kundenliste nach Alphabet mit A B C D &#8230;<\/li>\n<li>Filter zur Ausgabe aller Rechnungen nach Zeitraum (Monat, Quartal, Jahr)<\/li>\n<li>Filter zur Ausgabe aller Rechnungen, die noch unbezahlt sind<\/li>\n<li>Pagination f\u00fcr Kunden- und Auftragsliste<\/li>\n<\/ul>\n<h4>Installation-Skript<\/h4>\n<p>Sch\u00f6n w\u00e4re eine Installationsroutine, in der die Firmendaten (Tabelle: settings) eingegeben werden k\u00f6nnen und dass die Einrichtung der Datenbank-Struktur samt Beispielinhalte und optional die \u00dcbernahme einer alten Sicherung \u00fcbernimmt. <\/p>\n<h4>Automatischer E-Mail-Versand<\/h4>\n<p>Ein optional automatischer E-Mail-Versand mit kundenspezifischem Anschreiben.<\/p>\n<h2>Download<\/h2>\n<p>Nachtrag, 2026: Das Repo habe ich inzwischen gel\u00f6scht, da es veraltet ist. Die Software habe ich aber bis heute weiterentwickelt und nutze Sie weiterhin, jetzt aber mit Vue\/Express und einem modernen Frontend.<\/p>\n<h2>Installation: Quick Start<\/h2>\n<ol>\n<li>Importiere den MySQL Dump &#8217;sql\/sampleData.sql&#8216;<\/li>\n<li>Schau Dir die Datenbank &#8218;rechnungen&#8216; an. Hier findest Du die Tabelle &#8217;settings&#8216;. \u00c4ndere die Werte entsprechend.<\/li>\n<li>Bearbeite die Datei &#8218;Config.php&#8216; und gib dein Datenbank-Zugangsdaten ein<\/li>\n<li>\u00d6ffne im Browser die Anwendung bspw. \u00fcber: http:\/\/localhost\/Faktura<\/li>\n<\/ol>\n<h2>Feedback erw\u00fcnscht<\/h2>\n<p>Wenn Dir die Anwendung gef\u00e4llt bin ich \u00fcber konstruktive Erweiterungsvorschl\u00e4ge, Bugreports und Optimierungsempfehlungen in den Kommentaren dankbar. Du kannst das Projekt <del datetime=\"2016-01-07T21:11:31+00:00\">nat\u00fcrlich<\/del> demn\u00e4chst auch forken und selbst weiterentwickeln. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jahrelang habe ich Faktura + Auftrag von Lexware als Rechnungssoftware eingesetzt. Im Gro\u00dfen und Ganzen war ich, abgesehen von der Update-Politik und dem nicht offenem Datenformat, auch ganz&#8230;<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-1240","post","type-post","status-publish","format-standard","hentry","category-releases"],"_links":{"self":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts\/1240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/comments?post=1240"}],"version-history":[{"count":37,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts\/1240\/revisions"}],"predecessor-version":[{"id":1797,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts\/1240\/revisions\/1797"}],"wp:attachment":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/media?parent=1240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/categories?post=1240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/tags?post=1240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}