Skip to Content

Float Field στο Odoo: Ολοκληρωμένος Οδηγός για Developers

Ολοκληρωμένος οδηγός για το Float πεδίο στο μοντέλο δεδομένων Odoo: από την απλή χρήση μέχρι τον έλεγχο ακρίβειας και την τεχνική προσαρμογή
6 Μαρτίου 2026 από
Float Field στο Odoo: Ολοκληρωμένος Οδηγός για Developers
Dasolo
| No comments yet

Εισαγωγή


Το Float πεδίο χρησιμοποιείται παντού όταν τα δεδομένα χρειάζονται δεκαδικά ψηφία: τιμές μονάδας, βάρη προϊόντων, ποσοστά έκπτωσης, συντελεστές φόρων ή μετατροπές υλικών. Αν το νούμερο δεν είναι ακέραιο, συνήθως το αποθηκεύουμε ως Float στο μοντέλο δεδομένων του Odoo.


Εκ πρώτης όψεως μοιάζει απλά ένας αριθμητικός εισαγωγέας. Ωστόσο, το σημαντικό είναι να ξέρεις πώς διαχειρίζεται την ακρίβεια, πότε στρογγυλεύει τιμή πριν την αποθήκευση και πότε μια άλλη τύπου πεδίου (π.χ. Monetary) είναι πιο κατάλληλη.


Αυτός ο οδηγός εξηγεί τι αποθηκεύει ένα Float πεδίο, πώς συμπεριφέρεται μέσα στο πλαίσιο του Odoo, πώς να το προσθέσεις ή να το προσαρμόσεις (με Studio ή Python) και παραδείγματα χρήσης σε Πωλήσεις, Αποθήκη και Λογιστική.

Τι είναι το πεδίο Float στο Odoo


Στον ORM του Odoo, το Float αποθηκεύει δεκαδικούς αριθμούς και στη βάση δεδομένων μεταφράζεται σε στήλη τύπου double precision (PostgreSQL), με δυνατότητα περίπου 15 σημαντικών ψηφίων — συνήθως υπεραρκετά για επιχειρησιακούς σκοπούς.


Για τον χρήστη, το Float εμφανίζεται ως αριθμητικό πεδίο στις φόρμες. Τα δεκαδικά που βλέπει καθορίζονται από την παράμετρο digits του πεδίου. Στις λίστες εμφανίζεται με την ίδια ακρίβεια και δεξιά στοίχιση. Σε περιστροφικούς πίνακες και γραφήματα συμμετέχει σε αθροίσεις, μέσους όρους κ.λπ.


Παρακάτω δείχνω ένα παράδειγμα ορισμού πεδίου σε Python:

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 είναι ένα ζεύγος: το πρώτο στοιχείο ορίζει τον συνολικό αριθμό σημαντικών ψηφίων, το δεύτερο τις δεκαδικές θέσεις. Ένα (5, 2) σημαίνει έως πέντε σημαντικά ψηφία με δύο δεκαδικά.

Εναλλακτικά, μπορείς να δείξεις σε μια ονομασμένη ομάδα ακρίβειας αντί να σκληροκωδικοποιήσεις τα digits.


price_premium = fields.Float(
    string='Price Premium',
    digits='Product Price',
)

Το Odoo διαθέτει προεπιλεγμένες ομάδες δεκαδικής ακρίβειας (Settings > Technical > Database Structure > Decimal Accuracy) όπως Product Price, Product Unit of Measure, Discount και Stock Weight. Χρησιμοποιώντας αυτές τις ομάδες, η ακρίβεια ρυθμίζεται από το UI χωρίς αλλαγές σε κώδικα.


Στο Odoo Studio το Float εμφανίζεται ως «Decimal Number». Όταν το δημιουργείς από το Studio παίρνει προεπιλεγμένη ακρίβεια εκτός αν ορίσεις διαφορετικά στις ιδιότητες του πεδίου — γι’ αυτό είναι εύκολο για business users να επεκτείνουν φόρμες χωρίς προγραμματισμό.

Πώς λειτουργεί το πεδίο


Όταν ορίζεις ένα Float πεδίο στο Odoo, το πλαίσιο αναλαμβάνει τη δημιουργία της στήλης στη βάση κατά την εγκατάσταση ή την αναβάθμιση του module. Δεν χρειάζεσαι χειροκίνητα SQL scripts.


Η παράμετρος digits επηρεάζει τόσο την εμφάνιση όσο και την αποθήκευση: αν βάλεις (6, 2) και ο χρήστης εισάγει 3.14159, το Odoo θα στρογγυλοποιήσει και θα αποθηκεύσει 3.14. Η στρογγυλοποίηση γίνεται στο επίπεδο του ORM, όχι μόνο στη διεπαφή.


