Johdanto
Float-kenttä on yksi Odoon yleisimmin käytetyistä kenttätyypeistä, kun tietosi sisältävät desimaalilukuja. Yksikköhinnat, tuotepainot, alennusprosentit, verokannat, muuntokerroin materiaaliluetteloissa - kaikki nämä tallennetaan tyypillisesti Float-kenttinä Odoon tietomallissa.
Ensisilmäyksellä se näyttää yksinkertaiselta numeeriselta syötteeltä. Mutta on useita asioita, jotka on syytä tietää sen tarkkuuden käsittelystä, siitä, miten se käyttäytyy raporteissa ja aggregaatioissa, ja milloin sinun tulisi käyttää toista kenttätyyppiä sen sijaan.
Tämä opas kattaa, mitä Float-kenttä tallentaa, miten se käyttäytyy Odoo-kehyksessä, kuinka luoda ja mukauttaa sitä Odoo Studiolla tai Pythonilla, sekä todellisia liiketoimintakäyttötapauksia myynnin, varaston ja kirjanpidon alueilla.
Mikä on Float-kenttä Odoossa
Odoon ORM:ssä Float-kenttä tallentaa desimaalilukuja. Se vastaa double precision -saraketta PostgreSQL:ssä, joka tarjoaa jopa 15 merkitsevää numeroa tarkkuutta. Useimmissa liiketoimintakäyttötapauksissa se on paljon enemmän kuin tarvitset.
Käyttäjän näkökulmasta Float-kenttä näkyy numeerisena syöttönä lomake näkymissä. Näytettävien desimaalien määrä määräytyy kentälle määrittelemäsi digits-parametrin mukaan. Luettelonäkymissä Float-arvot näkyvät samalla tarkkuudella ja ne on oletusarvoisesti oikealle tasattu. Pivot-taulukoissa ja kaavioissa Float-kentät osallistuvat aggregaatioihin, kuten summa, keskiarvo tai maksimi.
Tässä on, miltä se näyttää Python-mallin määrittelyssä:
from odoo import fields, models
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
custom_margin = fields.Float(
string='Custom Margin',
digits=(5, 2),
default=0.0,
)
digits-parametri on tuple. Ensimmäinen numero on merkittävien numeroiden kokonaismäärä, toinen on desimaalien määrä. Joten (5, 2) sallii enintään viisi merkittävää numeroa kahdella desimaalilla.
Voit myös viitata nimettyyn tarkkuusryhmään sen sijaan, että koodaisit desimaalit kovakoodattuna:
price_premium = fields.Float(
string='Price Premium',
digits='Product Price',
)
Odoossa on useita sisäänrakennettuja tarkkuusryhmiä, joita hallitaan kohdassa Asetukset > Tekniset > Tietokannan rakenne > Desimaalitarkkuus. Pääryhmät sisältävät Tuotteen hinta, Tuotteen yksikkö, Alennus ja Varaston paino. Tarkkuusryhmien käyttäminen tarkoittaa, että käyttäjät voivat säätää desimaalitarkkuutta käyttöliittymästä ilman koodimuutoksia.
Odoo Studiolla Float-kenttä on merkitty Desimaaliluku. Kun se luodaan Studion kautta, se käyttää oletustarkkuutta, ellei sitä muuten määritellä kenttäominaisuuksien paneelissa. Tämä tekee siitä yhden helpoimmista Odoo-studio kentistä liiketoimintakäyttäjille, jotka tarvitsevat lomakkeiden laajentamista ilman kehittäjätukea.
Kuinka kenttä toimii
Kun määrittelet Float-kentän Odoossa, kehys hoitaa sarakkeen luomisen tietokannassa automaattisesti moduulin asennuksen tai päivityksen aikana. Manuaalisia SQL- tai migraatiokirjoituksia ei tarvita.
digits-parametri hallitsee kahta asiaa kerralla: miten arvot näytetään käyttöliittymässä ja miten ne pyöristetään ennen tallentamista. Jos määrität digits=(6, 2) ja käyttäjä syöttää 3.14159, Odoo pyöristää ja tallentaa 3.14. Tämä pyöristys tapahtuu ORM-tasolla, ei vain näyttökerroksessa.
Keskeiset kenttäominaisuudet
Nämä ovat tärkeimmät ominaisuudet, joita voit määrittää Float-kentälle Odoo-kehyksessä:
- digits: Tupla kuten
(6, 2)tai nimetty tarkkuusryhmän merkkijono. Hallitsee sekä näyttö- että tallennustarkkuutta. - required: Tekee kentästä pakollisen. Float-kenttä, jonka arvo on
0.0, läpäisee pakollisuuden tarkistuksen, mikä ei aina ole tarkoitetun käyttäytymisen mukaista. - default: Oletusarvo, kun uusi tietue luodaan. Asettamalla
default=0.0varmistetaan, että kentällä on aina numeerinen arvo eikäFalse. - compute: Linkittää Python-menetelmän, joka laskee kentän arvon dynaamisesti. Hyödyllinen johdettujen arvojen, kuten marginaalien tai muunnosresultaatin, laskemiseen Odoo-laskettavissa kentissä.
- store: Kun käytetään yhdessä
compute:n kanssa, tallentaa lasketun arvon tietokantaan, jotta sitä voidaan etsiä, suodattaa ja ryhmitellä. - group_operator: Hallitsee, miten kenttä aggregoidaan pivot- ja graafinäkymissä. Yleisiä arvoja ovat
'sum','avg','min'ja'max'. Float-kentät oletusarvoisesti'sum'. - copy: Hallitsee, kopioidaanko arvo tietueen monistamisen yhteydessä. Oletusarvoisesti
True.
Miten se näkyy näkymissä
Lomakenäkymissä Float-kenttä renderöidään numeerisena syöttönä. Näyttö kunnioittaa käyttäjän paikallista asetusta desimaalierottimille. Luettelonäkymissä Float-arvot ovat oletusarvoisesti oikealle tasattu. Hakunäkymissä voit suodattaa Float-arvojen mukaan käyttäen numeerisia vertailuoperaattoreita.
Voit soveltaa widgettejä Float-kenttiin näkymissä. percentage-widget esimerkiksi kertoo tallennetun arvon 100:lla näyttöä varten ja lisää prosenttimerkin, mikä on hyödyllistä kentille, jotka tallentavat arvoja 0-1 alueella. Tämä on yleinen malli Odoo-kehityksessä työskennellessäsi korkojen ja tekijöiden kanssa.
Vuorovaikutus Odoo ORM:n kanssa
Float-kentän lukeminen antaa sinulle Pythonin floatin tai False, jos kenttää ei ole asetettu eikä oletusarvoa ole määritelty. Kirjoittaminen Float-kenttään hyväksyy kokonaislukuja, liukulukuja tai False. ORM soveltaa tarkkuutta digits:stä tallennushetkellä.
Yksi tärkeä huomio Odoo-kehitykselle: älä vertaa Float-arvoja == Pythonissa. Koska liukuluku-aritmetiikka toimii laitteistotasolla, arvot, jotka näyttävät olevan yhtä suuret, eivät välttämättä ole. Käytä sen sijaan float_compare ja float_is_zero -funktioita odoo.tools.float_utils -moduulista, jotka kunnioittavat Odoo-tietomallissasi määriteltyä kenttä tarkkuutta.
Liiketoimintakäyttötapaukset
Float-kenttä esiintyy lähes jokaisessa Odoo-implementaatiossa. Tässä on viisi käytännön esimerkkiä todellisista liiketoimintatyönkuluista.
Myynti: Alennusprosentit tilausriveillä
Natiivissa discount -kentässä sale.order.line on Float-kenttä. Kun myyntiedustaja soveltaa 15 % alennusta, Odoo tallentaa 15.0 ja soveltaa sitä yksikköhinnan laskentaan. Tämä arvo siirtyy tulostettuihin tarjouksiin ja asiakaslaskuihin, ja se osallistuu katteiden raportointiin. Alennusten oikea käsittely on tärkeää sekä asiakasviestinnän että liiketoiminnan kannattavuusanalyysin kannalta.
Varasto: Tuotteiden painot ja tilavuudet
Tuotteilla Odoossa on natiivit weight ja volume -kentät, jotka molemmat ovat Float-tyyppisiä. Tuote, joka painaa 2.5 kg tai vie 0.003 m3, tarvitsee desimaalitarkkuutta, jota kokonaisluku-kenttä ei yksinkertaisesti voi tarjota. Nämä arvot syötetään suoraan toimituskustannusten laskentaan ja kuljetusintegraatioihin. Jos käytät Odoota toimitusliittimen kanssa, tarkat Float-arvot painossa ja tilavuudessa määrittävät kuljetuspalvelun API:n palauttaman toimitushinnan.
Kirjanpito: Verokannat
Verokannat account.tax -kentässä ovat Float-tyyppisiä. Tavanomainen 21 % ALV tallennetaan 21.0, alennettu kanta voi olla 6.0 tai 5.5. Odoo-kirjanpito moottori lukee nämä arvot laskiessaan veromääriä jokaiselle laskulle ja toimittajalaskulle. Tarkkuus on tärkeää, koska pienet pyöristys-erot voivat kertyä satojen tapahtumien aikana ja aiheuttaa eroja veroraporteissa.
Valmistus: Materiaalien määrät
Odoo Valmistuksessa jokaisen komponentin määrä materiaaliluettelossa on Float-kenttä. Resepti saattaa vaatia 0.75 litraa nestemäistä ainesosaa tai 2.5 kg raaka-ainetta. Float-kentät käsittelevät näitä osamääriä luonnollisesti. Kokonaisluku-kentän käyttäminen tässä yhteydessä pakottaisi pyöristämään ja aiheuttaisi tuotanto-virheitä, jotka kasaantuvat ajan myötä.
Osto: Hintatekijät ja toimittajamarginaalit
Kun asetetaan toimittajien hintaluetteloita tai katteiden sääntöjä, Float-kentät tallentavat kertoimet ja marginaalit. Marginaalitekijä 1.25 (25 % katetta) tai alennustekijä 0.85 (15 % alennus listahinnasta) ovat tyypillisiä arvoja ostopohjaisessa hinnoittelulogikassa. Nämä Float-arvot syötetään automatisoituihin hintalaskentatehtäviin osto-osoitteissa ja auttavat ostoporukoita ylläpitämään johdonmukaista hinnoittelua eri toimittajien kesken.
Float-kentän luominen tai mukauttaminen
Odoo-malliin voidaan lisätä kolme pääasiallista tapaa Float-kentän lisäämiseksi, riippuen teknisestä kontekstistasi ja käyttöönotto lähestymistavastasi.
Odoo Studion käyttäminen (ilman koodia)
Odoo Studio on sisäänrakennettu low-code mukautustyökalu. Lisätäksesi Float-kentän ilman koodin kirjoittamista:
- Avaa Odoo Studio päävalikosta.
- Siirry lomakkeeseen, johon haluat kentän.
- Vedä Desimaaliluku -kenttä kenttävalitsimesta lomakkeelle.
- Aseta etiketti, oletusarvo ja desimaalien määrä ominaisuuksien paneelissa.
- Tallenna ja sulje Studio.
Studio luo kentän x_studio_ -etuliitteellä ja lisää sen automaattisesti lomake näkymään. Sinun ei tarvitse tehdä tietokantatyötä. Tämä on yksi helpoimmista tavoista luoda kenttiä Odoossa käyttäjille, jotka haluavat Odoo-mukautuksia ilman teknistä monimutkaisuutta.
Pythonin käyttäminen mukautetussa moduulissa
Odoo-moduuleja kehittävien kehittäjien on määritettävä Float-kentät suoraan Pythonissa. Tämä on suositeltava lähestymistapa kaikelle Odoo-kehitykselle, joka tarvitsee versionhallintaa ja käyttöönottoa useissa ympäristöissä:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_credit_limit = fields.Float(
string='Luottoraja',
digits=(12, 2),
default=0.0,
help='Suurin sallittu avoin saldo tälle asiakkaalle.',
)
Lisäämällä kentän malliin, sisällytä se asiaankuuluvaan näkymä XML:ään, jotta se näkyy käyttöliittymässä. Odoo käsittelee tietokannan sarakkeen automaattisesti moduulin asennuksen tai päivityksen yhteydessä. Tämä on standardi Odoo-kehittäjän oppaan lähestymistapa mihin tahansa vakavaan Odoo-mukautustyöhön.
XML-RPC API:n käyttäminen
Jos hallitset Odoo-mukautuksia ohjelmallisesti, esimerkiksi käyttämällä käyttöönotto-skriptiä tai etäkonfiguraatiopäiväkirjaa, voit luoda Float-kenttiä XML-RPC API:n kautta:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_custom_coefficient',
'field_description': 'Mukautettu kerroin',
'model_id': model_id,
'ttype': 'float',
'state': 'manual',
}]
)
Kentän state: manual arvo kertoo Odoole, että tämä kenttä on luotu manuaalisesti eikä moduulin kautta, mikä on oikea asetus Studio- tai API:n kautta luoduille kentille. API:n kautta luotujen Float-kenttien desimaalitarkkuus hallitaan teknisen valikon Desimaalitarkkuus-asetusten kautta. Tämä on lähestymistapa, jota Dasolo käyttää etäkenttien luomiseen osana automatisoituja Odoo-konfiguraatioskriptejä.
Parhaat käytännöt
1. Käytä nimettyjä tarkkuusryhmiä standardiarvoille
Sen sijaan, että kovakoodaisit digits=(6, 2), viittaa tarkkuusryhmään kuten 'Tuotteen hinta' tai 'Tuotteen mittayksikkö'. Tämä mahdollistaa teknistä pääsyä omaaville käyttäjille säätää tarkkuutta käyttöliittymästä ilman koodimuutoksia, ja se linjaa mukautetut kenttäsi samaan tarkkuuteen kuin alkuperäiset Odoo-kentät samassa kontekstissa.
2. Käytä rahamääriin Rahaa, ei Floatia
Tämä on tärkein kohta tässä luettelossa. Rahakenttä on erityisesti suunniteltu summille, joilla on valuutta. Se linkittää valuuttakenttään samassa mallissa, käsittelee pyöristystä valuuttasääntöjen mukaan ja toimii oikein monivaluuttaympäristöissä. Float-kentän käyttäminen laskutusmääriin tai myyntihintoihin aiheuttaa pyöristysongelmia ja rikkoo monivaluuttaraportointia.
3. Aseta aina oletusarvo
Aseta default=0.0 numeerisille kentille, joiden tulisi alkaa nollasta. Ilman oletusarvoa kentän arvo on False (null tietokannassa) ennen kuin käyttäjä täyttää sen. Tämä voi aiheuttaa odottamattomia virheitä lasketuissa kentissä tai Python-menetelmissä, jotka olettavat, että numeerinen arvo on aina läsnä.
4. Aseta group_operator raportteja varten
Jos Float-kenttä edustaa määrää tai summaa, joka on järkevää summata raporteissa, lisää group_operator='sum'. Jos se edustaa prosenttia tai suhdelukuja, joissa keskiarvo on järkevämpi, käytä group_operator='avg'. Tämä varmistaa, että pivot-taulukot ja graafiset näkymät aggregoivat tietosi merkityksellisesti, mikä on erittäin tärkeää Odoo-tietokentissä, joita käytetään analyysissä.
5. Dokumentoi prosenttikonventiot
Jos Float-kenttä tallentaa prosenttiosuuden, ole selkeä siitä, käytetäänkö 0-100-alueita (kuten alkuperäisessä discount-kentässä: 15.0 15%:lle) vai 0-1-alueita (kuten joissakin marginaalikentissä: 0.15 15%:lle). Näiden konventioiden sekoittaminen tietomallissa tuottaa hiljaisia laskentavirheitä, joita on erittäin vaikea jäljittää jälkikäteen.
Yleiset sudenkuopat
Floatin käyttäminen rahamäärille
Float-kentät eivät sisällä valuutatietoja. Float-kenttä, joka näyttää 1500, voi olla euroja, dollareita tai mitä tahansa muuta. Monivaluuttasessa Odoo-asetuksessa tämä johtaa virheellisiin kokonaislukuihin talousraporteissa. Käytä Monetary-kenttätyyppiä kaikille summille, joilla on valuutta.
Numeroparametrin asettamatta jättäminen
Ilman eksplisiittistä digits-parametria Odoo soveltaa oletus Float-tarkkuutta, joka on 2 desimaalia. Tämä on hyvä hintoja varten, mutta ei kentille, jotka tarvitsevat 4 tai 6 desimaalia, kuten valuuttakurssit tai yksikkömuunnoskerroin. Muunnoskerroin, joka on hiljaa pyöristetty 2 desimaaliin, tuottaa kumuloituvia virheitä jokaisessa tapahtumassa, joka käyttää sitä.
Float-arvojen vertailu == Pythonissa
Koska liukulukujen toiminta on laitteistotason mukaan, kaksi Float-arvoa, jotka näyttävät identtisiltä, eivät välttämättä ole yhtä suuret, kun niitä verrataan ==-operaattorilla. Esimerkiksi 0.1 + 0.2 == 0.3 arvioituu False Pythonissa. Käytä float_compare(value1, value2, precision_digits=2) ja float_is_zero(value, precision_digits=2) odoo.tools.float_utils:sta luotettavien vertailujen tekemiseen. Tämä on yleinen kohta kaikissa Odoo-teknisissä oppaissa aiheesta.
Floatin käyttäminen, kun Integer on oikea valinta
Jos kenttä sisältää aina kokonaislukuja, kuten laskentaa, pakettien määrää tai järjestysnumeroa, käytä sen sijaan Integer-kenttää. Float-kentät kokonaisluvuilla eivät ole teknisesti vääriä, mutta ne aiheuttavat tarpeetonta hämmennystä ja houkuttelevat käyttäjiä syöttämään desimaalilukuja, joissa ei ole järkeä liiketoimintayhteydessä.
False-arvojen käsittelemättä jättäminen laskentamenetelmissä
Float-kenttä ilman oletusarvoa palauttaa False (ei 0.0), kun arvoa ei ole vielä asetettu. Jos lasket Float-kenttien perusteella, tarkista aina False ennen laskentaa tai lisää yksinkertaisesti default=0.0 kentän määrittelyyn. Tämä estää TypeError poikkeuksia laskentamenetelmissä, jotka ilmenevät vain todellisissa tietotilanteissa.
Yhteenveto
Float-kenttä on Odoo-tietomallin perusrakennuspalikka. Se käsittelee desimaalilukuja hinnoissa, määrissä, kursseissa ja mittauksissa, ja se toimii luotettavasti, kun se on määritetty oikealla tarkkuudella ja oletusarvoilla.
Pääasiat, jotka on hyvä pitää mielessä: käytä nimettyjä tarkkuusryhmiä standardiarvoille, käytä Rahaa Floatin sijasta valuuttamäärille, aseta aina oletusarvo ja dokumentoi prosenttikenttien käytännöt. Nämä tavat estävät yleisimmät tietolaatuongelmat ennen kuin niillä on mahdollisuus aiheuttaa ongelmia tuotannossa.
Olitpa lisäämässä kenttiä Odoo Studiolla, kirjoittamassa mukautettua Python-moduulia tai hallinnoimassa tietomalliasi ohjelmallisesti Odoo ORM:n tai XML-RPC API:n kautta, Float-kenttien oikea määrittäminen alusta alkaen tekee kokonaisuudesta siistimmän ja luotettavamman.
Dasolossa autamme yrityksiä toteuttamaan, mukauttamaan ja optimoimaan Odoo:ta kaikilla osastoilla. Olitpa sitten suunnittelemassa siistiä tietomallia, lisäämässä mukautettuja kenttiä lomakkeisiisi tai rakentamassa täyttä Odoo-moduulia alusta alkaen, tiimimme on täällä tukemassa sinua. Ota meihin yhteyttä ja keskustellaan Odoo-projektistasi.