Skip to Content

Odoo 19 Community: σετ προϊόντων ως ενότητα στην προσφορά – το πρόσθετό μας ανοιχτού κώδικα Sale Product Set Layout

2 Νοεμβρίου 2026 | Odoo 19 Community | Δική μας ανάπτυξη
2 Νοεμβρίου 2026 από
Odoo 19 Community: σετ προϊόντων ως ενότητα στην προσφορά – το πρόσθετό μας ανοιχτού κώδικα Sale Product Set Layout

Μονάδα Sale Product Set Layout για το Odoo 19: σετ προϊόντων ως ενότητα στην προσφορά, με λειτουργία εκτύπωσης, κρυφές γραμμές και σταθερή τιμή

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

Η μονάδα sale_product_set της OCA επιτρέπει την εισαγωγή σετ προϊόντων (καταλόγων υλικών για πωλήσεις) σε μια προσφορά με ένα κλικ. Δεν καθορίζει όμως τη μορφή της εκτύπωσης. Γι’ αυτό αναπτύξαμε τη μονάδα Sale Product Set Layout (sale_product_set_layout). Έχει γραφτεί για το Odoo 19 και διατίθεται δωρεάν στο GitHub ως ελεύθερο λογισμικό με την άδεια AGPL-3:

github.com/Alex0176/odoo-sale-product-set-layout

Το πρόβλημα: σετ προϊόντων χωρίς έλεγχο της μορφής εκτύπωσης

Στο Odoo, ένα σετ προϊόντων είναι μια έτοιμη λίστα προϊόντων με τις ποσότητές τους. Αντί να αναζητάτε δέκα είδη ένα προς ένα, επιλέγετε Προσθήκη σετ στην προσφορά και εισάγονται όλες οι γραμμές μαζί. Έτσι εξοικονομείτε χρόνο και αποφεύγετε παραλείψεις. Η μονάδα sale_product_set από το αποθετήριο OCA/sale-workflow κάνει ακριβώς αυτό· τα ίδια τα σετ προέρχονται από τη μονάδα product_set στο αποθετήριο OCA/product-attribute.

Στην πράξη παραμένουν τρία κενά:

  • Δεν υπάρχει εμφανής ομαδοποίηση. Οι γραμμές του σετ εισάγονται στην προσφορά ως ανεξάρτητα είδη. Μετά την εισαγωγή, δεν φαίνεται πλέον ποιες γραμμές ανήκουν μαζί και το συνολικό ποσό του σετ δεν εμφανίζεται πουθενά.
  • Δεν υπάρχει έλεγχος της εκτύπωσης. Άλλοτε ο πελάτης πρέπει να βλέπει κάθε είδος με την τιμή του, άλλοτε μόνο την τιμή του πακέτου και άλλοτε μία μόνο γραμμή. Αυτή η επιλογή πρέπει να ορίζεται ανά σετ ή ανά πελάτη, χωρίς να χρειάζονται χειροκίνητες παρεμβάσεις σε κάθε νέα προσφορά.
  • Οι διορθώσεις τιμών δεν παρουσιάζονται όμορφα. Αν ένα πακέτο πρέπει να έχει σταθερή τιμή που διαφέρει από το άθροισμα των τιμών καταλόγου, χρειάζεται μια γραμμή διόρθωσης. Αυτή πρέπει να συμμετέχει στον υπολογισμό, αλλά δεν χρειάζεται απαραίτητα να εμφανίζεται στο έντυπο του πελάτη.

Το Odoo 19 διαθέτει τα απαραίτητα στοιχεία για μια σωστή λύση: Ενότητες και Υποενότητες στις γραμμές προσφοράς, με τις επιλογές Απόκρυψη τιμών και Απόκρυψη σύνθεσης (πεδία collapse_prices και collapse_composition). Η μονάδα συνδέει το σετ προϊόντων με αυτές τις τυπικές επιλογές, αντί να δημιουργεί ξεχωριστή μορφή εκτύπωσης.

