Skip to Content

Company Dependent Field στο Odoo: Πώς Λειτουργεί και Πότε Να Το Χρησιμοποιήσετε

Πρακτικός οδηγός για μια από τις πιο χρήσιμες αλλά και παρεξηγημένες λειτουργίες στο μοντέλο δεδομένων του Odoo
6 Μαρτίου 2026 από
Company Dependent Field στο Odoo: Πώς Λειτουργεί και Πότε Να Το Χρησιμοποιήσετε
Dasolo
| No comments yet

Εισαγωγή


Μια από τις λειτουργίες που περνάνε συχνά απαρατήρητες στο μοντέλο δεδομένων του Odoo είναι το πεδίο που διατηρεί ξεχωριστή τιμή για κάθε εταιρεία. Φαινομενικά μικρό, αλλά όταν δουλεύεις με πολλαπλές νομικές οντότητες μέσα στην ίδια βάση, γίνεται καθοριστικό για την ορθή αποθήκευση και χρήση πολύπλοκων ρυθμίσεων.


Στις περισσότερες περιπτώσεις κάθε πεδίο σε ένα record έχει μία και μοναδική τιμή για όλους τους χρήστες. Τι γίνεται όμως αν δύο εταιρείες μοιράζονται το ίδιο προϊόν και χρειάζονται διαφορετικό κωδικό αναφοράς ή διαφορετικό προεπιλεγμένο λογαριασμό; Χρειάζεται τρόπος να υπάρχει κοινό αντικείμενο με εταιρικά εξατομικευμένα δεδομένα.


Αυτή ακριβώς η ανάγκη καλύπτεται από το χαρακτηριστικό company_dependent. Είτε κάνετε ανάπτυξη, είτε παραμετροποίηση είτε απλώς μελετάτε τον πυρήνα του Odoo, το να γνωρίζετε πώς λειτουργεί αυτό το είδος πεδίου κάνει τη διαφορά σε multi-company έργα.

Τι είναι ένα πεδίο ανά εταιρεία στο Odoo


Ένα πεδίο "ανά εταιρεία" αποθηκεύει, στο ίδιο record, διαφορετικές τιμές για κάθε εταιρεία. Ο χρήστης της Εταιρείας Α βλέπει την τιμή της Εταιρείας Α, ενώ ο χρήστης της Εταιρείας Β βλέπει τη δική του — χωρίς να χρειάζεται να δημιουργηθούν ξεχωριστά προϊόντα ή εγγραφές.


Στον χρήστη το πεδίο συμπεριφέρεται σαν οποιοδήποτε άλλο: φαίνεται και λειτουργεί το ίδιο στο περιβάλλον εργασίας. Η «μαγεία» συμβαίνει στο παρασκήνιο, στον ORM του Odoo, που ανακατευθύνει ανάλογα το διάβασμα και την εγγραφή της τιμής.


Πώς εμφανίζεται στο περιβάλλον χρήστη

Στο UI δεν υπάρχει οπτική σήμανση που να λέει "αυτή η τιμή είναι ανά εταιρεία" — αυτό είναι εσκεμμένο για να μην επιβαρύνονται οι χρήστες με τεχνικές λεπτομέρειες. Από την πλευρά τους, απλώς βλέπουν τη σωστή τιμή για την εταιρεία στην οποία εργάζονται.


Από προγραμματιστική σκοπιά, το company_dependent μπορεί να εφαρμοστεί σε πολλούς τύπους πεδίων: Char, Boolean, Integer, Float, Many2one κ.ά. Η προσθήκη του company_dependent=True στη δήλωση του πεδίου ενεργοποιεί τη συμπεριφορά αυτή στον ORM.


Στο Odoo Studio ορισμένα τέτοια πεδία υπάρχουν ήδη σε βασικά μοντέλα — για παράδειγμα πεδία προϊόντος που αφορούν λογαριασμούς. Μπορείτε να δημιουργήσετε και προσαρμοσμένα company-dependent πεδία, αλλά η υποστήριξη του Studio γι' αυτό ποικίλλει ανά έκδοση.

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


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


