Johdanto
Odoossa tieto on järjestetty malleihin: ne määrittävät, miten yrityksen tiedot tallennetaan ja liittyvät toisiinsa. Myynnit, laskut ja varastosiirrot — kaikki tallennetaan malleihin, jotka toimivat järjestelmän tietorakenteen selkärankana.
Mallien tuntemus on olennaista sekä kehittäjille että prosessiasiantuntijoille. Mallit kertovat, mitä kenttiä on, miten tietueet linkittyvät ja missä kohtaa liiketoimintasäännöt hyppäävät peliin — siksi ne ovat Odoon arkkitehtuurin kulmakivi.
Tässä tekstissä keskitytään yhteen Odoon keskeisistä malleista: stock.move. Jos rakennat varaston omaa logiikkaa, yhdistät ulkoisia järjestelmiä tai määrittelet inventaariprosesseja, tulet törmäämään tähän malliin usein.
Mikä on stock.move-malli
Stock.move edustaa yhtä yksittäistä tavaransiirtoa järjestelmässä: se kuvaa tuotteen siirtymisen paikasta A paikkaan B. Joka kerta kun hyllyltä otetaan tavaraa, varastoa siirretään tai lähetys lähetetään asiakkaalle, järjestelmään syntyy stock.move-tietue.
Inventaario-moduuli (Inventory/Stock) luo ja käsittelee stock.move-tietueita. Myynti, ostot, valmistus ja verkkokauppa tuottavat siirtoja aina kun varastotoimenpiteitä tarvitaan — esimerkiksi toimituksen vahvistus tai tavaran vastaanotto päivittää näitä tietueita.
Mallin ydin sijaitsee stock-moduulissa, mutta muut moduulit laajentavat sitä perintämallien avulla. Myynti lisää viittauksen myyntiriville, ostot liittävät ostorivin ja valmistus yhdistää siirrot valmistustilaukseen — kukin lisäys täydentää ydintä ilman sen kopiointia.
Tärkeimmät kentät mallissa
Seuraavaksi käyn läpi stock.move-mallin tärkeimmät kentät. Näiden ymmärtäminen auttaa sinua hallitsemaan varastosiirtoja oikein ja välttämään yleisiä sudenkuoppia.
1. name
Tyyppi: Char. Tämä kenttä pitää yllä siirron kuvausta tai nimeä, joka näkyy listoissa ja näkymissä. Usein nimi muodostuu tuotteen nimestä ja määrästä, ja se toimii käyttäjän ensimmäisenä tunnisteena siirrolle.
2. product_id
Tyyppi: Many2one (product.product). Siirrettävä tuote. Pakollinen kenttä — jokainen siirto viittaa tuotteeseen, ja tämä tieto on tärkeä määrien seurannassa sekä varastonsäännöissä.
3. product_uom
Tyyppi: Many2one (uom.uom). Tämän siirron mittayksikkö. Usein sama kuin tuotteen oletusyksikkö ja järjestelmä varmentaa, että määrät ovat tässä yksikössä.
4. product_uom_qty
Tyyppi: Float. Siirron pyydetty määrä siinä mittayksikössä. Tämä on suunniteltu/vaadittu määrä — toteutunut määrä kirjataan erilliseen kenttään, kun siirto käsitellään.
5. quantity
Tyyppi: Float. Näytettävä tai laskettu määrä, jota käytetään käyttöliittymässä. Saattaa olla sama kuin product_uom_qty tai toiseen yksikköön konvertoitu arvo käyttäjäystävällisyyttä varten.
6. location_id
Tyyppi: Many2one (stock.location). Lähdepaikka eli mistä tavara otetaan. Pakollinen. Lähtöpaikka voi olla varasto, toimittaja tai tuotantopaikka riippuen operaatio-tyypistä.
7. location_dest_id
Tyyppi: Many2one (stock.location). Kohdepaikka eli minne tavara siirtyy. Pakollinen. Vastaanoton kohde voi olla varasto, asiakas tai hävitysalue tilanteesta riippuen.
8. picking_id
Tyyppi: Many2one (stock.picking). Siirto ryhmitellään picking-dokumenttiin — esimerkiksi toimitus, vastaanotto tai sisäinen siirto. Picking tekee siirroista helpommin hallittavia käyttäjälle.
9. picking_type_id
Tyyppi: Many2one (stock.picking.type). Operaation tyyppi: lähteekö tavara asiakkaalle, saapuuko se toimittajalta vai siirretäänkö sisäisesti. Tämä ohjaa työnkulkua ja oletuspaikkoja.
10. state
Tyyppi: Selection. Siirron tila: draft, waiting, confirmed, assigned, done, cancelled. Esimerkiksi assigned tarkoittaa, että varaukset on tehty ja done että siirto on suoritettu loppuun.
11. date
Tyyppi: Datetime. Suunniteltu ajankohta siirrolle. Käytetään ajoituksessa ja priorisoinnissa, kun varastotoimia suunnitellaan.
12. date_deadline
Tyyppi: Datetime. Viimeinen sallittu ajankohta siirrolle — usein luvattu toimituspäivä asiakkaalle. Auttaa määrittämään kiireellisyyden.
13. origin
Tyyppi: Char. Viittaus alkuperäiseen dokumenttiin, kuten myynti- tai ostotilaukseen tai valmistusnumeroon. Helpottaa jäljitettävyyttä ja raportointia.
14. move_dest_id
Tyyppi: Many2one (stock.move). Linkki seuraavaan siirtoon ketjussa. Kun yhden siirron tulos ruokkii toista (esim. valmistuksen lähtö tavaran toimitukseen), tämä kenttä yhdistää ne.
15. move_orig_ids
Tyyppi: One2many (stock.move). Alkuperäiset siirrot, jotka syöttävät tätä siirtoa. Tämä on move_dest_id:n käänteinen suhde ja auttaa kokonaisketjun seuraamisessa.
16. move_line_ids
Tyyppi: One2many (stock.move.line). Tarkennetut siirtorivit, joissa voi olla erä- tai sarjanumerot sekä paikkakohtaiset tiedot. Kun varaus tehdään tai siirto käsitellään, näistä syntyy rivejä.
17. partner_id
Tyyppi: Many2one (res.partner). Liittyvä yhteistyökumppani: asiakas toimituksissa, toimittaja vastaanotoissa. Käytetään myös osoite- ja raportointitiedoissa.
18. company_id
Tyyppi: Many2one (res.company). Moniyritysmäärityksissä kertoo, mille yritykselle siirto kuuluu. Vaikuttaa näkyvyyteen ja yritysten välisiin sääntöihin.
19. quantity_done
Tyyppi: Float. Todellinen käsitelty määrä. Kun varastotyöntekijä merkitsee tavarat poimituksi tai vastaanotetuksi, tämä kenttä päivittyy. Siirto katsotaan tehdyksi kun quantity_done vastaa product_uom_qty:tä.
20. reserved_availability
Tyyppi: Float. Kuinka paljon määrää on varattu tälle siirrolle. Varaus tehdään assigned-tilassa ja tämä kenttä kertoo käytettävissä olevan varauksen.
21. create_date
Tyyppi: Datetime. Tallentaa tietueen luontiajankohdan. Odoon hallinnoima automaattinen kenttä, hyödyllinen auditointeihin ja raportteihin.
22. write_date
Tyyppi: Datetime. Tallentaa viimeisimmän muokkauksen ajan. Automaattisesti ylläpidetty, auttaa seuraamaan muutoksia.
23. sequence
Tyyppi: Integer. Näyttöjärjestys pickingin sisällä. Pienemmät arvot näkyvät ennen suurempia, joten tätä käytetään siirtojen järjestämiseen käyttöliittymässä.
24. priority
Tyyppi: Selection. Kiireellisyystaso, esimerkiksi normaali tai kiireellinen. Vaikuttaa ajoitukseen ja resurssien kohdentamiseen varasto-operaatioissa.
25. description_picking
Tyyppi: Char. Vapaa tekstikenttä poimintaohjeille tai huomautuksille, joka näkyy picking-dokumenteissa esimerkiksi käsittelyohjeiden kertomista varten.
26. reference
Tyyppi: Char. Sisäinen viite tai koodi — hyödyllinen integraatioissa tai kun halutaan säilyttää ulkoisia tunnisteita.
27. group_id
Tyyppi: Many2one (procurement.group). Hankintaryhmä, joka yhdistää samasta hankinnasta syntyneet siirrot, kuten yhden myyntitilauksen rivit. Käytetään suunnittelussa ja ketjutuksessa.
28. procure_method
Tyyppi: Selection. Määrittää tehdäänkö varastosta vai käynnistetäänkö tuotanto/osto (make to stock vs make to order). Vaikuttaa siihen, miten tarve hoidetaan.
29. sale_line_id
Tyyppi: Many2one (sale.order.line). Myyntimoduulin lisäämä kenttä, joka yhdistää siirron sitä luoneeseen myyntiriviin — tärkeä jäljitettävyydelle.
30. purchase_line_id
Tyyppi: Many2one (purchase.order.line). Ostomoduulin kenttä, joka linkkaa siirron ostoriville, kun tavara vastaanotetaan toimittajalta.
31. production_id
Tyyppi: Many2one (mrp.production). Valmistusmoduulin kenttä, joka liittää raaka-aine- ja tuotossiirrot tiettyyn valmistustilaukseen.
32. active
Tyyppi: Boolean. Pehmeä poistoflagi — kun False, tietue arkistoidaan eikä näy oletusnäkymissä. Tietueita ei yleensä poisteta fyysisesti tietokannasta.
Miten mallia käytetään liiketoimintaprosesseissa
1. Asiakastoimitus
Myyntitilauksen vahvistus luo siirrot jokaiselle riville: lähde on varasto ja kohde asiakkaan osoite. Nämä siirrot ryhmitellään pickingiksi (toimitus). Kun varasto poimii ja lähettää tilauksen, quantity_done päivittyy ja siirron tila muuttuu doneksi.
2. Toimittajan vastaanotto
Ostotilauksen vahvistus luo saapuvat siirrot: lähteenä on toimittajan paikka ja kohteena varasto. Siirrot muodostavat vastaanoton; kun tavara saapuu, käyttäjä vahvistaa ja kirjattu määrä päivittyy toteutuneeksi.
3. Sisäiset siirrot
Varastojen ja paikkojen välinen siirto luo stock.move-tietueen: lähde on se varasto josta tavara lähtee ja kohde se varasto jonne se saapuu. Tällaisia käytetään täydennyksiin, varaston tasapainotukseen ja monivarastoympäristöissä.
4. Valmistus
Valmistustilaukset luovat sekä raaka-aineiden sisäänmenot että valmiiden tuotteiden ulosmenot. production_id-linkki yhdistää siirrot valmistukseen ja move_dest_id-ketjutus yhdistää valmistuksen tuotokset seuraaviin toimituksiin.
5. Palautukset ja hävitys
Asiakaspalautukset syntyvät käänteisinä siirtoina ja hävitys luo siirrot roskalokaatioon. Sama stock.move-malli hallinnoi kaikkia näitä tilanteita; picking_type_id määrittelee millainen operatio on käynnissä.
Miten kehittäjät laajentavat tätä mallia
Kehittäjät laajentavat stock.move-mallia useilla tavoilla, joista yleisin on Odoon model inheritance -mekanismi.
Malliperintä
Käytä _inherit = 'stock.move' -ratkaisua lisätäksesi kenttiä, ylikirjoittaaksesi metodeja tai lisätäksesi rajoitteita. Perintä pitää muutoksesi erillisessä moduulissa, mikä helpottaa päivityksiä ja ylläpitoa.
Kenttien lisääminen
Lisää uusia kenttiä perityssä mallissa oikealla tyypillä: Char, Many2one, Boolean, Integer, Text tai Selection. Moniyrityksisissä ympäristöissä kannattaa harkita yritysriippuvaisia kenttiä. Varastosovelluksissa yleisiä lisäyksiä ovat vaikkapa oma seurantakoodi tai kuljetusyrityksen viitteet.
Python-laajennukset
Ylikirjoita metodeja kuten _action_done, _action_assign tai _action_cancel lisätäksesi liikelogikkaa. Käytä super()-kutsuja alkuperäisen toiminnan säilyttämiseen ja ole varovainen varastotapahtumien ja ketjutuksen kanssa.
Odoo Studio
Odoo Studio on nopea tapa lisätä kenttiä ilman koodausta — sopii pikamuutoksiin. Monimutkaisempia työnkulku- tai integraatiomuutoksia kannattaa kuitenkin tehdä moduuleina, jotta ne pysyvät hallittavina ja versiopäivitettävissä.
Parhaat käytännöt
- Aseta aina location_id ja location_dest_id oikein. Väärät paikat johtavat helposti virheellisiin varastomääriin ja varausongelmiin.
- Käytä picking_id:tä siirtojen ryhmittelyyn. Älä luo siirtoja irrallaan, jos ne kuuluvat tiettyyn siirtoon tai prosessiin.
- Kun rakennat integraatioita, käytä XML-RPC- tai JSON-RPC-rajapintaa. stock.move on saatavilla API:n kautta — huolehdi, että ulkoiset ID:t ja vastaavuudet kartoitetaan tarkasti.
- Nimeä mukautetut kentät x_-etuliitteellä tai moduulikohtaisella prefiksillä, jotta vältät konfliktit tulevien Odoo-päivitysten kanssa.
- Hyödynnä move_dest_id:tä ja move_orig_ids:ia jäljitettävyyteen. Kun luot ketjutettuja siirtoja ohjelmallisesti, varmista että linkit ovat oikein asetettuja.
- Huomioi quantity_done ja product_uom_qty erot — osatoimitukset ovat mahdollisia, joten validoinnissa täytyy käsitellä erot oikein.
Yleisimmät virheet
- Luo siirtoja väärillä sijaintyypeillä. Lähteen ja kohteen on oltava loogisesti yhteensopivia (esimerkiksi kumpikaan ei saa olla asiakkaan sijainti kun kyse on sisäisestä siirrosta).
- Muuta product_uom_qty:tä sen jälkeen kun move_line:t on luotu voi rikkoa inventaarilaskentaa. Jos määrää täytyy muuttaa, harkitse siirron perumista ja uudelleenluontia.
- Unohda origin-kenttä vaikeuttaa jäljittävyyttä. Ilman alkuperäistä viitettä on työläämpää löytää mistä siirto on peräisin.
- Ylikirjoita _action_done ilman super()-kutsua voi estää varasto-operaatioiden päivittymisen oikein ja rikkoa muita moduuleja.
- Luo siirtoja suoraan ohittaen picking-työnkulun — tämä voi rikkoa varaukset ja tehtävien hallinnan, joten käytä oikeita metodeja aina kun mahdollista.
- Jätä move_dest_id huomioimatta siirtoja pilkottaessa tai yhdistettäessä — ketjut voivat jäädä orvoiksi ja jäljitettävyys katkeaa.
Yhteenveto
Stock.move on varaston keskeinen tietomalli: se tallettaa tavaran liikkeet paikasta toiseen. Mallin kenttien ja laajennustapojen ymmärtäminen auttaa sinua konfiguroimaan, räätälöimään ja yhdistämään Odoota oikein.
Olitpa sitten prosessikonsultti joka suunnittelee varaston työnkulkuja tai kehittäjä joka rakentaa räätälöityjä moduuleja, hyvä ymmärrys stock.move:sta säästää aikaa ja vähentää virheitä.
Tarvitsetko apua Odoo-toteutuksessasi?
Dasolo auttaa yrityksiä Odoo-toteutuksissa, räätälöinnissä ja optimoinnissa. Erikoisalaamme ovat API-integraatiot ja Odoo-kehitys — tiimillämme on vankka kokemus Odoon tietomalleista kuten stock.move.
Tarvitsetko apua Odoo-toteutukseesi, mukautettuihin moduuleihin tai integraatioihin? Ota yhteyttä — autamme mielellämme. Varaa demo keskustellaksesi projektistasi.