Τι κάνει η μονάδα

  1. Εισαγωγή σετ ως ενότητας. Ο οδηγός Προσθήκη σετ δημιουργεί μια γραμμή ενότητας με το όνομα του σετ, για παράδειγμα 2 × Βασικό κιτ μέτρησης, και τοποθετεί από κάτω τις γραμμές του σετ. Οι ενότητες μέσα στο σετ μετατρέπονται σε υποενότητες.
  2. Λειτουργία εκτύπωσης ανά σετ. Ο τρόπος εκτύπωσης ορίζεται μία φορά στο σετ. Κατά την εισαγωγή, μπορείτε να αλλάξετε τη λειτουργία στον οδηγό μόνο για τη συγκεκριμένη περίπτωση.
  3. Απόκρυψη γραμμών. Μεμονωμένες γραμμές μπορούν να επισημανθούν ως Να μην εκτυπώνεται (στο σετ: Κρυφή). Συνυπολογίζονται στο σύνολο, αλλά ούτε εκτυπώνονται ούτε εμφανίζονται στην πύλη πελατών. Η ένδειξη μεταφέρεται από την προσφορά στο τιμολόγιο.
  4. Σταθερή τιμή ανά γραμμή σετ. Μια γραμμή σετ μπορεί να έχει σταθερή τιμή μονάδας που αντικαθιστά την τιμή του τιμοκαταλόγου, για παράδειγμα για μια κρυφή διόρθωση τιμής.
Χωρίς τη μονάδα (μόνο με το sale_product_set)Με το sale_product_set_layout
Γραμμές σετ ως ανεξάρτητα είδηΓραμμή ενότητας με το όνομα του σετ και την ποσότητα στο όνομα, με τις γραμμές του σετ από κάτω
Οι ενότητες μέσα στο σετ παραμένουν ενότητες και διασπούν τη δομήΟι ενότητες μέσα στο σετ γίνονται υποενότητες (line_subsection)
Πάντα ίδια μορφή εκτύπωσηςΛειτουργία εκτύπωσης ανά σετ, με δυνατότητα αλλαγής κατά την εισαγωγή
Η διόρθωση τιμής εμφανίζεται στην προσφορά και στο τιμολόγιοΗ γραμμή μπορεί να αποκρυφτεί, αλλά συνυπολογίζεται στο σύνολο
Τιμή μόνο από τον τιμοκατάλογοΠροαιρετική σταθερή τιμή ανά γραμμή σετ
Η μορφοποίηση περιορίζεται στην προσφοράΗ μορφοποίηση και η απόκρυψη ισχύουν για την προσφορά, την παραγγελία, το τιμολόγιο και την πύλη πελατών

Οι τρεις λειτουργίες εκτύπωσης αναλυτικά

Η λειτουργία εκτύπωσης ορίζεται στο πεδίο επιλογής print_mode του σετ προϊόντων. Κατά την εισαγωγή, μετατρέπεται σε τιμές για τις δύο τυπικές επιλογές της γραμμής ενότητας. Για τον σκοπό αυτό, η μονάδα περιέχει μία μόνο, ευανάγνωστη αντιστοίχιση:

# Λειτουργία εκτύπωσης -> (collapse_prices, collapse_composition) της γραμμής ενότητας
PRINT_MODE_FLAGS = {
    "detailed":   (False, False),
    "total_only": (True,  False),
    "summary":    (False, True),
}

Τρεις μορφές εκτύπωσης του ίδιου σετ προϊόντων: κάθε γραμμή με τιμή, μόνο η συνολική τιμή, μία μόνο γραμμή

Λειτουργία (print_mode)Ένδειξη στο σετΤυπική επιλογή στο OdooΜορφή εκτύπωσης
detailedΚάθε γραμμή με τιμήκαμίαΕνότητα, όλες οι γραμμές με ποσό
total_onlyΓραμμές χωρίς τιμές, μόνο το σύνολο του σετcollapse_prices (Απόκρυψη τιμών)Ενότητα με συνολικό ποσό, γραμμές μόνο με περιγραφή και ποσότητα
summaryΜόνο μία γραμμή με το σύνολο του σετcollapse_composition (Απόκρυψη σύνθεσης)Μόνο η γραμμή ενότητας με το συνολικό ποσό

