setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); function h($v): string { return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); } function geld($v): string { return number_format((float)$v, 2, ',', '.') . ' €'; } function kunde(array $r): string { $firma = trim((string)($r['firma'] ?? '')); $person = trim((string)($r['vorname'] ?? '') . ' ' . (string)($r['nachname'] ?? '')); if ($firma !== '' && $person !== '') return $firma . ' – ' . $person; if ($firma !== '') return $firma; if ($person !== '') return $person; return '—'; } function countSafe(PDO $pdo, string $sql): int { try { return (int)$pdo->query($sql)->fetchColumn(); } catch (Throwable $e) { return 0; } } $artikelAnzahl = countSafe($pdo, "SELECT COUNT(*) FROM artikel WHERE aktiv=1"); $kundenAnzahl = countSafe($pdo, "SELECT COUNT(*) FROM kunden WHERE aktiv=1"); $lieferantenAnzahl = countSafe($pdo, "SELECT COUNT(*) FROM lieferanten WHERE aktiv=1"); $auftraegeAnzahl = countSafe($pdo, "SELECT COUNT(*) FROM belege WHERE belegtyp='AUFTRAG'"); $lieferscheineAnzahl = countSafe($pdo, "SELECT COUNT(*) FROM belege WHERE belegtyp='LIEFERSCHEIN'"); $rechnungenAnzahl = countSafe($pdo, "SELECT COUNT(*) FROM belege WHERE belegtyp='RECHNUNG'"); $gutschriftenAnzahl = countSafe($pdo, "SELECT COUNT(*) FROM belege WHERE belegtyp='GUTSCHRIFT'"); try { $lagerbestand = (float)$pdo->query( "SELECT COALESCE(SUM(lagerbestand),0) FROM artikel WHERE aktiv=1" )->fetchColumn(); $lagerwert = (float)$pdo->query( "SELECT COALESCE(SUM(lagerbestand * einkaufspreis_netto),0) FROM artikel WHERE aktiv=1" )->fetchColumn(); } catch (Throwable $e) { $lagerbestand = 0; $lagerwert = 0; } /* Offene Rechnungen */ $offeneRechnungen = 0; $offenerBetrag = 0; $bezahlteRechnungen = 0; try { $offeneRechnungen = (int)$pdo->query( "SELECT COUNT(*) FROM belege WHERE belegtyp='RECHNUNG' AND status <> 'BEZAHLT'" )->fetchColumn(); $offenerBetrag = (float)$pdo->query( "SELECT COALESCE(SUM(brutto),0) FROM belege WHERE belegtyp='RECHNUNG' AND status <> 'BEZAHLT'" )->fetchColumn(); $bezahlteRechnungen = (int)$pdo->query( "SELECT COUNT(*) FROM belege WHERE belegtyp='RECHNUNG' AND status='BEZAHLT'" )->fetchColumn(); } catch (Throwable $e) { } /* Zahlungen */ $zahlungenGesamt = 0; $zahlungenMonat = 0; try { $zahlungenGesamt = (float)$pdo->query( "SELECT COALESCE(SUM(betrag),0) FROM zahlungen" )->fetchColumn(); $zahlungenMonat = (float)$pdo->query( "SELECT COALESCE(SUM(betrag),0) FROM zahlungen WHERE YEAR(zahlungsdatum)=YEAR(CURDATE()) AND MONTH(zahlungsdatum)=MONTH(CURDATE())" )->fetchColumn(); } catch (Throwable $e) { } /* Bestellungen */ $bestellungen = []; try { $bestellungen = $pdo->query( "SELECT b.id, b.belegnummer, b.datum, b.status, b.brutto, k.firma, k.vorname, k.nachname, l.firma AS lf, l.vorname AS lv, l.nachname AS ln FROM belege b LEFT JOIN kunden k ON k.id=b.kunde_id LEFT JOIN lieferanten l ON l.id=b.lieferant_id WHERE b.belegtyp='AUFTRAG' ORDER BY b.id DESC LIMIT 10" )->fetchAll(); } catch (Throwable $e) { } /* Lieferscheine */ $lieferscheine = []; try { $lieferscheine = $pdo->query( "SELECT b.id, b.belegnummer, b.datum, b.status, k.firma, k.vorname, k.nachname, f.fastbill_invoice_id, f.status AS fastbill_status, f.rechnungsnummer, f.fastbill_details_url FROM belege b LEFT JOIN kunden k ON k.id=b.kunde_id LEFT JOIN fastbill_rechnungsentwuerfe f ON f.lieferschein_id=b.id WHERE b.belegtyp='LIEFERSCHEIN' ORDER BY b.id DESC LIMIT 10" )->fetchAll(); } catch (Throwable $e) { } /* FastBill-Entwürfe */ $entwuerfe = []; try { $entwuerfe = $pdo->query( "SELECT f.*, b.belegnummer AS lieferschein_nummer FROM fastbill_rechnungsentwuerfe f LEFT JOIN belege b ON b.id=f.lieferschein_id ORDER BY f.id DESC LIMIT 10" )->fetchAll(); } catch (Throwable $e) { } /* Letzte Lagerbewegungen */ $bewegungen = []; try { $bewegungen = $pdo->query( "SELECT lb.datum, lb.bewegungstyp, lb.menge, lb.grund, a.artikelnummer, a.titel FROM lagerbewegungen lb LEFT JOIN artikel a ON a.id=lb.artikel_id ORDER BY lb.id DESC LIMIT 10" )->fetchAll(); } catch (Throwable $e) { } /* Quartal */ $jahr = (int)date('Y'); $monat = (int)date('n'); $quartal = (int)ceil($monat / 3); $quartalStartMonat = (($quartal - 1) * 3) + 1; $quartalStart = sprintf('%04d-%02d-01', $jahr, $quartalStartMonat); $quartalEnde = date('Y-m-t', strtotime($jahr . '-' . ($quartalStartMonat + 2) . '-01')); $quartalRechnungen = 0; $quartalNetto = 0; $quartalMwst = 0; try { $stmt = $pdo->prepare( "SELECT COUNT(*) AS anzahl, COALESCE(SUM(netto),0) AS netto, COALESCE(SUM(mwst),0) AS mwst FROM belege WHERE belegtyp='RECHNUNG' AND datum BETWEEN ? AND ?" ); $stmt->execute([$quartalStart, $quartalEnde]); $q = $stmt->fetch(); $quartalRechnungen = (int)($q['anzahl'] ?? 0); $quartalNetto = (float)($q['netto'] ?? 0); $quartalMwst = (float)($q['mwst'] ?? 0); } catch (Throwable $e) { } ?>
Netcup ist die führende Warenwirtschaft. FastBill erstellt die endgültige Kundenrechnung.
Die Rechnung wird erst nach dem Lieferschein als Entwurf in FastBill angelegt.
Hier beginnst du einen neuen Kundenauftrag. Die Bestellung verändert das Lager noch nicht.
Noch keine Bestellungen vorhanden.
| Nr. | Datum | Kunde | Lieferant | Status | Wert | Aktion |
|---|---|---|---|---|---|---|
| =h($r['belegnummer'])?> | =h($r['datum'])?> | =h(kunde($r))?> | =h(trim( (string)($r['lf'] ?? '') . ' ' . (string)($r['lv'] ?? '') . ' ' . (string)($r['ln'] ?? '') ) ?: '—')?> | =h($r['status'])?> | =geld($r['brutto'])?> | EK / Bestätigung Lieferschein |
Bestätigte Einkaufspreise und Originale werden manuell zur Bestellung archiviert. Kein automatischer Mailimport.
Wareneingang erhöht den Lagerbestand.
Der Lieferschein ist der tatsächliche Lagerausgang. Danach wird ein FastBill-Rechnungsentwurf erstellt.
Noch keine Lieferscheine vorhanden.
Noch keine FastBill-Entwürfe vorhanden.
| Lieferschein | FastBill-ID | Status | Rechnungsnummer | Aktion |
|---|---|---|---|---|
| =h($r['lieferschein_nummer'] ?? '—')?> | =h($r['fastbill_invoice_id'])?> | =h($r['status'])?> | =h($r['rechnungsnummer'] ?: '—')?> | Öffnen FastBill öffnen |
Gesamt erfasst: =geld($zahlungenGesamt)?>
Dieser Monat: =geld($zahlungenMonat)?>
Zahlungen Mit FastBill synchronisierenRechnungen: =h($quartalRechnungen)?>
Umsatz netto: =geld($quartalNetto)?>
Umsatzsteuer: =geld($quartalMwst)?>
Zeitraum: =h(date('d.m.Y', strtotime($quartalStart)))?> – =h(date('d.m.Y', strtotime($quartalEnde)))?>
Quartalsauszug FinanzamtNoch keine Lagerbewegungen vorhanden.
| Datum | Artikel | Bewegung | Menge | Grund |
|---|---|---|---|---|
| =h($r['datum'])?> | =h($r['artikelnummer'])?> =h($r['titel'])?> |
= $r['bewegungstyp']==='EINGANG' ? '➕ EINGANG' : ($r['bewegungstyp']==='AUSGANG' ? '➖ AUSGANG' : '↔ KORREKTUR') ?> | =number_format((float)$r['menge'],3,',','.')?> | =h($r['grund'])?> |
✓ Datenbankverbindung funktioniert.
✓ Artikel, Kunden, Lieferanten und Lager sind aktiv.
✓ Bestellung → Wareneingang → Lieferschein → FastBill-Entwurf → fertige FastBill-Rechnung.
✓ Der Lagerbestand wird bei Wareneingang erhöht und beim Lieferschein einmal reduziert.
✓ Die Rechnung selbst verändert den Lagerbestand nicht.
✓ Kein automatischer Mailimport für Lieferanten-Bestätigungen.