Κύρια χαρακτηριστικά πεδίου

Τα πιο σημαντικά attributes που μπορείς να ρυθμίσεις σε ένα Float πεδίο στο Odoo είναι τα εξής:

  • digits: Ένα tuple όπως (6, 2) ή το όνομα μιας ομάδας ακρίβειας. Ελέγχει εμφάνιση και αποθήκευση.
  • required: Το κάνει υποχρεωτικό. Προσοχή: ένα Float με τιμή 0.0 περνάει τον έλεγχο required, κάτι που δεν είναι πάντα επιθυμητό.
  • default: Προεπιλεγμένη τιμή για νέα εγγραφή. Το default=0.0 εξασφαλίζει ότι πάντα υπάρχει αριθμός αντί για False.
  • compute: Συνδέει method Python που υπολογίζει την τιμή δυναμικά — ιδανικό για παραγόμενα πεδία όπως περιθώρια ή συντελεστές μετατροπής.
  • store: Όταν συνδυάζεται με compute, αποθηκεύει το υπολογιζόμενο αποτέλεσμα στη βάση, ώστε να είναι αναζητήσιμο και ομαδοποιήσιμο.
  • group_operator: Ορίζει τον τρόπο αθροίσματος σε pivot/γράμματα. Συνηθισμένες τιμές: 'sum', 'avg', 'min', 'max'. Προεπιλογή για Float είναι 'sum'.
  • copy: Ελέγχει αν αντιγράφεται τιμή κατά το duplicate εγγραφής. Προεπιλογή: True.

Πώς εμφανίζεται στις προβολές

Σε φόρμες το Float είναι αριθμητικό πεδίο και σέβεται τη ρύθμιση τοπικής μορφής (π.χ. κόμμα ή τελεία δεκαδικού). Στις λίστες είναι δεξιά στοιχισμένο. Στη αναζήτηση μπορείς να φιλτράρεις με αριθμητικούς τελεστές (>, <, = κ.λπ.).


Μπορείς να εφαρμόσεις widgets σε Float πεδία. Το widget percentage π.χ. πολλαπλασιάζει την αποθηκευμένη τιμή επί 100 και προσθέτει το σύμβολο %, χρήσιμο όταν αποθηκεύεις τιμές στο εύρος 0–1 και θέλεις να τις εμφανίσεις ως ποσοστά.


Αλληλεπίδραση με τον Odoo ORM

Η ανάγνωση ενός Float επιστρέφει Python float ή False αν δεν έχει οριστεί και δεν υπάρχει default. Στη συγγραφή δέχεται ακέραιους, float ή False. Το ORM εφαρμόζει την ακρίβεια των digits κατά την αποθήκευση.


Σημαντικό τεχνικό σημείο: μην συγκρίνεις Float με == στην Python. Η αριθμητική κινητής υποδιαστολής μπορεί να δώσει απροσδόκητα αποτελέσματα. Χρησιμοποίησε τις βοηθητικές συναρτήσεις float_compare και float_is_zero από odoo.tools.float_utils, που σέβονται την ακρίβεια του πεδίου.

Περιστατικά χρήσης στην επιχείρηση


Το Float εμφανίζεται σχεδόν σε κάθε module ενός Odoo συστήματος. Παρακάτω συνοψίζονται πέντε συνηθισμένες επιχειρησιακές χρήσεις.


Πωλήσεις: Ποσοστά έκπτωσης σε γραμμές παραγγελίας

Το εγγενές πεδίο discount στη sale.order.line είναι Float. Όταν ένας πωλητής βάζει 15% έκπτωση, το Odoo αποθηκεύει 15.0 και το χρησιμοποιεί στους υπολογισμούς τιμής μονάδας. Η σωστή αποθήκευση των εκπτώσεων είναι κρίσιμη για τα τιμολόγια και τις αναφορές κέρδους.


Αποθήκη: Βάρη και όγκοι προϊόντων

Τα προϊόντα έχουν πεδία weight και volume ως Float. Ένα προϊόν 2.5 kg ή 0.003 m3 χρειάζεται δεκαδική ακρίβεια για σωστούς υπολογισμούς μεταφοράς και συνεργασία με παρόχους παράδοσης — λάθος ακρίβειας σημαίνει λανθασμένες χρεώσεις αποστολής.


Λογιστική: Συντελεστές φόρων

Οι συντελεστές φόρου σε account.tax είναι Float. Π.χ. ο ΦΠΑ 21% αποθηκεύεται ως 21.0. Μικρές αποκλίσεις στρογγυλοποίησης μπορούν να σωρευτούν σε εκατοντάδες συναλλαγές και να δημιουργήσουν διαφορές στις φορολογικές αναφορές.


Κατασκευή: Ποσότητες σε BOM

