Johdanto
Jos olet käyttänyt Odoossa myyntitilausta, projektitehtävää tai valmistusmääräystä, olet todennäköisesti törmännyt päivämääräkenttään. Toimituspäivät, laskujen eräpäivät, sopimusten aloitusajankohdat ja muut aikaan sidotut arvot tallennetaan tyypillisesti juuri tähän kenttätyyppiin.
Käyttäjän näkökulmasta päivämääräkenttä on yksinkertainen: klikkaa ja valitse kalenterista. Taustalla kuitenkin tapahtuu enemmän — kentän paikka tietomallissa, ero aikaleimaan (DateTime) sekä tapa, jolla se näkyy eri käyttäjille, vaikuttavat suoraan raportointiin, automaatioihin ja siihen, millaisia ylläreitä järjestelmässä voi ilmetä.
Tässä oppaassa käydään läpi, mitä päivämääräkenttä Odoossa oikeasti tallentaa, miten sitä kannattaa käyttää liiketoimintaprosesseissa ja miten välttää yleisimmät ongelmat.
Mitä päivämääräkenttä on Odoossa
Odoon tietomallissa päivämääräkenttä (fields.Date) tallentaa pelkän kalenteripäivän — vuosi, kuukausi ja päivä — ilman kellonaikaa. Arvo kuten «2026-03-06» on juuri se päivä, eikä siihen liity tunteja tai minuutteja.
Tietokannassa (PostgreSQL) tämä vastaa DATE-tyyppiä, joka eroaa TIMESTAMP-tyypistä: jälkimmäinen sisältää tarkat kellonajat ja usein myös ajankohdan käsittelyyn liittyvän UTC-mekaniikan.
Käyttöliittymässä kenttä näyttäytyy tekstikenttänä, jossa on kalenterivalitsin. Käyttäjä voi kirjoittaa päivämäärän käsin tai valita sen klikkaamalla — listanäkymissä päivämäärät esitetään käyttäjän paikallisen muodon mukaan.
Esimerkinomainen kentän määritelmä kustomissa Python-moduulissa näyttää tältä:
from odoo import fields, models
class ProjectTask(models.Model):
_inherit = 'project.task'
x_deadline_confirmed = fields.Date(
string='Confirmed Deadline',
help='The officially confirmed deadline agreed with the customer.',
)
Odoo Studion kautta lisättäessä kenttä näkyy yksinkertaisesti nimellä Date ja saa automaattisesti x_studio_-etuliitteen. Kun kentän luo Python-koodissa tai ulkoisen API:n kautta, tekninen nimi valitaan itse.
Miten kenttä toimii
Päivämäärä vs. aikaleima — mikä muuttuu
Keskeisin käytännöllinen ero on se, mitä päivämäärä EI sisällä: kellonaikaa. Päivämääräkenttään ei liity aikavyöhykkeitä tai kellonajan siirtoja — se on puhdas kalenteripäivä.
Aikaleima (DateTime) puolestaan tallennetaan tietokantaan UTC-muodossa ja muunnetaan käyttäjän aikavyöhykkeen mukaan näyttöä varten. Tästä syntyy usein se kuuluisin virhe: «päivämäärä siirtyi yhdellä päivällä» — yleensä kyse on DateTime-kentästä eikä fields.Date-kentästä.
Kun tallennat päivämäärän fields.Date-kenttään, se on sama näkyvälle käyttäjälle kaikkialla. Esimerkiksi arvo 2026-03-15 tarkoittaa 15. maaliskuuta 2026 riippumatta käyttäjän sijainnista.
Tärkeimmät kenttäominaisuudet
Seuraavat kenttäattribuutit ovat käytännössä hyödyllisimpiä päivämääräkenttää määriteltäessä Odoossa:
- required: tekee kentästä pakollisen käyttöliittymässä ja mallitasolla.
- default: asettaa automaattisen oletusarvon, esimerkiksi
fields.Date.todaytäyttää kentän luomishetken päivämäärällä. - index: luo tietokantaindeksin, joka nopeuttaa suodatusta ja raportointia suurella aineistolla.
- compute: liittää Python-menetelmän, joka laskee kentän arvon dynaamisesti.
- store: yhdessä
compute:n kanssa tallentaa lasketun arvon tietokantaan hakujen ja ryhmittelyn käyttöön. - readonly: estää suoran muokkauksen käyttöliittymässä.
- copy: ohjaa, siirtyykö arvo duplikoitaessa (oletuksena
True), usein asetetaanFalsepäivämäärille, joita ei pidä kopioida.
Miten kenttä näkyy näkymissä
Lomakenäkymissä kohde näkyy tekstikenttänä, josta aukeaa kalenteri; listanäkymissä päivämäärä esitetään muotoiltuna tekstinä; hakunäkymiin sisältyy valmiit aikajakosuodattimet kuten "tämä viikko", "tämä kuukausi" sekä vertailuoperaattorit ennen/jälkeen/tasan.
Näyttöformaatti noudattaa käyttäjän kieli- ja alueasetuksia (esim. DD.MM.YYYY tai MM/DD/YYYY), mutta tietokantaan tallennettu muoto on aina ISO (YYYY-MM-DD).
Yhteistyö Odoo ORM:n kanssa
Kun luet päivämäärää koodissa, ORM palauttaa Pythonin datetime.date-olion tai False:n, jos kenttä on tyhjä. Kirjoittaessa voit antaa joko datetime.date-olion tai ISO-merkkijonon "YYYY-MM-DD". XML-RPC-rajapinnassa päivämäärät liikkuvat yleensä merkkijonoina.
Päivämääräkenttien kanssa ei tarvita monimutkaisia muunnoksia: Odoo hoitaa tallennuksen ja näkymän automaattisesti, mikä tekee kentästä arkipäivän kehityksessä varsin kätevän.
Liiketoiminnan käyttötapaukset
Päivämääräkenttä on läsnä lähes kaikissa Odoo-prosesseissa. Seuraavassa viisi käytännön esimerkkiä siitä, miten yritykset käyttävät sitä.
CRM: sopimusten aloitus- ja päättymispäivät
Myyntitiimeillä sopimuksille on usein aloitus- ja päättymispäivät. Päivämääräkenttä esimerkiksi liidissä tai sopimusmallissa auttaa seuraamaan, milloin sopimus astuu voimaan ja milloin se erääntyy.
Kun päivämäärä yhdistetään automatisointeihin, järjestelmä voi lähettää muistutuksia tai muuttaa sopimuksen tilaa ennen erääntymistä — näin vältetään unohtuneet uusimiset ilman manuaalista seurantaa.
Myynti: asiakkaan toivoma toimituspäivä
Asiakkaat pyytävät usein tiettyä toimituspäivää tilaukselle. Moni yritys lisää tilaukseen "Asiakkaan toivoma päivä" -päivämääräkentän, jotta operatiivinen tiimi voi suunnitella toimitukset selkeän tavoitteen perusteella.
Päivämääräkentän käyttäminen DateTime:n sijaan pitää tiedot yksinkertaisina ja poistaa aikavyöhykkeisiin liittyvän epävarmuuden varaston koordinoinnissa — kaikki näkevät saman päivämäärän ilman muunnokset aiheuttamaa hämmennystä.
Varasto: erien viimeiset käyttöpäivät
Elintarvike-, lääke- ja kemianteollisuudessa erien viimeiset käyttö- ja parasta ennen -päivät täytyy seurata tarkasti. Odoo tallentaa nämä arvot stock.lot-tasoilla päivämääräkenttinä.
Näiden avulla järjestelmä voi ohjata FEFO-kirjausta (First Expired First Out) ja lähettää automaattisia varoituksia ennen erän vanhenemista — tärkeää sekä säädösten noudattamiseksi että tuotteiden laadun suojelemiseksi.
Kirjanpito: laskujen eräpäivät
Laskujen eräpäivät ovat Date-kenttiä, jotka määrittävät maksumuistutusten lähettämisen, myöhässä olevien laskujen tunnistamisen sekä ikääntymisraporttien laskennan.
Oikeat eräpäivät ovat kirjanpidossa kriittisiä: väärin asetettu eräpäivä karkaa helposti kassavirran seurannasta ja rikkoo automaattiset perintäprosessit.
Henkilöstöhallinto: perehdytys- ja pätevyysajat
HR käyttää päivämääräkenttiä paljon: työsuhteen aloituspäivä, koeaika, sopimuksen voimassaoloaika ja sertifikaattien erääntymispäivät ohjaavat muistutuksia, palkkalaskennan sääntöjä ja henkilöstöhallinnon automaatioita.
Toimiva HR-moduuli tarvitsee siistit päivämäärät työntekijätiedoissa, sillä monet tärkeistä prosesseista käynnistyvät täsmällisten päivämääräarvojen perusteella.
Päivämääräkentän luominen ja muokkaaminen
Päivämääräkentän lisäämiseen Odoo-malliin on käytännössä kolme tapaa riippuen siitä, haluatko tehdä muutoksen ilman koodausta vai versionhallittuna moduulina.
Odoo Studion käyttäminen (ilman koodia)
Odoo Studio on nopein tapa lisätä päivämääräkenttä ilman ohjelmointia. Sopii liiketoiminnan käyttäjille ja konsultille, jotka haluavat lisätä päivän seuraamisen vakiolomakkeisiin nopeasti:
- Avaa Odoo Studio päävalikosta.
- Siirry lomakkeeseen, johon kenttä halutaan.
- Vedä vasemman paneelin Date-kenttä lomakkeelle.
- Aseta kentän otsikko, pakollisuus ja tarvittaessa oletusarvo.
- Tallenna ja sulje Studio.
Studio luo kentän automaattisesti x_studio_-etuliitteellä ja lisää sen lomakkeelle ilman erillisiä tietokantamuutoksia sinun puolestasi.
Pythonin käyttäminen omassa moduulissa
Kehittäjille, jotka rakentavat Odoo-moduuleja, kenttä määritellään Pythonin malliluokassa. Tämä on oikea tapa, kun muokkauksen pitää kulkea versionhallinnan ja monen ympäristön kautta:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
x_customer_requested_date = fields.Date(
string='Customer Requested Date',
index=True,
copy=False,
help='Delivery date requested by the customer at time of order.',
)
Kun malliin on lisätty kenttä, se pitää lisätä myös asianmukaiseen näkymä-XML:ään, jotta kenttä näkyy käyttöliittymässä. Odoo luo tietokantapalikan, kun moduuli asennetaan tai päivitetään.
XML-RPC-rajapinnan käyttäminen
Jos haluat luoda kenttiä ohjelmallisesti osana deployment-putkea tai etäkonfiguraatiota, voit käyttää Odoon XML-RPC-API:a kenttien luomiseen:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_customer_requested_date',
'field_description': 'Customer Requested Date',
'model_id': model_id,
'ttype': 'date',
'state': 'manual',
}]
)
Date-kentän tyypiksi asetetaan 'date'; DateTime-kentän tyypiksi tulisi 'datetime'. 'manual'-tila kertoo, että kenttä on luotu käsin eikä moduulin asennuksen yhteydessä — hyödyllinen ero automatisoinneissa.
Parhaat käytännöt
1. Käytä Date-kenttää, kun kellonaika ei ole olennainen
Kun vain kalenteripäivä on merkityksellinen (määräajat, syntymäpäivät, voimassaolopäivät), valitse fields.Date. DateTime lisää tarpeetonta aikavyöhykkeiden ja UTC-muunnosten monimutkaisuutta ja voi aiheuttaa yhden päivän eroja eri käyttäjille.
2. Aseta järkevä oletusarvo, kun se auttaa käyttäjää
Esimerkiksi odotetuille toimituspäiville tai seuranta-ajankohdille oletusarvoksi voi asettaa tämän päivän tai tämän päivän + N päivää. Käytä default=fields.Date.today (ilman sulkuja) niin arvo lasketaan aina tiedon luomisen hetkellä, ei moduulin latausvaiheessa.
3. Indeksoi päivämääräkentät, joita käytetään raporteissa ja suodattimissa
Jos käyttäjät hakevat usein tietoa päivämäärän perusteella (esim. erääntyneet laskut, tulevat uusimiset), lisää index=True. Suurilla tietomäärillä tämä parantaa suorituskykyä merkittävästi ja on pieni ponnistus alussa.
4. Käytä copy=False päivämäärille, joita ei pidä kopioida
Sopimuksen aloitus- tai voimassaolopäivä ei yleensä saa siirtyä kopioidulle sopimukselle. Asettamalla copy=False varmistat, että uusi tietue saa päivämäärän vain, kun se on erikseen määritelty.
5. Lisää validointi, kun päivämäärät muodostavat ajanjakson
Kun mallissa on aloitus- ja lopetuspäivä, lisää @api.constrains-tarkistus, joka estää lopetusajan asettamisen ennen aloitusta. Tämä ehkäisee laskentavirheitä ja outoja raportointituloksia jo alkuvaiheessa.
Yleisimmät sudenkuopat
Sekoittaminen Date- ja DateTime-kenttiin
Yleisin virhe on käyttää DateTime-kenttää silloin, kun riittäisi pelkkä päivämäärä. Koska DateTime tallennetaan UTC:hen ja muunnetaan näyttöä varten, eri aikavyöhykkeissä käyttäjät voivat nähdä eri päivämäärät — juuri se, mitä halutaan välttää, ellei kellonaika oikeasti merkkaa.
Pidä valinta mahdollisimman yksinkertaisena: valitse kenttätyyppi, joka vastaa todellista liiketoimintatarvetta.
Unohtaa palvelimen aikavyöhyke ajastetuissa toiminnoissa
Kun rakennat ajastettuja tehtäviä tai raportteja, jotka vertaavat kenttää "tänään"-arvoon, muista että fields.Date.today() raportoi palvelimen UTC-päivän. Monipaikkatiimeissä tämä voi tuottaa yhden päivän eroja. Testaa automaatioita eri aikavyöhykkeillä, jos tiimisi työskentelee globaalisti.
Puuttuvat validoinnit ajanjaksoilla
On yleistä, että Start Date ja End Date ovat erillisiä kenttiä ilman backend-varmistusta, jolloin virheelliset parit päätyvät järjestelmään ja rikkoivat keston laskentaa ja raportteja. Lisää aina taustatarkistus, jos kentät muodostavat loogisen ajanjakson.
Unohtaa indeksoida suodattimissa käytettäviä päivämääriä
Päivämäärien perusteella tehtävät suodattimet kuten "myöhässä" tai "tulevat määräajat" käyttävät usein vertailuja kuten "date < today". Ilman indeksiä tietokanta skannaa taulun läpi, mikä hidastaa isoja malleja (laskut, tehtävät, varastosiirrot). Indeksin puute näkyy nopeasti päivittäisessä käytössä.
Päivämäärien tallentaminen tekstikenttään
Joissain toteutuksissa päivämääriä säilytetään Char-kentissä vapaan muodon säilyttämiseksi. Tämä estää lajittelun, suodatuksen, päivälaskennan ja raportoinnin toiminnan. Käytä aina fields.Date-tyyppiä — Odoo ja tietokanta hoitavat formaatin ja lokalisaation puolestasi.
Usein kysytyt kysymykset
Mikä ero on Date- ja DateTime-kentän välillä Odoossa?
Date tallentaa pelkän kalenteripäivän ilman kellonaikaa. DateTime tallentaa tarkan aikaleiman (tunnit, minuutit, sekunnit), yleensä UTC-muotoon, ja Odoo muuntaa sen käyttäjän aikavyöhykkeelle näyttöä varten. Käytä Datea, kun kellonaika ei ole olennaista; käytä DateTimea, kun haluat tietää täsmällisen ajan.
Miten asetan oletusarvoksi tämän päivän päivämäärän?
Python-koodissa käytä default=fields.Date.today ilman sulkuja — se on kutsuttava funktio, joka suoritetaan kun tietue luodaan. Odoo Studiossa valitse kentän oletukseksi "Today" kenttäasetuksista.
Voinko laskea päivämääräkentän arvon muiden kenttien perusteella?
Kyllä. Määrittele kenttä compute='_compute_my_date' ja kirjoita metodi, johon liität @api.depends() -koristeella ne kentät, joiden muutos aiheuttaa uudelleenlaskun. Käytä Pythonin datetime.date- ja timedelta-luokkia laskennassa ja lisää store=True, jos haluat tallentaa tuloksen tietokantaan hakujen ja ryhmittelyn käyttöön.
Miten suodatan tietueita päivämääräväleillä Odoon domainilla?
Käytä normaaleja vertailuoperaattoreita domainissa. Esimerkiksi löytääksesi tietueet, joiden päivämäärä on maaliskuussa 2026:
[
('x_date_field', '>=', '2026-03-01'),
('x_date_field', '<=', '2026-03-31')
]
Domaineissa käytettävät päivämäärämerkkijonot tulee aina antaa ISO-muodossa: YYYY-MM-DD.
Voinko tehdä päivämääräkentästä pakollisen vain tietyissä tilanteissa?
Käyttöliittymässä voit visuaalisesti asettaa ehdollisen pakollisuuden attrs-säännöillä näkymä-XML:ssä tai Odoo Studion sääntöjä käyttäen. Todellinen backend-pakollisuus (joka estää tietueen tallentamisen) vaatii Python-tarkistuksen @api.constrains-koristeella. Odoo Studion ehdollinen näkyvyys on usein riittävä ilman koodausta yksinkertaisissa tapauksissa.
Yhteenveto
Päivämääräkenttä on yksi Odoon käytännöllisimmistä kenttätyypeistä. Se on helppo ymmärtää, yksinkertainen käyttää ja riittävän tehokas ohjaamaan tärkeitä liiketoimintalogiikoita kuten muistutuksia, eräpäivävalvontaa ja aikaperusteista raportointia.
Tärkeimmät opit: valitse Date, kun tarvitset vain kalenteripäivän; hyödynnä oletusarvoja ja indeksejä käytettävyyden ja suorituskyvyn parantamiseksi; ja lisää validoinnit, kun kentät muodostavat ajanjakson.
Hyvin suunniteltu tietomalli lähtee usein pienistä, mutta oikeista valinnoista — kuten oikean kenttätyypin valinnasta. Oikein toteutettuna päivämääräkenttä on perusta luotettavalle Odoo-implementaatiolle.
Me Dasololla autamme yrityksiä ottamaan Odoon tehokkaasti käyttöön ja räätälöimään sen prosesseihin sopivaksi. Tarjoamme tukea tietomallien suunnittelussa, kenttien ja työnkulkujen lisäyksessä sekä kokonaisvaltaisissa moduulikehityksissä. Ota yhteyttä meihin ja keskustellaan sinun Odoo-projektistasi.