Produktiv im Einsatz
Einkauf GFK
Windows-Desktop-Tool für den Materialeinkauf der GFK-Abteilung: Artikellisten durchsuchen, Bestellschein füllen, per Klick über Outlook bestellen.
Die Herausforderung
Der Materialeinkauf in der GFK-Abteilung stützte sich auf mehrere Excel-Artikellisten (Formbau, Holz, Holzspiralbohrer, Würthregal, Schleifmittel, Sonstiges), aus denen Bestellungen manuell zusammengestellt und per E-Mail verschickt werden mussten. Das Suchen quer über die Listen sowie das fehlerfreie Übertragen von Artikelnummer, Menge und Liefertermin in die Bestell-Mail war umständlich und fehleranfällig. Gesucht war ein einfaches Werkzeug, das die vorhandenen Listen weiternutzt und den Bestellweg bis zum Versand bündelt.
Das Ziel
Eine schlanke Desktop-Anwendung schaffen, die die bestehenden Excel-Artikellisten automatisch einliest, das Durchsuchen aller Kategorien an einem Ort ermöglicht und Bestellungen mit Menge und Liefertermin per Klick als formatierte E-Mail über Outlook versendet – inklusive nachvollziehbarer Bestellhistorie.
Die Lösung
- Sechs durchsuchbare Artikelkategorien als Reiter (Formbau, Holz, Holzspiralbohrer, Würthregal, Schleifmittel, Sonstiges) mit Spalten Artikel-Nr., Bezeichnung und Information (einkauf.py, KATEGORIE_TABELLEN in database.py)
- Bestellschein per Doppelklick: Popup zur Eingabe von Menge und Liefertermin (Kalender-Auswahl), Artikel landet im Bestellschein; erneuter Doppelklick entfernt genau die ausgewählte Zeile (einkauf.py einkauf_ware/save_einkauf/bestell_delete)
- Bestellung per Knopfdruck: erzeugt eine HTML-Tabelle und versendet sie über Microsoft Outlook an den konfigurierten Empfänger (einkauf.py _baue_bestell_html, mail.py order_now via win32com)
- Bestellhistorie: jede abgeschickte Bestellung wird mit Zeitstempel protokolliert und in einem eigenen Reiter angezeigt (einkauf.py bestell_historie, Tabelle e_historie)
- Automatische Excel-Synchronisierung beim Start: nur geänderte Listen (Vergleich Änderungsdatum gegen letztes Sync-Datum) werden neu in die Datenbank eingelesen; Artikelnummern unter 5 Stellen werden mit führenden Nullen ergänzt (main.py synchronisiere_excel_dateien)
- Statusleiste mit Uhr/Datum sowie Wetteranzeige für den Standort Vreden über OpenWeatherMap (Symbol, Temperatur, gefühlte Temperatur, Beschreibung, Luftfeuchtigkeit, Wind); Wetterabruf läuft im Hintergrund-Thread (main.py get_weather_data/_weather_update_loop)
- Konfigurierbare Oberfläche über ttkbootstrap-Themes (z. B. superhero, darkly), maximiertes Fenster beim Start, größere Schrift und Zebra-Streifen in den Tabellen
- Auslieferung als eigenständige Windows-.exe über PyInstaller/auto-py-to-exe; eigener Build-Skript-Pfad mit schlanker virtueller Umgebung (build_exe.ps1, config.json)
Technik & Architektur
- Python-Desktop-Anwendung mit Tkinter und ttkbootstrap (themebare Oberfläche, Tableview-Komponente)
- Lokale SQLite-Datenbank vg_db.db als Datenhaltung; Tabellen je Kategorie (e_formbau, e_holz, e_holzspiralbohrer, e_wuerthregal, e_schleifmittel, e_sonstiges) sowie e_bestellschein und e_historie
- Modularer Aufbau: main.py (Start, Excel-Sync, Hauptfenster, Uhr/Wetter), einkauf.py (Oberfläche und Bestelllogik), mail.py (Outlook-Versand), config.py (INI-Konfiguration, UTF-8), database.py (Verbindungs-Kontextmanager, Tabellen-Whitelist)
- Excel-Import der Artikellisten über openpyxl (in der aktuellen Fassung; frühere Fassung nutzte pandas); Konfiguration in datenbank.ini (Theme, Pfade, Sync-Datum, API-Key, Mail-Empfänger/Betreff)
- Outlook-Anbindung über COM (pywin32 / win32com) zum direkten Versand der Bestell-E-Mail
- Wetterdaten über die OpenWeatherMap-API; Anzeige des Wettersymbols über Pillow (PIL/ImageTk)
- Robustheits-/Sicherheitsdetails: SQLite-Verbindungs-Kontextmanager mit Commit/Rollback, Tabellennamen-Whitelist gegen SQL-Injektion bei dynamischen Tabellennamen, rotierendes Logfile (RotatingFileHandler), konsequente UTF-8-Kodierung wegen Umlauten (z. B. Würthregal)
- Build zur .exe mit PyInstaller über auto-py-to-exe-Konfiguration (config.json) bzw. ein dediziertes PowerShell-Build-Skript mit eigener schlanker venv
Nutzen in der Praxis
- Bestellungen werden zentral in einer Oberfläche zusammengestellt statt manuell aus mehreren Excel-Dateien – weniger Übertragungsfehler bei Artikelnummer, Menge und Liefertermin
- Die vorhandenen Excel-Artikellisten bleiben die Pflegequelle und werden beim Start automatisch übernommen, sodass kein doppelter Pflegeaufwand entsteht
- Bestellung mit einem Klick als fertig formatierte E-Mail über das gewohnte Outlook – kein Abtippen in die Mail nötig
- Lückenlose, zeitgestempelte Bestellhistorie macht frühere Bestellungen nachvollziehbar
- Läuft als eigenständige .exe ohne Python-Installation auf dem Arbeitsplatz
- Wartbarer, modularer Code mit Schutzmaßnahmen (Tabellen-Whitelist, Transaktions-Kontextmanager, rotierendes Log)
Meine Rolle
Konzept, Entwicklung und Umsetzung eigenständig durch Ricardo Rehfeldt