Επειδή η μονάδα χρησιμοποιεί τις τυπικές επιλογές του Odoo 19 και όχι ξεχωριστή μορφή εκτύπωσης, η προσφορά, η επιβεβαίωση παραγγελίας, το τιμολόγιο και η πύλη πελατών λειτουργούν χωρίς προσαρμοσμένα πρότυπα αναφορών. Η ίδια συμπεριφορά ισχύει και για όσους έχουν δικά τους πρότυπα αναφορών που λαμβάνουν υπόψη τις επιλογές των ενοτήτων.

Κρυφές γραμμές και σταθερή τιμή

Μια συνηθισμένη περίπτωση: ένα πακέτο έχει τιμή χαμηλότερη από το άθροισμα των επιμέρους τιμών. Αντί να αλλάζετε τις επιμέρους τιμές, χρησιμοποιείτε μια γραμμή διόρθωσης με σταθερή τιμή (για παράδειγμα −50,00 € ανά σετ) και την αποκρύπτετε. Στο διαχειριστικό περιβάλλον ο υπολογισμός παραμένει κατανοητός, ενώ στην εκτύπωση εμφανίζεται η τιμή του πακέτου.

Η διόρθωση τιμής είναι ορατή και επισημασμένη στο διαχειριστικό περιβάλλον, αλλά δεν εμφανίζεται στην εκτύπωση της προσφοράς, στο PDF, στο τιμολόγιο και στην πύλη· το σύνολο παραμένει ίδιο

Για να είναι σαφές: η ένδειξη hide_in_report δεν αλλάζει τίποτα στον υπολογισμό. Η ποσότητα, η τιμή, η έκπτωση, ο φόρος, τα σύνολα και οι λογιστικές εγγραφές υπολογίζονται όπως πάντα από την τυπική λειτουργία του Odoo. Η γραμμή απλώς δεν εμφανίζεται στην εκτύπωση και στην πύλη.

  • Στο σετ προϊόντων: γραμμή σετ με την επιλογή Κρυφή και, προαιρετικά, Σταθερή τιμή μαζί με την Τιμή μονάδας.
  • Στις γραμμές προσφοράς και τιμολογίου: στήλη Να μην εκτυπώνεται (hide_in_report), και για κανονικές γραμμές που δεν ανήκουν σε σετ.
  • Μεταφορά της ένδειξης: Κατά τη δημιουργία του τιμολογίου από την παραγγελία, η ένδειξη μεταφέρεται στη γραμμή τιμολογίου. Κατά την αντιγραφή μιας προσφοράς, διατηρείται.

Τεχνική υλοποίηση

Η μονάδα είναι σκόπιμα μικρή: επεκτείνει υπάρχοντα μοντέλα και αντικαθιστά μόνο τα σημεία όπου το Odoo αποφασίζει ποιες γραμμές εκτυπώνονται και πώς εισάγεται ένα σετ. Δεν υπάρχουν νέα πρότυπα αναφορών, νέα μοντέλα ή παρεμβάσεις SQL.

Ροή δεδομένων: σετ προϊόντων, οδηγός Προσθήκη σετ, γραμμές προσφοράς, γραμμές τιμολογίου, PDF και πύλη πελατών

Μοντέλα και πεδία που επεκτείνονται

ΜοντέλοΠροσθήκη
product.setΠεδία insert_as_section (Boolean, ενεργό από προεπιλογή) και print_mode (επιλογή, υποχρεωτικό πεδίο, προεπιλογή detailed)
product.set.lineΠεδία hide_in_report, fixed_price, price_unit· η prepare_sale_order_line_values() τα μεταβιβάζει στη γραμμή προσφοράς
sale.product.set.wizardΠεδία insert_as_section, section_name, print_mode· η _prepare_order_lines() δημιουργεί τη γραμμή ενότητας
sale.order / sale.order.lineΠεδίο hide_in_report (με copy=True)· η _get_order_lines_to_report() παραλείπει τις κρυφές γραμμές· η _prepare_invoice_line() μεταβιβάζει την ένδειξη
account.move / account.move.lineΠεδίο hide_in_report· οι _get_move_lines_to_report(), _get_detailed_lines() και _get_subsection_lines() φιλτράρουν τις κρυφές γραμμές· η _get_aml_vals() μεταφέρει την ένδειξη στα δεδομένα της αναφοράς

