Problem: B2C katalog ne deluje za B2B
Klasični B2C katalog ima izdelek = ena vrstica v bazi. "Majica srednje rdeča" je en izdelek. Pri B2B distribuciji to ne deluje: en izdelek ima lahko 50 variant po velikosti, barvi, napetosti, materialu, vrsti certifikata. Vsaka kombinacija ima drug SKU, drugo zalogo, drugo ceno.
Pri Lontech.si (SIBO distribucija) smo gradili katalog z 5.000+ izdelki, kjer ima 60 % izdelkov 3–20 atributnih variant.
Arhitektura: izdelek + atributi + pod-artikli
Tabela `izdelki` (master)
id, ime, opis, kategorija_id, slika, brand_id, ...
Tabela `atributi` (definicije)
id, ime ("Velikost", "Barva", "Napetost"), tip (select, text, range)
Tabela `atributne_vrednosti`
id, atribut_id, vrednost ("XS", "S", "M", "L", "XL")
Tabela `pod_artikli` (variante)
id, izdelek_id, sku, cena, zaloga, dobaviteljska_koda
Tabela `pod_artikel_atributi`
pod_artikel_id, atributna_vrednost_id
Primer: tehnični izdelek
Recimo "Stikalo TIP A":
- Izdelek: Stikalo TIP A
- Atributi: Napetost (230V / 400V), Tok (10A / 16A / 25A), Število polov (1 / 2 / 3 / 4)
- Pod-artikli: 2 × 3 × 4 = 24 variant. Vsak ima svoj SKU, zalogo, ceno.
Filtri v frontend-u
Uporabnik išče stikalo. Filtre lahko nastavi:
- Napetost: ☑ 230V ☐ 400V
- Tok: ☐ 10A ☑ 16A ☐ 25A
- Število polov: ☑ 2 ☑ 3
Sistem vrne pod-artikle, ki ustrezajo VSEM kriterijem (intersection).
SQL query za filtriranje
SELECT DISTINCT pa.izdelek_id
FROM pod_artikli pa
INNER JOIN pod_artikel_atributi paa1 ON pa.id = paa1.pod_artikel_id
INNER JOIN pod_artikel_atributi paa2 ON pa.id = paa2.pod_artikel_id
WHERE paa1.atributna_vrednost_id IN (1, 2) -- 230V (Napetost)
AND paa2.atributna_vrednost_id IN (5) -- 16A (Tok)
AND pa.zaloga > 0;
Pri 5.000 izdelkih in 50.000 pod-artiklih takšen query mora biti optimiziran s pravilnimi indeksi.
B2B prijavna logika
V B2B katalogu pogosto:
- Cene niso vidne brez prijave
- Vsak B2B partner ima lasten cenik (popust po skupini ali individualno)
- Naročilo gre v ERP kot predračun, ne kot avtomatska prodaja
- Plačilo je po pogodbi (30 / 60 / 90 dnevni rok), ne kartično
Realne implementacije
- Lontech.si: SIBO distribucija, atributni filtri, pod-artikli, ceniki po B2B skupini.
- Akvonij.si: izdelki z atributi, lastnostmi, energijskimi nalepkami.
- Shoppster.si / ideo.si: 30+ dobaviteljev, vsak s svojimi atributi.
Konkretni izzivi
1. Različen atributni nabor po kategoriji
Stikalo ima atribut "Napetost", majica ne. Hladilnik ima "Energijski razred", obleka ne. Atributi morajo biti povezani s kategorijo, ne globalno.
2. Sinonimi v vrednostih
Dobavitelj A piše "rdeča", dobavitelj B "rdec", dobavitelj C "RED". Sistem mora ti tri vrednosti obravnavati kot iste. Rešitev: tabela `atributne_vrednosti_sinonimi`.
3. Mejne vrednosti pri range filtrih
Pri filtru "Cena od – do" mora UI dovoliti drsnik z razumnimi koraki (5 €, 10 €, 50 €), ne le numerični input.
4. Performance pri velikih katalogih
Pri 50.000 pod-artiklih in kompleksnih filtrih SQL query lahko traja 2+ sekunde. Rešitev: pre-computed materialized views, Redis cache za pogoste filtre, Elasticsearch / Algolia za full-text iskanje.
Zaključek
B2B katalog z atributi in pod-artikli je arhitekturno bolj kompleksen kot B2C katalog, vendar je za distribucijska podjetja edina prava izbira. Brez te strukture se hitro znajdete v "trgovini s podvojenimi izdelki", kjer vsak SKU ima svoj produkt zapis – kar je nevzdržno pri 5.000+ izdelkih.
