Johdanto
Odoossa jokainen liiketoimintatieto — myyntitilauksesta varastotapahtumaan ja tuotteisiin — tallennetaan mallien kautta tietokantaan. Malli määrää, miten tieto jäsennellään, linkittyy muihin tietoihin ja säilyy historiassa.
Sekä toiminnalliset konsultit että kehittäjät hyötyvät siitä, että mallit ovat hallussa. Mallit muodostavat Odoon tietomallin selkärangan: ne määrittelevät kentät, suhteet ja liiketoimintalogiikan, joihin koko järjestelmä nojautuu.
Tässä artikkelissa keskitytään yhteen tärkeään malliin: product.product. Se on usein se kohta, jossa konfigurointi, integraatiot ja räätälöidyt moduulit kohtaavat tuotteiden tiedot käytännössä.
Mikä on product.product -malli
product.product kuvaa Odoossa konkreettisia tuotevariaatioita — niitä yksittäisiä yksiköitä, joita myydään, ostetaan ja siirretään varastossa. Se on se tietue, joka päätyy tilausriveille, ostotilauksiin ja varastoliikkeisiin.
Mallin ero product.templateen on oleellinen: template pitää yhteiset, perhettä kuvaavat ominaisuudet, kun taas product.product edustaa kutakin variaatiota erikseen. Yksinkertaisessa tuotteessa on yksi variantti per template; monivaihtoehtoisessa tuotteessa (esim. paitamalli, eri koot ja värit) kukin yhdistelmä on oma product.product‑rivi.
Mallin perusmäärittely löytyy product‑moduulista. Myynti, hankinta, varastonhallinta ja verkkokauppa viittaavat usein suoraan product.productiin — kun lisäät tilausrivejä tai vastaanotat tavaraa, käytät näitä varianttitietueita.
product.product hyödyntää delegaatioperintää product.template‑mallista: moni kenttä määritellään templatelta ja variantti perii ne, mutta samalla variantille voi antaa omia arvoja. Tämä pitää jaetun tiedon keskitetysti ja mahdollistaa poikkeukset yksittäisille variaatioille.
Mallin keskeiset kentät
Seuraavassa ovat tärkeimmät kentät, joita käytät tyypillisesti työskennellessäsi tuotevaraioiden kanssa. Niiden merkitys vaikuttaa suoraan varaston, myynnin ja integraatioiden toimintaan.
1. name
Tyyppi: Char. Variantin nimi, joka näkyy listoissa ja dokumenteissa. Yksinkertaisessa tuotteessa nimi vastaa templaten nimeä; variaatiossa nimi usein sisältää attribuuttien kuvauksen, jotta käyttäjä tunnistaa yhdistelmän nopeasti.
2. product_tmpl_id
Tyyppi: Many2one (product.template). Yhdistää variantin sen vanhempaan templateen — jokaisella product.productilla on täsmälleen yksi parent‑template. Käytä tätä suhdetta, kun laajennat logiikkaa tai haet templaten tietoja variantille.
3. default_code
Tyyppi: Char. Sisäinen viite tai SKU, jota käytetään tuotteiden tunnistukseen, viivakoodihakuihin ja integraatioissa. Variantilla voi olla oma yksilöllinen koodi.
4. barcode
Tyyppi: Char. Tuotteen viivakoodi (EAN, UPC jne.) skannausta varten. Kun asetettu, sen tulee olla yksilöllinen tuotteiden välillä, jotta POS ja varasto löytävät oikean tuotteen nopeasti.
5. create_date
Tyyppi: Datetime. Tallentaa, milloin tietue luotiin. Odoon hoitama automaattinen kenttä, hyödyllinen raportoinnissa ja auditoinneissa.
6. write_date
Tyyppi: Datetime. Tallentaa viimeisimmän muutoksen ajan. Automaattinen; auttaa seuraamaan, milloin tuotetietoja on päivitetty viimeksi.
7. active
Tyyppi: Boolean. Pehmeän arkistoinnin lippu: False piilottaa tuotteen oletusnäkymistä, mutta ei poista tietohistoriaa. Käytännöllinen tapa vanhentaa tuotteita ilman tietojen menettämistä.
8. type
Tyyppi: Selection. Määrittää tuotetyypin: Consumable, Service tai Storable. Tämä vaikuttaa varaston seurannan ja eri prosessien soveltuvuuteen — esimerkiksi palveluilla ei ole varastoseurantaa.
9. categ_id
Tyyppi: Many2one (product.category). Tuoteryhmä, jota käytetään raportoinnissa, hinnan määräytymisessä ja katalogointisäännöissä. Kategoriat voivat muodostaa hierarkioita selkeyttämään tuoteluokitusta.
10. list_price
Tyyppi: Float. Oletusmyyntihinta, joka näkyy tarjouksilla ja toimii lähtöhintana tilausriveillä. Hinnat voidaan kuitenkin ylittää asiakkaan hinnaston mukaan.
11. standard_price
Tyyppi: Float. Tuotteen kustannushinta, jota käytetään varaston arvostuksessa ja katelaskennassa. Päivittyy yleensä ostojen tai manuaalisten muutosten kautta.
12. uom_id
Tyyppi: Many2one (uom.uom). Myynnin ja varaston mittayksikkö — kertoo, miten määritellään määrät (kpl, kg, l jne.).
13. uom_po_id
Tyyppi: Many2one (uom.uom). Hankinnan mittayksikkö, joka voi poiketa myyntiyksiköstä (esim. ostetaan laatikoissa, myydään kappaleina). Odoo hoitaa yksikkökonversiot automaattisesti.
14. description_sale
Tyyppi: Html. Myyntikuvaus, joka näytetään tarjouksissa ja laskuissa; voi sisältää muotoilua ja yksityiskohtaisia tuotetietoja asiakkaille.
15. description_purchase
Tyyppi: Html. Hankintakuvaus, joka näkyy ostotilauksissa ja toimittajalaskuissa; auttaa kommunikoimaan vaatimukset toimittajille.
16. sale_ok
Tyyppi: Boolean. Sallii tuotteen myynnin. Kun False, tuote ei ole valittavissa myyntissä tai verkkokaupassa — hyödyllinen sisäisille tai vain hankittaville tuotteille.
17. purchase_ok
Tyyppi: Boolean. Sallii tuotteen ostamisen. Kun False, tuotetta ei voi valita ostoissa — sopii valmistettaville tai vain myytäville yksiköille.
18. image_1920
Tyyppi: Binary. Korkean resoluution tuotekuva; Odoo tallentaa useita kokoja (image_512, image_256 jne.) käytettäväksi lomakkeissa, verkkokaupassa ja raporteissa.
19. weight
Tyyppi: Float. Tuotteen paino, jota käytetään toimituskustannusten laskennassa ja logistiikassa. Yksikkö riippuu yrityksen asetuksista.
20. volume
Tyyppi: Float. Tuotteen tilavuus; tärkeä laskennassa, jos lähetyksissä tai varastoinnissa huomioidaan tilavuuspohjaiset rajoitteet.
21. company_id
Tyyppi: Many2one (res.company). Multi‑company‑ympäristössä tämä kertoo, mikä yhtiö omistaa tuotteen; vaikuttaa näkyvyyteen ja varastosaldoihin.
22. currency_id
Tyyppi: Many2one (res.currency). Valuutta, jolla list_price ja standard_price ovat ilmoitettu; yleensä yrityksen oma valuutta, mutta hinnastot voivat tehdä muunnoksia muihin valuuttoihin.
23. qty_available
Tyyppi: Float. Käytettävissä oleva määrä varastossa, laskettuna quanteista. Read‑only; tärkeä varastotilanteen tarkistuksiin ja saatavuusnäyttöihin. Koskee lähinnä storable‑tuotteita.
24. virtual_available
Tyyppi: Float. Ennustettu määrä (varasto + tulossa - lähtevä). Auttaa päättämään hankinnoista ja täydennyksistä. Myös laskettu kenttä.
25. product_template_attribute_value_ids
Tyyppi: Many2many. Yhdistää variantin niihin attribuuttien arvoihin, jotka määrittelevät sen (esim. Väri=Sininen, Koko=M). Käytetään konfiguraatiossa ja suodattamisessa.
26. sequence
Tyyppi: Integer. Näyttöjärjestys: pienemmät arvot nousevat listauksissa ja konfiguraattoreissa ensin, joten voit ohjata, mitkä tuotteet näkyvät etusijalla.
27. display_name
Tyyppi: Char. Lasketaan yhdistämällä nimi ja attribuutit käyttäjäystävälliseksi esitykseksi. Näkyy many2one‑valinnoissa ja hakutuloksissa; yleensä vain luettavaksi.
28. responsible_id
Tyyppi: Many2one (res.users). Tuotteesta vastuussa oleva henkilö; hyödyllinen uudelleentilaussäännöissä ja sisäisessä työnjaossa, mutta ei pakollinen.
Miten mallia käytetään liiketoimintaprosesseissa
1. Myynti ja tarjoukset
Myyjä valitsee katalogista product.product‑variantin luodessaan tarjousta. Riville periytyvät list_price, description_sale ja uom_id; hinnastot voivat kuitenkin muuttaa lopullisen hinnan. Vain sale_ok=True -tuotteet näkyvät myyntivalikossa.
2. Hankinnat ja toimittajat
Osto‑tilaukset ja toimittajalaskut viittaavat product.product‑tietueisiin. Ostohinnat päivittävät usein standard_price‑kenttää, ja uom_po_id ohjaa, miten tuotteita tilataan (esim. tilataan laatikoissa mutta käsitellään kappaleina).
3. Varasto ja logistiikka
Varastoliikkeet, noudot ja quants ovat aina tuotteeseen sidottuja. qty_available ja virtual_available ohjaavat saatavuustarkistuksia. Vain storable‑tuotteita seurataan varastossa; viivakoodi auttaa nopeassa tunnistuksessa skannauksella.
4. Verkkokauppa ja sivusto
Verkkokaupassa näytetään product.product‑variantteja — eri koko‑ ja värivaihtoehdot annetaan valintoina. Kuvat, kuvaukset ja hinnat haetaan mallista, ja sale_ok‑asetus vaikuttaa, näkyykö tuote kaupassa.
5. Valmistus ja MRP
Tuotantolomakkeet ja materiaalivaatimukset viittaavat product.productiin sekä raaka‑aineissa että valmiissa tuotteissa. Tuotetyyppi vaikuttaa, tarvitseeko sitä varastoida vai kuluttaa, ja varastotasot ohjaavat tuotannon suunnittelua.
Miten kehittäjät laajentavat mallia
Kehittäjät laajentavat product.productia eri tavoilla, mutta yleisin ja suositeltava tapa on Odoon perintämekanismien käyttö.
Malliperintä
Käytä _inherit = 'product.product' laajentaaksesi mallia: lisää kenttiä, ylikirjoita metodeja tai lisää rajoitteita. Muutokset kannattaa tehdä omassa moduulissa, jotta päivitykset ja ylläpito sujuvat helpommin. Valitse product.product, kun ominaisuus on yksittäisvariantille; käytä product.templatea, jos ominaisuus koskee koko tuotefamiliaa.
Kenttien lisääminen
Lisää uusia kenttiä perimääsi malliin oikeilla tyypeillä (Char, Many2one, Boolean, Integer, Text, Selection). Päätä aina, kuuluuko kenttä templaten puolelle vai variantille: SKU‑tyyppiset tiedot kuuluvat yleensä product.productiin.
Python‑laajennukset
Ylikirjoita create, write tai unlink lisälogiikkaa varten ja kutsu aina super() alkuperäisen toiminnan säilyttämiseksi. Huomioi lasketut kentät ja niiden riippuvuudet, sillä product.product sisältää monia laskettuja arvoja eri moduuleista.
Odoo Studio
Odoo Studio mahdollistaa kenttien lisäämisen ilman koodia ja sopii nopeisiin muutoksiin. Monimutkaisissa tarpeissa ja yritystason ylläpidettävyydessä räätälöidyt moduulit antavat paremman kontrollin. Odoon API (XML‑RPC/JSON‑RPC) paljastaa mallin integraatioita varten.
Parhaat käytännöt
- Pidä default_code ja barcode yhtenäisinä ja yksilöllisinä, jos käytät niitä integraatiokenttinä.
- Aseta tuotetyyppi oikein: kulutustavarat, varastoitavat tai palvelut vaikuttavat automaattisesti prosessien soveltuvuuteen.
- Integraatioissa käytä product.productia tilausriveihin ja transaktioihin; catalog‑tason operaatioihin sopii product.template paremmin.
- Lisättyihin kenttiin kannattaa käyttää x_‑etuliitettä tai moduulin omaa etuliitettä konfliktien välttämiseksi tulevissa Odoo‑päivityksissä.
- Kun kenttä koskee kaikkia variaatioita (esim. brändi tai yleinen kategoria), lisää se templateen. Varianttikohtaisille tiedoille (esim. variaation oma viivakoodi) käytä product.productia.
Yleisimmät virheet
- Jos tarvitset varianttikohtaista logiikkaa, periydy product.productista; templaten perintä sopii yhteiseen toimintaan.
- Älä luo variantteja käsin ilman konfiguraattoria, jos tuote on konfiguroitava — käytä tuotteen konfigurointitoimintoja, jotta attribuutit ja yhteydet syntyvät oikein.
- Varmista, että sale_ok ja purchase_ok on asetettu oikein; muuten tuotteet voivat jäädä pois näkymistä myynnissä tai ostoissa.
- Muista aina kutsua super() ylikirjoittaessasi ydintoimintoja — muuten riskinä on muiden moduulien rikkoutuminen ja päivitysongelmat.
- Käytä oikeaa mallia domaineissa: jos suodatat kategorioiden mukaan, tee se template‑tasolla eikä varianttitason haulla, ellei tarkoitus ole nimenomaisesti hakea variantteja.
Yhteenveto
product.product on keskeinen osa Odoon tuotetietorakennetta: se edustaa myytäviä ja ostettavia yksiköitä. Ymmärtämällä kentät ja yhteydet product.templateen voit konfiguroida, laajentaa ja integroida järjestelmää tehokkaasti.
Olitpa konsultti, joka jäsentää tuoteluetteloita, tai kehittäjä, joka rakentaa moduuleja, hyvä ymmärrys product.productista säästää aikaa ja vähentää virheitä.
Tarvitsetko apua Odoo‑käyttöönotossasi?
Dasolo auttaa yrityksiä Odoo‑implementaatioissa, räätälöinneissä ja optimoinneissa. Erityisosaamistamme ovat API‑integraatiot ja Odoo‑kehitys sekä syvällinen kokemus Odoon tietomalleista, kuten product.productista.
Tarvitsetko apua Odoo‑käyttöönotossasi, räätälöidyissä moduuleissa tai integraatioissa? Autamme mielellämme. Varaa esittely keskustellaksesi projektistasi.