Απόκρυψη στην προσφορά

Το Odoo 19 προσδιορίζει τις γραμμές της προσφοράς που θα εκτυπωθούν στη μέθοδο _get_order_lines_to_report(). Το πρόσθετο προσθέτει εκεί ένα φίλτρο. Δεν χρειάζεται παρέμβαση στο πρότυπο της αναφοράς: τόσο το πρότυπο αναφοράς της προσφοράς (sale/report/ir_actions_report_templates.xml) όσο και το πρότυπο της πύλης (sale/views/sale_portal_templates.xml) καλούν αυτή τη μέθοδο:

class SaleOrder(models.Model):
    _inherit = "sale.order"

    def _get_order_lines_to_report(self):
        return super()._get_order_lines_to_report().filtered(
            lambda line: not line.hide_in_report
        )

Μεταφορά στο τιμολόγιο

Κατά τη δημιουργία της γραμμής τιμολογίου από τη γραμμή προσφοράς (_prepare_invoice_line()), η ένδειξη αντιγράφεται. Στην πλευρά του τιμολογίου, το Odoo 19 διαθέτει διάφορες διαδρομές μέσω των οποίων οι γραμμές περνούν στην αναφορά: την κύρια λίστα, τις γραμμές μιας ενότητας και τις γραμμές μιας υποενότητας. Γι’ αυτό το πρόσθετο εφαρμόζει φίλτρα σε διάφορα σημεία (_get_move_lines_to_report() στο παραστατικό, _get_detailed_lines() και _get_subsection_lines() στη γραμμή), διαφορετικά μια κρυφή γραμμή θα μπορούσε να επανεμφανιστεί μέσω κάποιας άλλης διαδρομής:

class AccountMoveLine(models.Model):
    _inherit = "account.move.line"

    hide_in_report = fields.Boolean(string="Hidden in report")

    def _get_aml_vals(self, hide_taxes):
        res = super()._get_aml_vals(hide_taxes)
        res["hide_in_report"] = self.hide_in_report
        return res

    def _get_detailed_lines(self, children_lines, direct_children_lines, subsection_lines):
        res = super()._get_detailed_lines(children_lines, direct_children_lines, subsection_lines)
        return [vals for vals in res if not vals.get("hide_in_report")]

    def _get_subsection_lines(self, subsection_line, children_lines):
        res = super()._get_subsection_lines(subsection_line, children_lines)
        return [vals for vals in res if not vals.get("hide_in_report")]

Ο οδηγός: ενότητα αντί για μεμονωμένες γραμμές

Ο οδηγός sale.product.set.wizard του sale_product_set δημιουργεί τις γραμμές της προσφοράς στη μέθοδο _prepare_order_lines(). Το πρόσθετο επαναορίζει αυτή τη μέθοδο. Αν η επιλογή Εισαγωγή ως ενότητα είναι απενεργοποιημένη, καλεί απλώς την αρχική μέθοδο και η συμπεριφορά παραμένει ίδια με εκείνη του πρόσθετου της OCA. Διαφορετικά, δημιουργείται πρώτα η γραμμή ενότητας με τις δύο τυπικές επιλογές και ακολουθούν οι γραμμές του σετ. Οι ενότητες μέσα στο σετ μετατρέπονται σε υποενότητες, ώστε να μη διασπούν την κύρια δομή:

def _prepare_order_lines(self):
    if not self.insert_as_section:
        return super()._prepare_order_lines()
    sequence = self._get_max_sequence() + 1
    collapse_prices, collapse_composition = PRINT_MODE_FLAGS[self.print_mode or "detailed"]
    order_lines = [Command.create({
        "display_type": "line_section",
        "name": self.section_name or self.product_set_id.name,
        "sequence": sequence,
        "collapse_prices": collapse_prices,
        "collapse_composition": collapse_composition,
    })]
    for set_line in self._get_lines():
        sequence += 1
        values = set_line.prepare_sale_order_line_values(self.order_id, self.quantity, sequence)
        if values.get("display_type") == "line_section":
            values["display_type"] = "line_subsection"
        order_lines.append(Command.create(values))
    return order_lines

Αποφάσεις που δεν φαίνονται

  • Ξεχωριστές μέθοδοι υπολογισμού στον οδηγό. Το όνομα ενότητας, η λειτουργία εκτύπωσης και η επιλογή Εισαγωγή ως ενότητα έχουν το καθένα τη δική του μέθοδο compute (store=True, readonly=False). Αν και τα τρία χρησιμοποιούσαν την ίδια μέθοδο, μια τιμή που θα δινόταν ρητά σε ένα πεδίο θα επανέφερε τα υπόλοιπα στις αρχικές τιμές τους. Αυτό γίνεται ιδιαίτερα αισθητό όταν ο οδηγός δημιουργείται με προκαθορισμένες τιμές από κώδικα ή δοκιμές.
  • Όνομα ενότητας με ποσότητα. Όταν η ποσότητα διαφέρει από 1, αναγράφεται στο όνομα (2 × Messkit Standard, με κόμμα ως υποδιαστολή), ώστε στην εκτύπωση να φαίνεται ότι πρόκειται για δύο σετ και όχι για ένα σετ με διπλάσια ποσότητα.
  • Σταθερή τιμή μόνο στις γραμμές προϊόντων. Η prepare_sale_order_line_values() ορίζει τα hide_in_report και price_unit μόνο όταν η γραμμή του σετ δεν είναι γραμμή ενότητας ή σημείωσης.
  • Τυπικές δυνατότητες του Odoo αντί για προσαρμοσμένη κατασκευή. Η λειτουργία εκτύπωσης και η απόκρυψη χρησιμοποιούν υπάρχοντα hooks και πεδία του Odoo 19. Έτσι οι αναβαθμίσεις είναι πιο εύκολα διαχειρίσιμες: αν το Odoo αλλάξει το πρότυπο της αναφοράς, το πρόσθετο παραμένει συμβατό όσο εξακολουθούν να υπάρχουν οι μέθοδοι.

Εγκατάσταση χωρίς ανεπιθύμητες παρενέργειες

Προϋποθέσεις: Odoo 19.0, sale_product_set (OCA/sale-workflow, κλάδος 19.0) και product_set (OCA/product-attribute, κλάδος 19.0). Το ίδιο το πρόσθετο εξαρτάται από τα sale_management, sale_product_set και account.

Η παγίδα του auto_install στα πρόσθετα της OCA. Πολλά αποθετήρια της OCA περιέχουν πρόσθετα με auto_install. Μόλις είναι διαθέσιμες οι εξαρτήσεις τους, το Odoo τα εγκαθιστά αυτόματα στην επόμενη εγκατάσταση ή ενημέρωση, χωρίς να ρωτήσει. Έτσι, αν προσθέσετε ολόκληρο το αποθετήριο της OCA στο addons_path μιας εγκατάστασης παραγωγής, μπορεί να βρεθείτε με πρόσθετα που κανείς δεν ήθελε. Στο OCA/product-attribute αυτό αφορά, για παράδειγμα, το purchase_product_template_tags. Η δική μας διαδικασία:

  1. Δημιουργήστε ρηχά αντίγραφα των δύο αποθετηρίων της OCA (git clone --depth 1 --branch 19.0).
  2. Σε ξεχωριστό κατάλογο, δημιουργήστε συμβολικούς συνδέσμους μόνο για τα δύο απαραίτητα πρόσθετα και προσθέστε αυτόν τον κατάλογο στο addons_path, όχι ολόκληρα τα αποθετήρια.
  3. Εγκαταστήστε τα σε μια δοκιμαστική βάση δεδομένων και ελέγξτε ποια πρόσθετα αποκτούν κατάσταση εγκατεστημένο.
  4. Μόνο τότε προχωρήστε σε εγκατάσταση στο περιβάλλον παραγωγής, με --workers=0, ώστε η εντολή να μη διεκδικεί την ίδια θύρα HTTP με την υπηρεσία που εκτελείται ήδη.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i sale_product_set_layout --stop-after-init