Στη MRP, οι ποσότητες των εξαρτημάτων στο Bill of Materials είναι Float. Μια συνταγή μπορεί να απαιτεί 0.75 λίτρα ή 2.5 kg πρώτης ύλης — οι Float τιμές χειρίζονται αυτά τα κλασματικά μεγέθη χωρίς σφάλματα που θα προέκυπταν αν χρησιμοποιούσαμε Integer.


Προμήθειες: Συντελεστές τιμών και περιθώρια προμηθευτή

Σε τιμοκαταλόγους προμηθευτών ή κανόνες σήμανσης, οι πολλαπλασιαστές και τα περιθώρια αποθηκεύονται ως Float (π.χ. factor 1.25 για +25%). Αυτές οι τιμές εισέρχονται στους αυτόματους υπολογισμούς των παραγγελιών αγοράς.

Δημιουργία ή προσαρμογή του Float πεδίου


Τρεις τρόποι να προσθέσεις Float πεδίο στο Odoo, ανάλογα με το τεχνικό σου περιβάλλον.

Με Odoo Studio (χωρίς κώδικα)

Το Studio είναι το ενσωματωμένο εργαλείο low-code. Βήματα για να προσθέσεις Float χωρίς κώδικα:


  1. Άνοιξε το Odoo Studio από το μενού.
  2. Πήγαινε στη φόρμα όπου θες το νέο πεδίο.
  3. Σύρε το πεδίο Decimal Number από το picker στη φόρμα.
  4. Όρισε ετικέτα, προεπιλεγμένη τιμή και δεκαδικές θέσεις στις ιδιότητες.
  5. Αποθήκευσε και κλείσε το Studio.

Το Studio δημιουργεί το πεδίο με πρόθεμα x_studio_ και το προσθέτει στη φόρμα — χωρίς να χρειαστείς δουλειά στη βάση. Είναι η πιο προσιτή λύση για business users που θέλουν γρήγορες επεκτάσεις.


Με Python σε custom module

Για developers, ο ορισμός Float γίνεται σε Python και είναι η συνιστώμενη μέθοδος όταν χρειάζεσαι version control και ανάπτυξη σε πολλά περιβάλλοντα:


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.',
    )

Μετά τον ορισμό στο model, πρόσθεσέ το στη σχετική XML προβολή για να εμφανιστεί. Το Odoo δημιουργεί αυτόματα τη στήλη κατά την εγκατάσταση/αναβάθμιση module — αυτή είναι η τυπική πρακτική για σοβαρές προσαρμογές.


Με το XML-RPC API

Αν διαχειρίζεσαι Odoo προγραμματιστικά (π.χ. σε scripts ανάπτυξης ή αυτοματοποιημένες ρυθμίσεις), μπορείς να δημιουργήσεις Float πεδία μέσω XML-RPC:

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 δείχνει ότι το πεδίο δημιουργήθηκε χειροκίνητα (όπως από Studio ή API). Η δεκαδική ακρίβεια για πεδία που δημιουργούνται με API ελέγχεται μέσω των Decimal Accuracy ρυθμίσεων στο τεχνικό μενού. Αυτή η μέθοδος χρησιμοποιείται συχνά σε αυτοματοποιημένες ρυθμίσεις πεδίων.

Βέλτιστες πρακτικές


1. Χρησιμοποίησε ονομασμένες ομάδες ακρίβειας για κοινές τιμές

Αντί να βάζεις digits=(6, 2) απευθείας, δείξε σε μια ομάδα όπως 'Product Price' ή 'Product Unit of Measure'. Έτσι η ακρίβεια μπορεί να ρυθμιστεί από το UI και τα custom πεδία ευθυγραμμίζονται με τα native πεδία.


2. Χρησιμοποίησε Monetary για ποσά, όχι Float

Αυτό είναι το πιο κρίσιμο σημείο. Το Monetary έχει σύνδεση με πεδίο νομίσματος, χειρίζεται στρογγυλοποιήσεις ανά νόμισμα και δουλεύει σωστά σε multi-currency περιβάλλοντα. Χρησιμοποιώντας Float για τιμές τιμολογίων ή πωλήσεων θα φέρει ασυνέπειες και προβλήματα σε οικονομικές αναφορές.


3. Πάντα όρισε default τιμή

Βάλε default=0.0 για αριθμητικά πεδία που πρέπει να ξεκινούν από μηδέν. Χωρίς default, η τιμή είναι False έως ότου την εισάγει ο χρήστης, κάτι που προκαλεί σφάλματα σε υπολογιζόμενα πεδία ή μεθόδους Python που υποθέτουν αριθμό.


4. Όρισε group_operator για αναφορές