Αποθήκευση στο ir.property

Στις εκδόσεις Odoo 16 και νωρίτερα, οι τιμές των πεδίων ανά εταιρεία δεν αποθηκεύονται στο ίδιο το πίνακα του μοντέλου. Αντίθετα, φυλάσσονται σε έναν ξεχωριστό πίνακα συστήματος που ονομάζεται ir.property.

Κάθε εγγραφή στον πίνακα ir.property συνδέει:

  • ένα συγκεκριμένο record (π.χ. προϊόν με ID 42),
  • ένα συγκεκριμένο πεδίο (π.χ. property_account_income_id),
  • μια συγκεκριμένη εταιρεία,
  • και την αντίστοιχη τιμή για αυτόν τον συνδυασμό.

Γι' αυτό και η συμπεριφορά φαίνεται διαφανής: ο ORM αναζητά και ενημερώνει αυτόν τον πίνακα ανάλογα με την τρέχουσα εταιρική ροή (context) και επιστρέφει την κατάλληλη τιμή στον χρήστη.


Αλλαγές από Odoo 17 και μετά

Από την έκδοση 17 και μετά το μοντέλο αποθήκευσης ανασχεδιάστηκε: οι τιμές company-dependent αποθηκεύονται πλέον μέσα στον ίδιο τον πίνακα του μοντέλου σε μία στήλη jsonb, όπου κάθε εταιρεία έχει το δικό της πεδίο μέσα σε ένα JSON αντικείμενο. Αυτό βελτιώνει την απόδοση και απλοποιεί τα ερωτήματα σε συστήματα με πολλά δεδομένα.


Η διεπαφή και τα API για τον προγραμματιστή παραμένουν όμοια, αλλά οι αναζητήσεις και οι μαζικές ενημερώσεις γίνονται πολύ πιο γρήγορα στις μεγάλες βάσεις.


Προεπιλεγμένες τιμές

Τα company-dependent πεδία υποστηρίζουν προεπιλεγμένες τιμές ανά εταιρεία. Αν για μια εταιρεία δεν έχει οριστεί ρητά τιμή, το σύστημα επιστρέφει την προεπιλογή που ορίστηκε στο πεδίο — είτε μέσω ir.property στις παλαιότερες εκδόσεις είτε απευθείας στο μοντέλο στις νεότερες.


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

Στο περιβάλλον του Odoo ORM, η πρόσβαση σε πεδίο ανά εταιρεία σέβεται πάντα την ενεργή εταιρεία στο self.env.company. Αυτό σημαίνει:

  • διάβασμα επιστρέφει την τιμή για την ενεργή εταιρεία,
  • εγγραφή ενημερώνει μόνο την τιμή για την ενεργή εταιρεία,
  • και το switching με record.with_company(company) επιτρέπει ανάγνωση/εγγραφή για συγκεκριμένη εταιρεία.

Πραγματικά επιχειρηματικά σενάρια


Τα πεδία ανά εταιρεία δεν είναι θεωρητικά: λύνουν πρακτικά προβλήματα καθημερινής χρήσης σε multi-company περιβάλλοντα. Ακολουθούν πέντε συνηθισμένες εφαρμογές όπου αποδίδουν πραγματική αξία.


1. Λογιστική: Λογαριασμοί εισπράξεων και εξόδων ανά εταιρεία

Ένα χαρακτηριστικό παράδειγμα στο Odoo είναι τα property_account_income_id και property_account_expense_id στα προϊόντα — είναι company-dependent.


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


2. Πωλήσεις και CRM: Τιμοκατάλογοι ανά εταιρεία

Σε ομάδες που διαχειρίζονται πολλούς εμπορικούς φορείς, κάθε εταιρεία συχνά ακολουθεί ξεχωριστή τιμολογιακή πολιτική. Με company-dependent τιμοκατάλογο, ο ίδιος πελάτης μπορεί να έχει διαφορετική προεπιλεγμένη τιμή ανά εταιρεία.


Αυτό επιτρέπει συγκεντρωμένα CRM δεδομένα και ταυτόχρονα ανεξάρτητες εμπορικές πολιτικές ανά νομική οντότητα.


