Skip to Content

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

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

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

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

Το άρθρωμα OCA sale_product_set επιτρέπει την εισαγωγή σετ προϊόντων (λίστες υλικών για πώληση) σε μια προσφορά με ένα κλικ. Δεν καθορίζει όμως την εμφάνιση της εκτύπωσης. Γι' αυτό αναπτύξαμε το άρθρωμα 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 × Measuring Kit Standard, και τοποθετεί από κάτω τις γραμμές του σετ. Οι ενότητες μέσα στο σετ γίνονται υποενότητες.
  2. Λειτουργία εκτύπωσης ανά σετ. Στο σετ ορίζεται μία φορά πώς θα εκτυπώνεται. Κατά την εισαγωγή, η λειτουργία μπορεί να αλλάξει στον βοηθό για τη συγκεκριμένη περίπτωση.
  3. Απόκρυψη γραμμών. Μεμονωμένες γραμμές μπορούν να σημανθούν ως Να μην εκτυπώνεται (στο σετ: Κρυφό). Προσμετρώνται στο σύνολο, αλλά ούτε εκτυπώνονται ούτε εμφανίζονται στην πύλη πελατών. Η ένδειξη μεταφέρεται από την προσφορά στο τιμολόγιο.
  4. Σταθερή τιμή ανά γραμμή σετ. Μια γραμμή σετ μπορεί να φέρει σταθερή τιμή μονάδας, η οποία αντικαθιστά την τιμή του τιμοκαταλόγου, για παράδειγμα για μια κρυφή διόρθωση τιμής.
Χωρίς το άρθρωμα (μόνο sale_product_set)Με το sale_product_set_layout
Γραμμές του σετ ως ασύνδετες θέσειςΓραμμή ενότητας με το όνομα του σετ, η ποσότητα στο όνομα, οι γραμμές από κάτω
Οι ενότητες μέσα στο σετ παραμένουν ενότητες και διασπούν τη δομήΟι ενότητες μέσα στο σετ γίνονται υποενότητες (line_subsection)
Η εκτύπωση είναι πάντα ίδιαΛειτουργία εκτύπωσης ανά σετ, με δυνατότητα αλλαγής κατά την εισαγωγή
Η διόρθωση τιμής είναι ορατή στην προσφορά και στο τιμολόγιοΗ γραμμή μπορεί να κρυφτεί, αλλά προσμετράται στο σύνολο
Τιμή μόνο από τον τιμοκατάλογοΠροαιρετικά σταθερή τιμή ανά γραμμή σετ
Η διάταξη τελειώνει στην προσφοράΗ διάταξη και η απόκρυψη ισχύουν για την προσφορά, την παραγγελία, το τιμολόγιο και την πύλη πελατών

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

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

# Druckmodus -> (collapse_prices, collapse_composition) der Abschnittszeile
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 € ανά σετ) και την κρύβουμε. Στο backend το τιμολόγιο είναι ευδιάκριτο και αναλυτικό, ενώ στην εκτύπωση εμφανίζεται η τιμή του πακέτου.

Η διόρθωση τιμής είναι ορατή και σημειωμένη στο backend, δεν είναι ορατή στην εκτύπωση της προσφοράς, στο 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 × Measuring Kit 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. Σε έναν δικό μας κατάλογο συνδέουμε με symlink μόνο τα δύο απαιτούμενα αρθρώματα και προσθέτουμε αυτόν τον κατάλογο στο addons_path, όχι ολόκληρα τα αποθετήρια.
  3. Εγκαθιστούμε σε βάση δεδομένων δοκιμών και ελέγχουμε ποια αρθρώματα παίρνουν κατά την εγκατάσταση την κατάσταση εγκατεστημένο.
  4. Μόνο τότε εγκαθιστούμε στην παραγωγή, με --workers=0, ώστε η κλήση να μην ανταγωνίζεται την εκτελούμενη υπηρεσία για τη θύρα HTTP.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i sale_product_set_layout --stop-after-init

Τα νέα πεδία και οι νέες προβολές βρίσκονται στη βάση δεδομένων μετά την εγκατάσταση. Αν η υπηρεσία εκτελείται σε λειτουργία πολλαπλών διεργασιών, οι workers φορτώνουν εκ νέου το τροποποιημένο registry μέσω του σήματος της βάσης δεδομένων. Οι αλλαγές στα αρχεία 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 υπολογίζει τιμές, εκπτώσεις ή φόρους. Αλλάζει μόνο τι εκτυπώνεται και τι εμφανίζεται στην πύλη.
  • Οι κρυφές γραμμές είναι ορατές στο backend. Η ένδειξη αφορά την εκτύπωση και την πύλη, όχι την προβολή οθόνης των υπαλλήλων.
  • Ελέγξτε τα στοιχεία του τιμολογίου. Οι κρυφές γραμμές προσμετρώνται στο σύνολο, αλλά δεν αναγράφονται στο παραστατικό. Το κατά πόσο αυτό συμβιβάζεται με τις απαιτήσεις για τα τιμολόγια στη χώρα σας, για παράδειγμα με την προβλεπόμενη περιγραφή των παραδιδόμενων αγαθών ή των παρεχόμενων υπηρεσιών, θα πρέπει να το διευκρινίσετε με τον φοροτεχνικό σύμβουλό σας πριν από τη χρήση σε τιμολόγια. Στις προσφορές η απόκρυψη είναι λιγότερο προβληματική. Το άρθρο δεν αποτελεί νομική συμβουλή.
  • Δοκιμασμένο για Odoo 19. Αναπτύξαμε και δοκιμάσαμε το άρθρωμα για το Odoo 19.0 Community. Χρησιμοποιεί επιλογές ενοτήτων που υπάρχουν σε αυτή τη μορφή στο Odoo 19. Για άλλες εκδόσεις δεν το έχουμε ελέγξει.

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

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

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

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

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

Προσμετράται μια κρυφή γραμμή στο σύνολο του τιμολογίου;

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

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

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

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

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

Εγκαθιστά το άρθρωμα απροσδόκητα και άλλα αρθρώματα;

Το ίδιο το άρθρωμα όχι. Στα αποθετήρια 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. Τα δεδομένα παραδείγματος στις εικόνες είναι τυχαία επιλεγμένα, τα ποσά καθαρά.