Warum ich das mache
In vielen KMU-Projekten liegt der operative Kern in Access.
Dort leben Artikel, Lieferanten, Preise, Produktionsdaten.
Verkäufe, Kunden und Bestellungen kommen aus WooCommerce.
Wenn Du sauber analysieren willst, musst Du beides zusammenbringen.
Architektur: Zwei Systeme, ein Ziel
System | Datenbereich |
---|---|
Access | Artikelstamm, Preiskalkulation |
WooCommerce | Kunden, Bestellungen, Umsätze |
Ich kombiniere beides regelmäßig – für Umsatzreports, Topseller, Lagerreichweiten.
1. WooCommerce-Daten per REST-API laden
Ich nutze die offizielle WooCommerce-REST-API.
Beispiel: Abruf aller Bestellungen der letzten 30 Tage
Function LadeWooBestellungen() As String
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", "https://shop.de/wp-json/wc/v3/orders?after=" & Format(Now - 30, "yyyy-mm-dd") & "T00:00:00", False
http.SetRequestHeader "Authorization", "Basic " & Base64BenutzerPW()
http.Send
If http.Status = 200 Then
LadeWooBestellungen = http.ResponseText
Else
LadeWooBestellungen = ""
End If
End Function
Parser: VBA-JSON
(JsonConverter.bas) – Standard.
Dann importiere ich die Daten in tbl_woo_bestellungen
und tbl_woo_positionen
.
2. Daten mit Access verknüpfen
Jetzt liegt der Charme im Access-System: dort ist alles verknüpfbar.
Beispiel: Abfrage mit Access-Artikeln
SELECT a.artikelnummer, a.bezeichnung, Sum(wp.menge) AS verkauft, a.lagerbestand
FROM tbl_woo_positionen wp
INNER JOIN tbl_artikel a ON wp.sku = a.artikelnummer
GROUP BY a.artikelnummer, a.bezeichnung, a.lagerbestand
So sehe ich auf einen Blick:
- was gut läuft
- was nachbestellt werden muss
- ob es Preisabweichungen gibt
3. Zusatz: Verkaufspreise gegenkalkulieren
Ich habe in Access oft den Einkauf + Kalkulationslogik.
SELECT a.artikelnummer, a.einkaufspreis, a.aufschlag_faktor,
Round(a.einkaufspreis * a.aufschlag_faktor, 2) AS soll_vk,
wp.preis_je_einheit AS ist_vk
FROM tbl_woo_positionen wp
INNER JOIN tbl_artikel a ON wp.sku = a.artikelnummer
WHERE Abs(wp.preis_je_einheit - (a.einkaufspreis * a.aufschlag_faktor)) > 0.05
So finde ich falsch eingepflegte Produkte oder veraltete Preise.
4. Kundengruppen aus Access zurückspielen
Nicht alles lebt im Web. Manche Kundengruppen pflege ich in Access.
Sub AktualisiereWooKundengruppe(kundenID As Long, gruppe As String)
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim payload As String
payload = "{""meta_data"":[{""key"":""kundengruppe"",""value"":""" & gruppe & """}]}"
http.Open "PUT", "https://shop.de/wp-json/wc/v3/customers/" & kundenID, False
http.SetRequestHeader "Authorization", "Basic " & Base64BenutzerPW()
http.SetRequestHeader "Content-Type", "application/json"
http.Send payload
End Sub
Dann baue ich in Access Regeln: z. B. B2B-Kunden = Netto, B2C = Brutto.
Die Info steht dann sauber im Shop.
5. Kombination in einem Bericht
Ich baue regelmäßig Access-Berichte mit:
- Artikeln (aus Access)
- Verkäufen (aus WooCommerce)
- Lagerbestand (Access)
- Durchschnittspreis (Woo)
- Ertrag (Access-Kalkulation – Woo-VK)
Ein typischer Bericht basiert auf dieser Abfrage:
SELECT a.artikelnummer, a.bezeichnung,
Sum(wp.menge) AS verkauft,
Round(Sum(wp.menge * wp.preis_je_einheit),2) AS umsatz,
Round(Sum(wp.menge * a.einkaufspreis),2) AS einkauf,
Round(Sum(wp.menge * (wp.preis_je_einheit - a.einkaufspreis)),2) AS deckung
FROM tbl_woo_positionen wp
INNER JOIN tbl_artikel a ON wp.sku = a.artikelnummer
GROUP BY a.artikelnummer, a.bezeichnung
Die fertige Liste geht dann als PDF an die GL.
Oder als CSV an den Einkauf.
6. Mein Tuning-Tipp
WooCommerce-Daten vorab filtern.
Nicht 10.000 Orders holen, wenn Du nur 30 Tage brauchst.
Und: Nur id
, sku
, line_items
, total
abrufen – nicht das ganze JSON-Monster.
Keine Antworten