3. Αποθέματα: Μέθοδος αποτίμησης ανά εταιρεία

Ομάδες με αποθήκες σε διαφορετικά κράτη ίσως χρειάζονται διαφορετική μέθοδο κοστολόγησης (FIFO έναντι Μέσου Όρου κ.λπ.). Χρησιμοποιώντας company-dependent πεδία στο προϊόν ή στην κατηγορία αποφεύγεται η διπλή διαχείριση καταλόγων.


4. Παραγωγή: Προεπιλεγμένος προμηθευτής ανά εταιρεία

Όταν το ίδιο προϊόν αγοράζεται από διαφορετικούς προμηθευτές ανά εταιρεία, ένα company-dependent Many2one που δείχνει σε res.partner επιτρέπει σε κάθε εταιρεία να έχει τον δικό της προτιμώμενο προμηθευτή χωρίς συγκρούσεις.


5. Εξατομικευμένα πεδία για ρυθμιστικές ανάγκες

Σε επιχειρήσεις που δραστηριοποιούνται σε πολλά κράτη, συχνά χρειάζονται διαφορετικοί κωδικοί ή φορολογικές ταξινομήσεις ανά νομοθεσία. Ένα company-dependent Char πεδίο για HS code ή φορολογική κλάση εξυπηρετεί αυτήν την ανάγκη με ελάχιστη πολυπλοκότητα.

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


Υπάρχουν δύο βασικές οδοί για να δημιουργήσετε τέτοια πεδία: μέσω Odoo Studio ή με τεχνική ανάπτυξη σε Python.


Χρήση Odoo Studio

Το Studio επιτρέπει τη δημιουργία πεδίων χωρίς κώδικα, αλλά δεν εμφανίζει πάντα ξεκάθαρα την επιλογή company_dependent σε όλες τις εκδόσεις. Σε Odoo 16-17 η επιλογή εμφανίζεται σε ορισμένους τύπους πεδίων στα standard μοντέλα.


Αν χρειάζεστε πλήρη έλεγχο του χαρακτηριστικού, η τεχνική προσέγγιση με κώδικα είναι πιο αξιόπιστη. Το Studio είναι καλό για απλές περιπτώσεις, αλλά έχει όρια σε προχωρημένες παραμετροποιήσεις.


Τεχνική προσέγγιση: Python πεδία

Σε ένα custom module, η δήλωση ενός company-dependent πεδίου είναι απλή και είναι η συνήθης μέθοδος στην ανάπτυξη Odoo:

Παράδειγμα στη σύνταξη Python:
from odoo import fields, models

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    x_internal_ref = fields.Char(
        string='Εσωτερική Αναφορά (ανά εταιρεία)',
        company_dependent=True,
    )

    x_preferred_carrier_id = fields.Many2one(
        comodel_name='res.partner',
        string='Προτιμώμενος Μεταφορέας',
        company_dependent=True,
    )

Η προσθήκη company_dependent=True στη δήλωση είναι συνήθως το μόνο που χρειάζεται — ο ORM αναλαμβάνει τη διαχείριση αποθήκευσης και ανάκτησης.


Ορισμός προεπιλογών ανά εταιρεία

Στις εκδόσεις έως και 16 μπορείτε να ορίσετε προεπιλεγμένη τιμή σε επίπεδο εταιρείας μέσω του ir.property. Είναι χρήσιμο όταν θέλετε ένα λογικό default για όλες τις εγγραφές μιας εταιρείας χωρίς να τα αλλάζετε ένα-ένα.

Παράδειγμα κλήσης για να ορίσετε default μέσω κώδικα:
self.env['ir.property']._set_default(
    'x_internal_ref',
    'product.template',
    'DEFAULT-VALUE',
    company_id=self.env.company.id,
)

Στο Odoo 17+ οι προεπιλογές μπορούν να αποθηκεύονται απευθείας στο μοντέλο και να είναι προσβάσιμες από τον ορισμό του πεδίου.


Πεδία Studio και περιορισμοί

