Johdanto
Float‑tyyppinen kenttä on Odoon perusosa, kun käsitellään desimaaliarvoja. Tuotehinnat, painot, alennusprosentit, verokannat ja valmistusreseptien muuntosuhteet tallennetaan tyypillisesti Float‑kenttiin, koska ne tarvitsevat murto‑osien tarkan tallennuksen.
Pinnalta katsottuna se on pelkkä numerokenttä, mutta taustalla on tärkeitä yksityiskohtia: tarkkuuden käsittely, pyöristykset tallennettaessa, sekä se milloin kannattaa valita jokin muu kenttätyyppi (esim. Monetary tai Integer).
Tässä oppaassa selitän, mitä Float‑kenttä tallentaa, miten Odoo‑kehys käsittelee sitä, miten kentän voi lisätä Studio‑työkalulla tai Pythonilla, sekä käytännön esimerkit Salesista, Inventorysta ja Accountingista.
Mikä on Float-kenttä Odoossa
Odoon ORM tallentaa Float‑kentän PostgreSQL:ssä double precision ‑sarakkeena, mikä tarkoittaa noin 15 merkittävää numeroa. Useimmissa liiketoimintatilanteissa tämä tarkkuus riittää hyvin.
Käyttäjän näkökulmasta Float näkyy lomakkeissa numerokenttänä, ja desimaalien määrä määräytyy kentän digits‑asetuksella. Listanäkymissä arvot ovat yleensä oikeanreunan tasausta ja sama tarkkuus näkyy myös pivot‑tauluissa ja kaavioissa, joissa kenttä voi osallistua summaan, keskiarvoon tai maksimiin.
Alla on esimerkki siitä, miten kenttä määritellään Pythonissa:
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 tuplet: ensimmäinen luku kertoo merkittävien numeroiden kokonaismäärän ja toinen desimaali‑paikkojen määrän. Esimerkiksi (5, 2) sallii enintään viisi merkittävää numeroa, joista kaksi desimaaleina.
Voit myös viitata nimetylle tarkkuusryhmälle sen sijaan, että kovakoodaisit digits‑arvon:
price_premium = fields.Float(
string='Price Premium',
digits='Product Price',
)
Odoossa on valmiita tarkkuusryhmiä (Settings > Technical > Database Structure > Decimal Accuracy). Tyypillisiä ryhmiä ovat Product Price, Product Unit of Measure, Discount ja Stock Weight. Nimettyjen ryhmien käyttö antaa käyttäjille mahdollisuuden säätää desimaalitason käyttöliittymästä ilman koodimuutoksia.
Odoo Studion näkymässä Float‑kenttä näkyy nimellä Decimal Number. Kun lisäät kentän Studiolla, se käyttää oletustarkkuutta ellei kenttäpropertiessa määritellä toisin, mikä tekee siitä helposti lisättävän ilman kehittäjäapua.
Miten kenttä toimii
Kun määrittelet Float‑kentän modulissa, Odoo huolehtii tietokantasarakkeen luomisesta asennuksen tai päivityksen yhteydessä automaattisesti — et tarvitse erillisiä SQL‑migrejä.
digits‑asetus vaikuttaa sekä näyttöön että tallennukseen: jos määrittelet digits=(6, 2) ja käyttäjä syöttää 3.14159, Odoo pyöristää ja tallentaa 3.14. Pyöristys tapahtuu ORM‑tasolla, ei vain käyttöliittymässä.
Tärkeimmät kenttäattribuutit
Seuraavat ominaisuudet ovat Float‑kentässä merkittävimmät säädettävät asetukset:
- digits: Tupelina kuten (6, 2) tai nimetty tarkkuusryhmä. Määrittää sekä näytön että tallennuksen tarkkuuden.
- required: Tekee kentästä pakollisen. Huomaa, että Float‑kenttä, jonka arvo on 0.0, täyttää pakollisuusvaatimuksen — tämä ei aina ole haluttu lopputulos.
- default: Oletusarvo uusissa riveissä. default=0.0 varmistaa, että kentässä on numeerinen arvo eikä False.
- compute: Linkittää Python‑laskentametodin, jolla kenttä lasketaan dynaamisesti, esim. kate tai muuntosuhde.
- store: compute‑kentän kanssa tämä tallentaa lasketun arvon tietokantaan, jolloin sitä voi hakea, suodattaa ja ryhmitellä.
- group_operator: Määrittää, miten kenttä aggregoituu pivot‑ ja kaaviovisualisoinneissa. Yleisimpiä arvoja ovat 'sum', 'avg', 'min' ja 'max'. Float‑kentät oletuksena summautuvat ('sum').
- copy: Ohjaa, kopioidaanko arvo tietueen duplikaatissa. Oletus on True.
Miten kenttä näkyy käyttöliittymissä
Lomakkeissa Float‑kenttä on numerokenttä ja desimaalierotin noudattaa käyttäjän lokaalia asetusta. Listoissa arvot ovat oikealle tasattuja. Hakunäkymissä voit suodattaa numerollisin vertailuoperaattorein.
Kentälle voi käyttää widgettejä: percentage‑widget muuntaa tallennetun arvon kerrannaiseksi (×100) ja lisää prosenttimerkin, mikä sopii kenttiin, jotka tallentavat 0–1‑välisiä arvoja (esimerkiksi osuuslukuja).
Vuorovaikutus Odoo ORM:n kanssa
Kun luet Float‑kentän, saat Python floatin tai False jos arvoa ei ole asetettu eikä oletusta ole. Kirjoittaessa hyväksytään int, float tai False. ORM soveltaa digits‑tarkkuutta tallennushetkellä.
Kehittäjän huomio: älä vertaile Float‑arvoja Pythonissa käyttäen ==. Laitetason liukulukujärjestelyt voivat aiheuttaa odottamattomia tuloksia; käytä odoo.tools.float_utils‑moduulin float_compare ja float_is_zero ‑työkaluja, jotka ottavat huomioon kentän tarkkuuden.
Liiketoimintatapaukset
Float‑kenttä esiintyy lähes kaikissa Odoon moduuleissa. Seuraavaksi viisi käytännön esimerkkiä liiketoimintaprosesseista.
Myynti: alennukset tilirivillä
Sale.order.line ‑rivin discount‑kenttä on Float. Kun myyjä syöttää 15% alennuksen, arvo tallentuu 15.0 ja se vaikuttaa yksikköhintaan, tarjouksiin ja laskuihin sekä katelaskentaan — oikeat alennukset ovat kriittisiä sekä viestinnälle asiakkaalle että kannattavuusanalyysille.
Varastointi: tuotteiden painot ja tilavuudet
Tuotteilla on weight ja volume ‑kentät Float‑tyyppisinä. Esimerkiksi 2.5 kg tai 0.003 m3 vaatii desimaalitarkkuutta, jota Integer ei tarjoa. Näitä arvoja käytetään suoraan kuljetuskustannusten laskennassa ja integraatioissa kuljetusyhtiöiden rajapintojen kanssa.
Kirjanpito: verokannat
account.taxissa olevat verokannat ovat Float‑kenttiä. Esimerkiksi 21% tallennetaan 21.0:na. Pienet pyöristuserot voivat kasaantua satojen laskujen kautta, joten tarkkuus on kirjanpidossa tärkeää.
Valmistus: materiaalimäärät koostumuksessa
Manufacturing‑moduulissa Bill of Materialsin komponenttien määrät ovat Float‑kenttiä. Resepti voi vaatia 0.75 litraa tai 2.5 kg — Float käsittelee murto‑osiin perustuvat määrät luonnollisesti; kokonaislukutyypillä tämä aiheuttaisi tuotantovirheitä.
Osto: hinnan kertoimet ja marginaalit
Toimittajahinta‑listojen ja hinnoittelusääntöjen kertoimet ja marginaalit tallennetaan Floateina. Esimerkiksi kerroin 1.25 (25% lisäys) tai 0.85 (15% alennus) ovat tyypillisiä arvoja, jotka vaikuttavat automaattisiin hinnanlaskelmiin ostoissa.
Float-kentän luominen ja muokkaaminen
Float‑kentän lisäämiseen on kolme yleistä tapaa riippuen teknisestä lähestymistavasta ja käyttöönotosta.
Odoo Studio (ilman koodia)
Studio on Odoon low‑code‑työkalu. Näin lisäät Float‑kentän ilman koodia:
- Avaa Odoo Studio päävalikosta.
- Siirry lomakkeeseen, johon haluat kentän.
- Raahaa Decimal Number ‑kenttä lomakkeelle kenttävalikosta.
- Aseta kentälle otsikko, oletusarvo ja desimaalien määrä properties‑paneelissa.
- Tallenna ja sulje Studio.
Studio lisää kentän x_studio_‑etuliitteellä ja päivittää lomakenäkymän automaattisesti. Tämä on helppo tapa laajentaa lomakkeita ilman tietokantatöitä.
Python‑koodilla omassa moduulissa
Kehittäjille Float‑kenttä määritellään suoraan Pythonissa. Tämä on suositeltu tapa, kun haluat versionhallinnan ja monen ympäristön käyttöönoton:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_credit_limit = fields.Float(
string='Credit Limit',
digits=(12, 2),
default=0.0,
help='Maximum outstanding balance allowed for this customer.',
)
Lisättyäsi kentän malliin sinun pitää lisätä se myös näkymä‑XML:ään, jotta se näkyy käyttöliittymässä. Odoo huolehtii tietokantasarakkeen luomisesta moduulin asennuksen tai päivityksen yhteydessä.
XML‑RPC‑rajapinnan kautta
Jos hallitset mukautuksia ohjelmallisesti, voit luoda Float‑kenttiä myös XML‑RPC‑API:lla esim. käyttöönotto‑skripteissä:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_custom_coefficient',
'field_description': 'Custom Coefficient',
'model_id': model_id,
'ttype': 'float',
'state': 'manual',
}]
)
state='manual' kertoo, että kenttä on luotu käsin (Studiolla tai API:lla), ei moduulissa. API‑luotujen kenttien desimaalit hallitaan Decimal Accuracy ‑asetuksista. Tämä on toimiva tapa automatisoida kenttien luonti.
Parhaat käytännöt
1. Käytä nimettyjä tarkkuusryhmiä vakioarvoille
Sen sijaan, että kovakoodaisit digits=(6, 2), käytä nimeä kuten 'Product Price' tai 'Product Unit of Measure'. Näin tarkkuutta voi muuttaa käyttöliittymästä ja varmistat yhdenmukaisuuden natiivien kenttien kanssa.
2. Käytä Monetary‑kenttää valuutta‑arvoihin, älä Floatia
Tärkein käytäntö: valuutta‑arvoihin tulee käyttää Monetary‑kenttää. Se linkittyy mallin valuuttakenttään, noudattaa valuutan pyöristyskäytäntöjä ja toimii oikein monivaluutta‑ympäristössä. Float voi aiheuttaa pyöristysongelmia ja vääristyksiä raportoinnissa.
3. Määritä aina oletusarvo
Aseta default=0.0 numerokentille, jotka haluat aloittaa nollasta. Ilman oletusta kenttä on False (NULL) ja se voi rikkoa laskettuja kenttiä tai python‑funktioita, jotka odottavat numeromuotoa.
4. Aseta group_operator raportteja varten
Määritä group_operator='sum' kentille, joita halutaan summata, ja 'avg' niille, jotka ovat prosentteja tai suhteita. Oikea asetus tekee pivot‑tauluista ja kaavioista käyttökelpoisia analyysissä.
5. Dokumentoi prosenttikäytännöt
Ole selkeä siitä, tallennetaanko prosentit 0–100‑asteikolla (esim. discount: 15.0) vai 0–1‑asteikolla (esim. margin: 0.15). Sekavat konventiot johtavat hiljaiseen laskentavirheeseen, joka on raskas jäljittää.
Yleiset sudenkuopat
Floatin käyttö rahamäärissä
Float‑kenttä ei kanta‑tasolla sisällä valuuttatietoa. Arvo 1500 voi olla euroa tai dollaria — monivaluuttaympäristössä tämä johtaa virheellisiin talouslaskelmiin. Käytä Monetary‑kenttää, kun käsittelet valuuttoja.
Digits‑parametrin puuttuminen
Ilman digits‑asetusta Odoo käyttää oletuksena 2 desimaalia. Tämä voi riittää hinnoille, mutta ei esimerkiksi valuuttakurssien tai muuntosuhteiden kaltaisille arvoille, jotka tarvitsevat 4–6 desimaalia. Liian karkea pyöristys aiheuttaa kumuloituvia virheitä.
Floatien vertaaminen ==:lla Pythonissa
Liukulukuista johtuen 0.1 + 0.2 == 0.3 voi palauttaa False. Käytä float_compare(value1, value2, precision_digits=...) ja float_is_zero(value, precision_digits=...) ‑apufunktioita odoo.tools.float_utilsista luotettaviin vertailuihin.
Float, kun Integer olisi parempi
Jos kenttä sisältää aina kokonaislukuja (esim. kappalemäärä, pakettien lukumäärä tai sekvenssi), käytä Integer‑kenttää. Float voi antaa käyttäjille mahdollisuuden syöttää desimaaleja, mikä ei ole järkevää tietyissä liiketoimintakonteksteissa.
False‑arvojen käsittelemättä jättäminen compute‑metodeissa
Float ilman defaultia voi palauttaa False, ei 0.0. Kun lasket kenttiä, tarkista aina False ennen laskutoimituksia tai määrittele default=0.0 estääksesi TypeError‑virheet tuotantotilanteissa.
Yhteenveto
Float‑kenttä on olennainen osa Odoon tietomallia. Se hoitaa desimaalit hintojen, määrien, prosenttien ja mittojen kohdalla, kunhan sen tarkkuus ja oletusarvot on määritetty oikein.
Muista käyttää nimettyjä tarkkuusryhmiä, käyttää Monetary‑kenttää valuutoissa, asettaa oletusarvot ja dokumentoida prosenttikäytännöt. Nämä tavat estävät yleisimmät datan laatuongelmat ennen kuin ne näkyvät tuotannossa.
Olipa kenttä lisätty Odoo Studiolla, custom‑moduulilla tai ohjelmallisesti ORM/ XML‑RPC‑rajapintaa käyttäen, oikein määritelty Float tekee järjestelmästä selkeämmän ja luotettavamman.
Dasololla autamme yrityksiä ottamaan Odoon käyttöön, muokkaamaan ja optimoimaan sitä eri toiminnoissa. Autamme tietomallin suunnittelussa, kenttien lisäämisessä ja kokonaan uusien moduulien rakentamisessa. Ota yhteyttä meihin ja keskustellaan Odoo‑projektistasi.