Johdanto
Yksi Odoo-tietomallin vähemmän keskustelluista ominaisuuksista on yritysriippuvainen kenttä. Se on pieni attribuutti, joka tekee suuren eron, kun alat työskennellä moniyritysasetusten kanssa.
Useimmissa Odoo-asetuksissa kenttä tietueessa sisältää yhden arvon, jonka jokainen käyttäjä tietokannassa voi nähdä. Mutta mitä tapahtuu, kun kaksi yritystä jakaa saman tuoteluettelon, ja jokaisella yrityksellä on oma sisäinen viitenumeronsa? Tai kun eri yrityksillä on tarpeen käyttää eri oletustilejä samassa tuotteessa?
Juuri tätä ongelmaa company_dependent -attribuutti ratkaisee. Olitpa sitten tekemässä Odoo-kehitystä, Odoo-mukautuksia tai vain tutkimassa Odoo-kehystä, tämän kenttätyypin ymmärtäminen antaa sinulle todellisen edun moniyritysprojekteissa.
Mikä on Odoossa yritysriippuvainen kenttä
Yksi yritysriippuvainen kenttä on kenttä, joka tallentaa erillisen arvon per yritys samassa tietueessa. Kun käyttäjä, joka kuuluu Yritys A:han, lukee kenttää, hän näkee oman yrityksensä arvon. Kun käyttäjä Yritys B:stä lukee saman tietueen, hän näkee erilaisen arvon.
Ulkoisesti se näyttää ja käyttäytyy kuin normaali kenttä. Käyttäjät vuorovaikuttavat sen kanssa samalla tavalla Odoo-käyttöliittymässä. Taustalla tapahtuu taikuutta Odoo ORM:ssä.
Miten se näkyy käyttöliittymässä
Odoo-käyttöliittymässä yritysriippuvainen kenttä näyttää identtiseltä tavalliselle kentälle. Ei ole näkyvää indikaattoria, joka kertoisi käyttäjälle, että näkemä arvo on yrityskohtainen. Tämä on tarkoituksellista: käyttäytyminen on läpinäkyvää loppukäyttäjille.
Kehittäjän näkökulmasta tämä on yksi Odoo-kenttätyypeistä, joita voidaan soveltaa moniin peruslajeihin: Char, Boolean, Integer, Float, Many2one ja muihin. company_dependent=True -attribuutti aktivoi tämän käyttäytymisen Odoo ORM:ssä.
Odoo Studiossa jotkin yritysriippuvaiset kentät on jo avattu standardimalleissa (kuten tuoteperusteiset kentät tileille). Mukautettuja yritysriippuvaisia kenttiä voidaan myös luoda, vaikka Studion tuki tälle erityiselle attribuutille on rajoitettua joissakin Odoo-versioissa.
Kuinka kenttä toimii
Taustalla yritysriippuvaiset kentät toimivat hyvin eri tavalla kuin tavalliset kentät. Mekanismin ymmärtäminen auttaa välttämään yllätyksiä Odoo-mukautusten rakentamisessa tai vianetsinnässä.
Tallennus ir.propertyssä
Odoo 16:ssa ja aikaisemmissa versioissa yritysriippuvaisten kenttäarvojen ei tallenneta mallin omaan tietokantatauluun. Sen sijaan ne tallennetaan erilliseen järjestelmätauluun, jota kutsutaan ir.property.
Jokainen merkintä ir.property yhdistää:
- Tietyn tietueen (esim. tuote, jonka ID on 42)
- Tietyn kentän (esim.
property_account_income_id) - Tietty yritys
- Todellinen arvo kyseiselle yhdistelmälle
Tämä on syy siihen, miksi arvot näyttävät käyttäjille läpinäkyviltä: ORM noutaa ja kirjoittaa ir.property automaattisesti nykyisen yrityskontekstin perusteella.
Muutokset Odoo 17+:ssa
Odoo 17:stä alkaen tallennusmekanismi on uudistettu. Yrityksestä riippuvaiset kentät tallennetaan nyt suoraan mallin tauluun käyttäen jsonb -saraketta, jossa yritysarvot tallennetaan JSON-sanakirjana. Tämä parantaa merkittävästi suorituskykyä ja yksinkertaistaa kyselyitä.
Käyttöliittymä ja kehittäjäpuoleinen API pysyvät samoina, mutta yrityksestä riippuvien kenttien kyselyt ovat nyt paljon nopeampia suuressa mittakaavassa.
Oletusarvot
Yrityksestä riippuvat kentät tukevat yrityskohtaisia oletusarvoja. Kun tietylle yritykselle ei ole nimenomaisesti asetettu arvoa, kenttä palautuu kentälle itselleen määriteltyyn oletusarvoon. Tämä oletusarvo voidaan myös asettaa yrityskohtaisesti ir.property -mallin kautta (Odoo 16 ja aikaisemmin) tai suoraan mallissa (Odoo 17+).
Vuorovaikutus ORM:n kanssa
Odoo ORM -kontekstissa yrityksestä riippuvan kentän käyttö aina kunnioittaa ympäristön nykyistä yritystä (self.env.company). Tämä tarkoittaa:
- Kentän lukeminen palauttaa arvon aktiiviselle yritykselle
- Kenttään kirjoittaminen päivittää vain arvon aktiiviselle yritykselle
- Yrityksen kontekstin vaihtaminen (
record.with_company(company)) antaa sinun lukea tai kirjoittaa arvoja tietylle yritykselle.
Liiketoimintakäyttötapaukset
Yrityksestä riippuva kenttä ei ole vain tekninen kuriositeetti. Se ratkaisee todellisia, jokapäiväisiä ongelmia moniyritys Odoo-asetuksissa. Tässä on viisi yleistä skenaariota, joissa se todella ansaitsee paikkansa.
1. Kirjanpito: Yrityskohtaiset tulot ja menotilit
Tämä on yleisin esimerkki Odoosta sellaisenaan. property_account_income_id ja property_account_expense_id -kentät tuotteilla ovat yrityskohtaisia.
Käytännössä: Yritys A myy samaa tuotetta kuin Yritys B, mutta kummallakin yrityksellä on erilainen tilikartta. Sen sijaan, että tuoterekisteriä kopioitaisiin, jokainen yritys vain määrittää omat kirjanpitolinjansa. Tuote on jaettu; kirjanpitologikka ei ole.
2. Myynti ja CRM: Yrityskohtaiset hintalistat
Monia myyntiyksiköitä pyörittävässä ryhmässä jokainen yritys voi käyttää erilaisia hinnoittelustrategioita. Yrityskohtaisen hintalistakentän avulla jaettu asiakastietue voi sisältää erilaisia oletushintalistoja sen mukaan, mikä yritys käsittelee myynnin.
Tämä pitää CRM-tiedot keskitettyinä samalla, kun jokainen yritys voi soveltaa omia kaupallisia sääntöjään.
3. Varasto: Yrityskohtainen varaston arvostusmenetelmä
Jotkut ryhmät toimivat varastoissa useiden oikeushenkilöiden kesken, joilla on erilaisia paikallisia sääntöjä. Tuote voi vaatia FIFO-kustannuksia yhdessä maassa ja keskimääräisiä kustannuksia toisessa. Yrityskohtaisia kenttiä tuotteen tai kategorian kohdalla käyttämällä vältetään koko tuotekatalogin kopioiminen.
4. Valmistus: Yrityskohtainen oletustoimittaja
Kun jaettua tuotetta ostetaan eri toimittajilta riippuen yrityksestä, yrityskohtainen many2one-kenttä, joka osoittaa res.partner:iin, voi pitää mieluisan toimittajan per yksikkö. Jokainen yritys näkee oman mieluisan toimittajansa ilman ristiriitoja.
5. Mukautetut kentät sääntelytietoja varten
Useat maissa toimivat ryhmät tarvitsevat usein tallentaa maakohtaisia vaatimustenmukaisuuden viittauksia jaettuihin tietoihin. Esimerkiksi tuotteella saattaa olla eri HS-koodi tai veroluokitus eri lainkäyttöalueilla. Yrityksen riippuvainen Char -kenttä on siisti, vähäisen kuormituksen tapa käsitellä tätä ilman, että luodaan mallivariantteja.
Kentän luominen tai mukauttaminen
Odoossa on kaksi pääasiallista tapaa luoda yritysriippuvaisia kenttiä: käyttämällä Odoo Studioa tai kirjoittamalla Python-koodia suoraan.
Käyttäen Odoo Studioa
Odoo Studio antaa sinun luoda kenttiä ilman koodia. Kuitenkin, Studio ei tarjoa omistettua kytkintä company_dependent kaikissa versioissa. Odoo 16:ssa ja 17:ssa vaihtoehto on saatavilla joissakin kenttätyypeissä, kun luodaan uusia kenttiä vakiomalleissa.
Jos tarvitset täyttä hallintaa tästä ominaisuudesta, tekninen kehitys on luotettavampi lähestymistapa. Studio on hyvä lähtökohta yksinkertaisemmille tapauksille, mutta sillä on rajoituksia, kun on kyse edistyneistä Odoo-kustomointitilanteista.
Tekninen lähestymistapa: Python-kentät
Mukautetussa Odoo-moduulissa yritysriippuvan kentän määrittäminen on suoraviivaista. Tämä on standardimalli, jota käytetään Odoo Python -kenttien kehityksessä:
from odoo import fields, models
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_internal_ref = fields.Char(
string='Sisäinen viite (yrityksen mukaan)',
company_dependent=True,
)
x_preferred_carrier_id = fields.Many2one(
comodel_name='res.partner',
string='Suositeltu kuljetusliike',
company_dependent=True,
)
Lisäämällä company_dependent=True mihin tahansa kenttäilmoitukseen on kaikki, mitä tarvitaan. ORM käsittelee loput automaattisesti.
Oletusarvojen asettaminen yrityskohtaisesti
Odoo 16:ssa ja aikaisemmissa versioissa voit asettaa yrityskohtaisen oletusarvon ir.property -mallin kautta. Tämä on hyödyllistä, kun haluat järkevän oletusarvon kaikille yrityksen tiedoille ilman, että asetat sen tietueittain:
self.env['ir.property']._set_default(
'x_internal_ref',
'product.template',
'DEFAULT-VALUE',
company_id=self.env.company.id,
)
Odoo 17+:ssa oletusarvo tallennetaan suoraan mallin tietueeseen ja se on myös saatavilla kenttämäärittelyn kautta.
Odoo Studio -kentät ja rajoitukset
Työskennellessäsi Odoo Studio -kenttien kanssa, pidä mielessä, että x_-etuliite on pakollinen mukautetuille kentille. Yrityksestä riippuva käyttäytyminen ei välttämättä näy Studio-käyttöliittymässä, mutta sen voi silti määrittää teknisestä valikosta Asetukset, jos kehittäjätila on aktiivinen.
Parhaat käytännöt
Työskentely yrityksestä riippuvien kenttien kanssa on suoraviivaista, kunhan tunnet kaavat. Tässä ovat käytännöt, jotka säästävät aikaasi ja estävät päänsärkyä.
1. Käytä sitä vain, kun arvot todella eroavat yrityksittäin
Yrityksestä riippuvat kentät lisäävät monimutkaisuutta. Jos arvo on sama kaikilla yrityksillä, käytä tavallista kenttää. Varaa company_dependent=True kentille, joissa eri yritykset todella tarvitsevat erilaisia arvoja jaetuissa tietueissa.
2. Testaa aina moniyrityskontekstissa
Kun rakennat tai testaat ominaisuuksia, jotka liittyvät yrityksestä riippuviin kenttiin, testaa aina vähintään kahden yrityksen ollessa aktiivisena. Yhden yrityksen asetuksessa on helppo ohittaa ongelmia, jotka ilmenevät heti tuotannossa.
3. Käytä with_company() -toimintoa yritysten välisiin operaatioihin
Jos koodisi tarvitsee lukea tai kirjoittaa yrityksestä riippuvia kenttäarvoja muulle kuin nykyiselle yritykselle, käytä record.with_company(target_company). Vältä ympäristön yrityksen manuaalista vaihtamista ilman sen palauttamista.
4. Ole varovainen vientien ja tuontien kanssa
Kun viedään tietueita, jotka sisältävät yritysriippuvaisia kenttiä, viedyt arvot heijastavat käyttäjän yritystä, joka tekee viennin. Samojen tietojen tuominen eri yrityskontekstissa asettaa arvot kyseiselle yritykselle. Tämä on usein oikea käyttäytyminen, mutta ole tästä selkeä siirto- ja tietojen tuontityönkuluissa.
5. Dokumentoi, mitkä kentät ovat yritysriippuvaisia
Loppukäyttäjät harvoin tietävät, mitkä kentät ovat yritysriippuvaisia. Lyhyt huomautus sisäisessä Odoo-dokumentaatiossasi tai perehdytysmateriaaleissasi auttaa paljon. Se estää hämmennystä, kun käyttäjä vaihtaa yrityksiä ja näkee eri arvot samassa tietueessa.
6. Suosi Many2onea Charin sijaan rakenteellisille tiedoille
Kun yrityskohtainen arvo on viittaus toiseen tietueeseen (tili, hinnasto, kumppani), käytä Many2one-yritysriippuvaista kenttää sen sijaan, että tallennat nimen tekstinä. Tämä pitää tietomallin siistinä ja tekee raportoinnista luotettavampaa.
Yleiset sudenkuopat
Jopa kokeneet Odoo-kehittäjät kohtaavat ongelmia yritysriippuvaisissa kentissä. Tietäminen, mihin kiinnittää huomiota, estää turhan virheenkorjausajan.
Ansakuoppa 1: Unohtaminen yrityskontekstissa automatisoiduissa toiminnoissa
Aikataulutetut toiminnot ja palvelintoiminnot toimivat usein kontekstissa, jossa yritys on tietokannan ensimmäinen yritys, ei välttämättä se, jota odotat. Jos automatisoitu toimintosi lukee tai kirjoittaa yritysriippuvaista kenttää, varmista yrityskonteksti eksplisiittisesti. Käytä with_company() ollaksesi turvallinen.
Ansakuoppa 2: Oletus, että kenttä käyttäytyy kuten laskettu kenttä
Yritysriippuvaiset kentät eivät ole laskettuja kenttiä. Niillä ei ole compute-metodia. Yrityskohtainen vaihtelu tulee tallennuksesta, ei laskennasta. Yrittäminen lisätä compute= yhdessä company_dependent=True:n kanssa ei toimi odotetusti ja voi aiheuttaa virheitä Odoo-kehyksessä.
Ansakuoppa 3: Etsiminen yritysten välillä
Vakiot ORM-haku yritysriippuvaisilla kentillä palauttaa vain tuloksia, jotka vastaavat nykyistä yrityskontekstia. Jos sinun tarvitsee etsiä kaikkien yritysten välillä, sinun on kysyttävä ir.property suoraan (Odoo 16 ja aikaisemmin) tai käsiteltävä jsonb-sarake huolellisesti (Odoo 17+). Tämä on yleinen hämmennyksen lähde raportoinnissa ja tietojen poimintatyössä.
Käytävä 4: Oletusten asettamatta jättäminen kaikille yrityksille
Kun esittelet yritysriippuvaisen kentän toimivassa järjestelmässä, olemassa olevat tiedot palauttavat False tai None kaikille yrityksille, joille ei ole nimenomaisesti asetettu arvoa. Jos liiketoimintalogiikkasi odottaa oletusta, aseta se ennakoivasti kaikille asiaankuuluville yrityksille käyttämällä tietomigraatiokirjoitusta.
Käytävä 5: Sen sekoittaminen käyttöoikeuksiin
Yritysriippuvaiset kentät hallitsevat sitä, mikä arvo näytetään, eivätkä sitä, voiko käyttäjä nähdä kentän lainkaan. Jos sinun tarvitsee piilottaa kenttä kokonaan tietyiltä yrityksiltä tai käyttäjiltä, se on tehtävä tietueiden sääntöjen tai kenttäkohtaisen käyttöoikeuden avulla, ei company_dependent:n.
Yhteenveto
Yritysriippuvainen kenttä on yksi niistä ominaisuuksista Odoossa, joka tuntuu näkymättömältä, kunnes tarvitset sitä, ja sitten siitä tulee korvaamaton. Se on oikea työkalu mihin tahansa tilanteeseen, jossa sama tietue tarvitsee kantaa erilaisia arvoja eri yrityksissä: kirjanpidon asetukset, hinnoittelusäännöt, sääntelyviitteet tai mikä tahansa liiketoimintaan liittyvä ominaisuus, joka vaihtelee oikeushenkilön mukaan.
Ymmärtäminen siitä, miten se toimii ORM-tasolla, mikä Odoo-versio muutti tallennusmallia ja mitä ansaista välttää, säästää sinulta merkittävästi aikaa moniyritysprojekteissa. Olitpa sitten kohdannut sen Odoo-kehittäjän oppaassa tai löytänyt sen virheenkorjauksen aikana toimivassa järjestelmässä, tämän kenttätyypin tunteminen on todellisen Odoo-asiantuntemuksen merkki.
Jos rakennat Odoo-kehystä ja sinun tarvitsee käsitellä yrityskohtaisia tietoja siististi, company_dependent=True on etsimäsi vastaus.
Tarvitsetko apua Odoo-toteutuksessasi?
Dasolossa autamme yrityksiä toteuttamaan, mukauttamaan ja optimoimaan Odoo:ta kaikilla mittakaavoilla ja kokoonpanoilla, mukaan lukien monimutkaiset moniyritysasetukset. Olitpa sitten tarvitsemasi räätälöity tietomalli, mukautettu kenttästrategia tai täydellinen Odoo-käynnistys, tiimillämme on teknistä ja toiminnallista syvyyttä saada se oikein.
Jos sinulla on kysymyksiä yritysriippuvaisista kentistä tai mistä tahansa muusta Odoo-toteutuksesi osa-alueesta, autamme mielellämme. Ota meihin yhteyttä ja keskustellaan siitä, mitä olet rakentamassa.