Όταν δουλεύετε με custom πεδία από το Studio, θυμηθείτε ότι το πρόθεμα x_ είναι απαραίτητο. Η company-dependent συμπεριφορά μπορεί να μην είναι εμφανής στο UI του Studio, αλλά μπορείτε να τη ρυθμίσετε από το τεχνικό μενού (developer mode) στις ρυθμίσεις.

Καλές πρακτικές


Η χρήση company-dependent πεδίων γίνεται απλή όταν ακολουθείτε συγκεκριμένα μοτίβα. Οι παρακάτω οδηγίες θα σας γλυτώσουν χρόνο και προβλήματα.


1. Χρησιμοποιήστε το μόνο όταν χρειάζεται πραγματικά

Αυτά τα πεδία προσθέτουν πολυπλοκότητα. Αν η τιμή είναι ίδια για όλες τις εταιρείες, προτιμήστε ένα κανονικό πεδίο. Το company_dependent=True πρέπει να εφαρμόζεται μόνο όταν κάθε εταιρεία όντως απαιτεί διαφορετική τιμή.


2. Δοκιμάζετε πάντα σε multi-company περιβάλλον

Όταν αναπτύσσετε ή δοκιμάζετε λειτουργίες που εμπλέκουν company-dependent πεδία, δουλέψτε με τουλάχιστον δύο εταιρείες ενεργές. Σφάλματα που δεν φαίνονται σε single-company setup εμφανίζονται άμεσα όταν υπάρχουν πολλαπλές οντότητες.


3. Χρησιμοποιήστε with_company() για διαχείριση τιμών άλλων εταιρειών

Αν ο κώδικας σας πρέπει να διαβάσει ή να γράψει τιμές για άλλη εταιρεία, χρησιμοποιήστε record.with_company(target_company) αντί να αλλάζετε χειροκίνητα το περιβάλλον, ώστε να αποφύγετε ανεπιθύμητες παρενέργειες.


4. Προσοχή σε εξαγωγές και εισαγωγές

Οι εξαγωγές αντανακλούν την εταιρεία του χρήστη που τις εκτελεί. Αν εισάγετε το ίδιο αρχείο με άλλη εταιρεία, οι τιμές θα οριστούν για την εταιρεία αυτή. Να είστε ρητοί σε στρατηγικές μετανάστευσης και εισαγωγής δεδομένων.


5. Τεκμηριώστε ποια πεδία είναι company-dependent

Οι χρήστες σπάνια γνωρίζουν ποια πεδία είναι ανά εταιρεία. Μία μικρή σημείωση στην εσωτερική τεκμηρίωση ή στο onboarding αποτρέπει σύγχυση όταν ένας χρήστης αλλάζει εταιρεία και βλέπει άλλες τιμές.


6. Προτιμήστε Many2one αντί Char για δομημένα δεδομένα

Όταν η τιμή ανά εταιρεία είναι αναφορά σε άλλη εγγραφή (λογαριασμός, τιμοκατάλογος, συνεργάτης), χρησιμοποιήστε Many2one company-dependent πεδίο αντί να αποθηκεύετε κείμενο. Αυτό κάνει το μοντέλο καθαρότερο και τις αναφορές πιο αξιόπιστες.


Συνηθισμένα λάθη και παγίδες


Ακόμα και έμπειροι developers πέφτουν σε παγίδες με αυτά τα πεδία. Εδώ είναι τα πιο κοινά προβλήματα που συναντώνται.


Παγίδα 1: Ξεχάσατε το εταιρικό context σε αυτόματες εργασίες

Χρονοπρογραμματισμένες ενέργειες και server actions μπορεί να τρέχουν με την πρώτη εταιρεία της βάσης ως context. Αν η ενέργεια διαβάζει ή γράφει company-dependent πεδίο, βεβαιωθείτε ρητά για ποια εταιρεία τρέχει — χρησιμοποιήστε with_company() για ασφάλεια.


Παγίδα 2: Θεωρώντας ότι συμπεριφέρεται σαν compute field