Μετά την εγκατάσταση, τα νέα πεδία και οι προβολές υπάρχουν στη βάση δεδομένων. Αν η υπηρεσία εκτελείται με πολλαπλές διεργασίες, οι διεργασίες worker επαναφορτώνουν το τροποποιημένο μητρώο μέσω του σήματος της βάσης δεδομένων. Οι αλλαγές στα αρχεία Python του πρόσθετου τίθενται σε ισχύ μόνο μετά από επανεκκίνηση της υπηρεσίας.

Χρήση βήμα προς βήμα

  1. Δημιουργία σετ: Πωλήσεις → Προϊόντα → Σετ προϊόντων. Δώστε όνομα στο σετ, ορίστε τις επιλογές Εισαγωγή ως ενότητα και Λειτουργία εκτύπωσης και καταχωρίστε τα προϊόντα με τις ποσότητές τους. Στις γραμμές διόρθωσης ενεργοποιήστε τις επιλογές Κρυφό και Σταθερή τιμή.
  2. Στην προσφορά: Πατήστε Προσθήκη σετ και επιλέξτε σετ και ποσότητα. Μπορείτε να αλλάξετε το όνομα της ενότητας και τη λειτουργία εκτύπωσης πριν από την εισαγωγή.
  3. Απόκρυψη μεμονωμένων γραμμών: Στην προσφορά ή στο τιμολόγιο ενεργοποιήστε τη στήλη Να μην εκτυπώνεται.
  4. Έλεγχος: Ανοίξτε την προεπισκόπηση ή το PDF. Την ίδια εμφάνιση βλέπουν οι πελάτες στην πύλη.

Δοκιμές

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

  • Εισαγωγή ως ενότητα, μαζί με τη λειτουργία εκτύπωσης και την υποενότητα
  • Η κρυφή γραμμή απουσιάζει από τις γραμμές προς εκτύπωση
  • Λειτουργία Μία γραμμή (summary)
  • Εισαγωγή χωρίς ενότητα, σύμφωνα με την αρχική συμπεριφορά
  • Το τιμολόγιο κληρονομεί την ένδειξη hide_in_report, η γραμμή απουσιάζει από την _get_move_lines_to_report(), αλλά εξακολουθεί να συνυπολογίζεται στο σύνολο της ενότητας
  • Το τιμολόγιο στη λειτουργία Μόνο συνολική τιμή δεν εμφανίζει την κρυφή γραμμή στις γραμμές της ενότητας, ενώ το σύνολο της ενότητας παραμένει πλήρες
odoo-bin -d <testdatenbank> -i sale_product_set_layout \
         --test-enable --test-tags=/sale_product_set_layout --stop-after-init

Η γερμανική μετάφραση βρίσκεται στο i18n/de.po.

Περιορισμοί και νομική σημείωση

  • Μόνο διάταξη. Το πρόσθετο δεν αλλάζει τον τρόπο με τον οποίο το Odoo υπολογίζει τιμές, εκπτώσεις ή φόρους. Αλλάζει μόνο ό,τι εκτυπώνεται και εμφανίζεται στην πύλη.
  • Οι κρυφές γραμμές παραμένουν ορατές στο περιβάλλον διαχείρισης. Η ένδειξη αφορά την εκτύπωση και την πύλη, όχι την προβολή στην οθόνη των υπαλλήλων.
  • Ελέγξτε τα στοιχεία των τιμολογίων. Οι κρυφές γραμμές συνυπολογίζονται στο σύνολο, αλλά δεν εμφανίζονται στο παραστατικό. Το αν αυτό είναι συμβατό με τις απαιτήσεις τιμολόγησης στη χώρα σας, όπως η υποχρεωτική περιγραφή των παραδοθέντων αγαθών ή των παρεχόμενων υπηρεσιών, θα πρέπει να το διευκρινίσετε με τον φοροτεχνικό σας πριν χρησιμοποιήσετε τη λειτουργία σε τιμολόγια. Στις προσφορές, η απόκρυψη δημιουργεί λιγότερα ζητήματα. Το άρθρο δεν αποτελεί νομική συμβουλή.
  • Δοκιμασμένο για το Odoo 19. Αναπτύξαμε και δοκιμάσαμε το πρόσθετο για το Odoo 19.0 Community. Χρησιμοποιεί επιλογές ενοτήτων που υπάρχουν με αυτή τη μορφή στο Odoo 19. Δεν το έχουμε ελέγξει σε άλλες εκδόσεις.