Αν το πεδίο αντιπροσωπεύει ποσότητα/ποσό που έχει νόημα να αθροίζεται, βάλε group_operator='sum'. Αν πρόκειται για ποσοστό/συντελεστή που έχει νόημα μέσος όρος, χρησιμοποίησε group_operator='avg'. Σωστή ρύθμιση σημαίνει χρήσιμα pivot και γραφήματα.


5. Κατέγραψε τη σύμβαση για τα ποσοστά

Αν ένα Float αποθηκεύει ποσοστό, ξεκαθάρισε αν είναι στο εύρος 0–100 (π.χ. 15.0 για 15%) ή 0–1 (π.χ. 0.15). Η ανάμειξη αυτών των συμβάσεων οδηγεί σε αθόρυβα λάθη που είναι δύσκολο να εντοπιστούν.


Συνηθισμένα λάθη


Χρήση Float για χρηματικά ποσά

Το Float δεν μεταφέρει πληροφορία νομίσματος. Μια τιμή 1500 μπορεί να είναι ευρώ, δολάρια ή κάτι άλλο — σε multi-currency περιβάλλον αυτό οδηγεί σε λάθος σύνολα. Για ποσά με νόμισμα χρησιμοποίησε τον τύπο Monetary.


Μη ρύθμιση του digits

Αν δεν ορίσεις digits, το Odoo εφαρμόζει προεπιλογή 2 δεκαδικών. Αυτό είναι επαρκές για τιμές αλλά όχι για περιπτώσεις που χρειάζονται 4–6 δεκαδικά (π.χ. συναλλαγματικές ισοτιμίες ή συντελεστές μετατροπής). Σιωπηρή στρογγυλοποίηση μπορεί να προκαλέσει σφάλματα που σωρεύονται.


Σύγκριση Float με == στην Python

Λόγω της φύσης της κινητής υποδιαστολής, δύο φαίνεται ίσες τιμές μπορεί να μην είναι όταν συγκρίνεις με ==. Για παράδειγμα, 0.1 + 0.2 == 0.3 μπορεί να επιστρέψει False. Χρησιμοποίησε float_compare(value1, value2, precision_digits=2) και float_is_zero(value, precision_digits=2) από odoo.tools.float_utils για αξιόπιστες συγκρίσεις.


Χρήση Float όταν πρέπει Integer

Αν το πεδίο κρατά μόνο ακέραιες τιμές (π.χ. πλήθος κουτιών, αρίθμηση), χρησιμοποίησε Integer. Το Float δεν είναι λάθος τεχνικά, αλλά επιτρέπει κατά λάθος δεκαδικά όπου δεν έχουν νόημα.


Μη διαχείριση τιμών False σε compute μεθόδους

Ένα Float χωρίς default επιστρέφει False όταν δεν έχει οριστεί. Στους υπολογισμούς, πάντα έλεγχε για False πριν κάνεις αριθμητικές πράξεις ή όρισε default=0.0 για να αποφύγεις TypeError κατά τη διάρκεια πραγματικών σεναρίων.

Συμπέρασμα


Συνοπτικά, το Float είναι βασικό δομικό στοιχείο του μοντέλου δεδομένων Odoo. Διαχειρίζεται δεκαδικά για τιμές, ποσότητες, συντελεστές και μετρήσεις και λειτουργεί αξιόπιστα όταν ορίζεις σωστή ακρίβεια και defaults.


Τα κύρια σημεία που πρέπει να θυμάσαι: χρησιμοποίησε ονομασμένες ομάδες ακρίβειας για στάνταρ πεδία, χρησιμοποίησε Monetary για χρήματα, όρισε πάντα default και καταγράψτε τη σύμβαση για ποσοστά. Αυτά τα βήματα αποτρέπουν τα πιο κοινά προβλήματα ποιότητας δεδομένων.

Ανεξάρτητα αν προσθέτεις πεδία με Studio, γράφεις custom module σε Python ή διαχειρίζεσαι το μοντέλο μέσω ORM/XML-RPC, το σωστό setup των Float από την αρχή οδηγεί σε πιο καθαρό και αξιόπιστο σύστημα.

Στη Dasolo βοηθάμε επιχειρήσεις να υλοποιήσουν, να προσαρμόσουν και να βελτιστοποιήσουν το Odoo σε όλα τα τμήματα. Είτε χρειάζεσαι καθαρό σχεδιασμό δεδομένων, είτε προσθήκη custom πεδίων, είτε ανάπτυξη module από το μηδέν, η ομάδα μας παρέχει υποστήριξη. Επικοινώνησε μαζί μας και ας μιλήσουμε για το Odoo project σου.

Float Field στο Odoo: Ολοκληρωμένος Οδηγός για Developers
Dasolo 6 Μαρτίου 2026
Share this post
Σύνδεση to leave a comment