Τα company-dependent πεδία δεν είναι υπολογιζόμενα. Η διαφοροποίηση ανά εταιρεία πηγάζει από το storage, όχι από κάποια μέθοδο compute. Ο συνδυασμός compute= μαζί με company_dependent=True συνήθως δεν δουλεύει και μπορεί να προκαλέσει σφάλματα.


Παγίδα 3: Αναζητήσεις ανάμεσα σε όλες τις εταιρείες

Κανονικές αναζητήσεις μέσω ORM επιστρέφουν αποτελέσματα μόνο για την ενεργή εταιρεία. Αν χρειάζεστε αναζητήσεις σε όλες τις εταιρείες, σε Odoo ≤16 πρέπει να συμβουλευτείτε το ir.property, ενώ σε Odoo ≥17 να χειριστείτε σωστά τη στήλη jsonb — διαφορετικά θα έχετε λανθασμένα reports.


Παγίδα 4: Δεν ορίζετε προεπιλογές για όλες τις εταιρείες

Όταν εισάγετε ένα τέτοιο πεδίο σε ζωντανό σύστημα, οι υπάρχουσες εγγραφές θα επιστρέφουν False/None για τις εταιρείες που δεν έχουν ρητή τιμή. Αν η επιχειρησιακή λογική περιμένει default, δημιουργήστε ένα script μετανάστευσης που θα ορίσει τις προεπιλογές για όλες τις σχετικές εταιρείες.


Παγίδα 5: Μπερδεύοντάς το με δικαιώματα πρόσβασης

Τα company-dependent πεδία ελέγχουν ποια τιμή εμφανίζεται, όχι ποιος βλέπει το πεδίο συνολικά. Αν θέλετε να αποκρύψετε ολοκληρωτικά ένα πεδίο από ορισμένες εταιρείες ή χρήστες, χρησιμοποιήστε record rules ή field-level access rights — όχι company_dependent.

Συμπέρασμα


Το πεδίο ανά εταιρεία στο Odoo είναι ένα από αυτά τα χαρακτηριστικά που παραμένουν αόρατα έως ότου πραγματικά τα χρειαστείς — και τότε γίνονται αναντικατάστατα. Είναι το σωστό εργαλείο όταν το ίδιο record πρέπει να φέρει διαφορετικές ρυθμίσεις ανά νομική οντότητα.


Κατανοώντας πώς λειτουργεί σε επίπεδο ORM, ποια έκδοση άλλαξε τον τρόπο αποθήκευσης και ποιες παγίδες να αποφύγετε, θα κερδίσετε πολύτιμο χρόνο σε multi-company έργα. Η γνώση αυτή είναι συχνά αυτή που ξεχωρίζει έναν έμπειρο υλοποιητή Odoo.


Αν χτίζετε πάνω στο Odoo και χρειάζεστε καθαρό χειρισμό δεδομένων ανά εταιρεία, το company_dependent=True είναι συχνά η λύση που ψάχνατε.

Χρειάζεστε βοήθεια με την εγκατάσταση του Odoo σας;


Στην εταιρεία Dasolo βοηθάμε οργανισμούς να υλοποιήσουν, να παραμετροποιήσουν και να βελτιστοποιήσουν το Odoo σε κάθε κλίμακα — συμπεριλαμβανομένων σύνθετων multi-company εγκαταστάσεων. Είτε χρειάζεστε σχεδιασμό μοντέλου δεδομένων, στρατηγική για προσαρμοσμένα πεδία ή πλήρη rollout, έχουμε την τεχνική και λειτουργική εμπειρία για να το πετύχουμε.


Αν έχετε απορίες για τα company-dependent πεδία ή οποιοδήποτε άλλο κομμάτι της υλοποίησης Odoo, θα χαρούμε να βοηθήσουμε. Επικοινωνήστε μαζί μας και συζητάμε για το τι θέλετε να χτίσετε.

Company Dependent Field στο Odoo: Πώς Λειτουργεί και Πότε Να Το Χρησιμοποιήσετε
Dasolo 6 Μαρτίου 2026
Share this post
Σύνδεση to leave a comment