Συχνές ερωτήσεις

Γιατί χρειάζομαι το πρόσθετο, αφού το Odoo 19 υποστηρίζει ήδη ενότητες;

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

Ποια είναι η διαφορά ανάμεσα στην «Απόκρυψη τιμών» και την «Απόκρυψη σύνθεσης»;

Η «Απόκρυψη τιμών» (collapse_prices) διατηρεί τις γραμμές, αλλά δεν εμφανίζει ποσά, παρά μόνο το σύνολο της ενότητας. Η «Απόκρυψη σύνθεσης» (collapse_composition) αποκρύπτει εντελώς τις γραμμές και ο πελάτης βλέπει μόνο την ενότητα με το σύνολο.

Συνυπολογίζεται μια κρυφή γραμμή στο σύνολο του τιμολογίου;

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

Μπορώ να αλλάξω τη λειτουργία εκτύπωσης κατά την εισαγωγή;

Ναι. Η προεπιλεγμένη λειτουργία προέρχεται από το σετ, αλλά στον οδηγό μπορείτε να την αλλάξετε για τη συγκεκριμένη εισαγωγή. Το ίδιο το σετ παραμένει αμετάβλητο.

Τι συμβαίνει αν απενεργοποιήσω την επιλογή Εισαγωγή ως ενότητα;

Τότε ο οδηγός λειτουργεί όπως στο πρόσθετο sale_product_set της OCA: οι γραμμές του σετ εισάγονται χωρίς ενότητα.

Εγκαθιστά το πρόσθετο απρόσμενα και άλλα πρόσθετα;

Το ίδιο το πρόσθετο όχι. Ωστόσο, στα αποθετήρια της OCA μπορεί να εγκατασταθούν πρόσθετα με auto_install, αν προσθέσετε ολόκληρα αποθετήρια στο addons_path. Γι’ αυτό δημιουργήστε συνδέσμους μόνο για τα δύο απαραίτητα πρόσθετα (βλ. ενότητα Εγκατάσταση).

Λειτουργεί το πρόσθετο με το Odoo Enterprise;

Το πρόσθετο εξαρτάται μόνο από πρόσθετα της έκδοσης Community (sale_management, account) και από τα δύο πρόσθετα της OCA. Το χρησιμοποιούμε στο Odoo 19 Community. Δεν το έχουμε δοκιμάσει στην έκδοση Enterprise.

Με ποια άδεια διατίθεται το πρόσθετο;

Με την AGPL-3. Μπορείτε να το χρησιμοποιείτε, να το τροποποιείτε και να το αναδιανέμετε, αρκεί οι αλλαγές να παραμένουν υπό την ίδια άδεια. Οι αναφορές σφαλμάτων και οι προτάσεις βελτίωσης ως Issue στο αποθετήριο στο GitHub είναι ευπρόσδεκτες.

Υποστήριξη από την Biricon IT Services

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

Επικοινωνήστε μαζί μας τώρα

Ενημέρωση: 2 Νοεμβρίου 2026. Έκδοση πρόσθετου 19.0.1.0.0. Τα ενδεικτικά δεδομένα στις εικόνες είναι υποθετικά και τα ποσά αναγράφονται χωρίς ΦΠΑ.