Skip to Content

Odoo 19 Community: setiau cynnyrch yn y dyfynbris fel adran – ein modiwl ffynhonnell agored Sale Product Set Layout

2 Tachwedd 2026 | Odoo 19 Community | Datblygiad mewnol
2 Tachwedd 2026 by
Odoo 19 Community: setiau cynnyrch yn y dyfynbris fel adran – ein modiwl ffynhonnell agored Sale Product Set Layout

Modiwl Odoo 19 Sale Product Set Layout: setiau cynnyrch fel adran yn y dyfynbris gyda modd argraffu, llinellau cudd a phris sefydlog

Mae angen dau beth ar yr un pryd yn y dyfynbris ar bwy bynnag sy'n gwerthu pecynnau yn Odoo, er enghraifft offeryn mesur gydag ategolion a gosod, gweithfan gyda chaledwedd a gosodiad, neu becyn cynnal a chadw sy'n cynnwys sawl gwasanaeth: Rhaid i'r cyfansoddiad fod yn yr archeb, fel bod y warws, y tîm technegol a'r adran anfonebu yn gwybod beth sy'n cael ei ddanfon. Ond ar yr argraffiad i'r cwsmer ni ddylai pob eitem unigol ymddangos gyda phob pris unigol ym mhob achos.

Mae'r modiwl OCA sale_product_set yn caniatáu mewnosod setiau cynnyrch (rhestrau deunyddiau ar gyfer gwerthu) mewn dyfynbris gydag un clic. Nid yw'n penderfynu ar olwg yr argraffiad. Ar gyfer hynny rydym wedi datblygu'r modiwl Sale Product Set Layout (sale_product_set_layout). Mae wedi'i ysgrifennu ar gyfer Odoo 19 ac ar gael am ddim ar GitHub fel meddalwedd rydd o dan y drwydded AGPL-3:

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

Y broblem: setiau cynnyrch heb ddylanwad ar olwg yr argraffiad

Mae set cynnyrch yn Odoo yn rhestr barod o gynhyrchion gyda meintiau. Yn lle chwilio am ddeg eitem yn unigol, mae rhywun yn dewis Ychwanegu set yn y dyfynbris ac yn cael yr holl linellau ar unwaith. Mae hyn yn arbed amser ac yn atal eitemau rhag cael eu hanghofio. Mae'r modiwl sale_product_set o'r ystorfa OCA/sale-workflow yn gwneud yn union hynny; daw'r setiau eu hunain o product_set yn yr ystorfa OCA/product-attribute.

Yn ymarferol, mae tri bwlch yn weddill:

  • Dim grwpio amlwg. Mae llinellau'r set yn glanio yn y dyfynbris fel eitemau rhydd. Ar ôl eu mewnosod, nid yw rhywun yn gweld mwyach pa linellau sy'n perthyn at ei gilydd, ac nid yw cyfanswm y set i'w weld yn unman.
  • Dim dylanwad ar yr argraffiad. Weithiau dylai'r cwsmer weld pob eitem gyda phris, weithiau dim ond pris y pecyn, weithiau dim ond un llinell. Penderfyniad yw hwn ar gyfer pob set neu bob cwsmer, nid rhywbeth i'w wneud â llaw o'r newydd ar gyfer pob dyfynbris.
  • Mae cywiriadau pris yn drafferthus. Os yw pecyn i gael pris sefydlog sy'n wahanol i gyfanswm y prisiau rhestr, mae angen llinell gywiro. Mae honno'n perthyn yn y cyfrifiad, ond nid o reidrwydd ar bapur y cwsmer.

Mae Odoo 19 yn cynnwys y blociau adeiladu i ddatrys hyn yn lân: adrannau ac is-adrannau mewn llinellau dyfynbris gyda'r opsiynau Cuddio prisiau a Cuddio cyfansoddiad (meysydd collapse_prices a collapse_composition). Mae'r modiwl yn cysylltu'r set cynnyrch â'r opsiynau safonol hyn, yn hytrach na dyfeisio fformat argraffu ei hun.

Yr hyn y mae'r modiwl yn ei wneud

  1. Mewnosod set fel adran. Mae'r dewin Ychwanegu set yn creu llinell adran gydag enw'r set, er enghraifft 2 × Messkit Standard, ac yn gosod llinellau'r set oddi tani. Mae adrannau o fewn y set yn dod yn is-adrannau.
  2. Modd argraffu ar gyfer pob set. Yn y set, penderfynir unwaith sut y caiff ei argraffu. Wrth fewnosod, gellir newid y modd yn y dewin ar gyfer yr achos unigol hwnnw.
  3. Cuddio llinellau. Gellir marcio llinellau unigol fel Peidio ag argraffu (yn y set: Cudd). Maent yn cyfrif yn y cyfanswm, ond ni chânt eu hargraffu na'u dangos ym mhorth y cwsmer. Mae'r marcydd yn symud o'r dyfynbris i'r anfoneb.
  4. Pris sefydlog ar gyfer pob llinell set. Gall llinell set gario pris uned sefydlog sy'n disodli'r pris o'r rhestr brisiau, er enghraifft ar gyfer cywiriad pris cudd.
Heb y modiwl (sale_product_set yn unig)Gyda sale_product_set_layout
Llinellau set fel eitemau rhyddLlinell adran gydag enw'r set, y maint yn yr enw, llinellau oddi tani
Mae adrannau yn y set yn aros yn adrannau ac yn chwalu'r strwythurMae adrannau yn y set yn dod yn is-adrannau (line_subsection)
Golwg argraffu bob amser yr un fathModd argraffu ar gyfer pob set, y gellir ei newid wrth fewnosod
Cywiriad pris yn weladwy ar y dyfynbris a'r anfonebGellir cuddio'r llinell, ond mae'n cyfrif yn y cyfanswm
Pris o'r rhestr brisiau yn unigPris sefydlog dewisol ar gyfer pob llinell set
Mae'r cynllun yn gorffen wrth y dyfynbrisMae cynllun a chuddio yn berthnasol i'r dyfynbris, yr archeb, yr anfoneb a phorth y cwsmer

Y tri modd argraffu yn fanwl

Mae'r modd argraffu yn faes dewis print_mode ar y set cynnyrch. Wrth fewnosod, caiff ei drosi i ddau switsh safonol y llinell adran. Ar gyfer hynny mae un mapiad hawdd ei ddarllen yn y modiwl:

# Modd argraffu -> (collapse_prices, collapse_composition) y llinell adran
PRINT_MODE_FLAGS = {
    "detailed":   (False, False),
    "total_only": (True,  False),
    "summary":    (False, True),
}

Tri golwg argraffu o'r un set cynnyrch: pob llinell gyda phris, cyfanswm yn unig, un llinell yn unig

Modd (print_mode)Dangosiad yn y setOpsiwn safonol yn OdooGolwg argraffu
detailedPob llinell gyda phrisdimAdran, pob llinell gyda swm
total_onlyLlinellau heb brisiau, cyfanswm y set yn unigcollapse_prices (Cuddio prisiau)Adran gyda chyfanswm, llinellau gyda disgrifiad a maint yn unig
summaryDim ond un llinell gyda chyfanswm y setcollapse_composition (Cuddio cyfansoddiad)Dim ond y llinell adran gyda'r cyfanswm

Gan fod y modiwl yn defnyddio opsiynau safonol Odoo 19 ac nid fformat argraffu ei hun, mae'r dyfynbris, cadarnhad yr archeb, yr anfoneb a phorth y cwsmer yn gweithio heb dempledi adroddiad wedi'u haddasu. Mae'r rhai sydd â'u templedi adroddiad eu hunain sy'n ystyried yr opsiynau adran hefyd yn cael yr ymddygiad hwn.

Llinellau cudd a phris sefydlog

Achos cyffredin: Mae gan becyn bris pecyn sy'n is na chyfanswm y prisiau unigol. Yn hytrach na phlygu'r prisiau unigol, defnyddir llinell gywiro gyda phris sefydlog (er enghraifft −50,00 € ar gyfer pob set) a'i chuddio. Yn y backend, mae'r anfoneb yn hawdd ei holrhain; ar yr argraffiad, mae pris y pecyn yn ymddangos.

Cywiriad pris yn weladwy ac wedi'i farcio yn y backend, ddim yn weladwy yn argraffiad y dyfynbris, y PDF, yr anfoneb na'r porth, cyfanswm yr un fath

Pwysig i'w ddeall: Nid yw'r marcydd hide_in_report yn newid dim yn y cyfrifiad. Mae maint, pris, gostyngiad, treth, cyfansymiau a chofnodion cyfrifyddu yn cael eu cynhyrchu'n ddigyfnewid gan Odoo safonol. Dim ond o'r argraffiad ac o'r porth y mae'r llinell yn absennol.

  • Ar y set cynnyrch: Llinell set gyda Cudd ac, yn ddewisol, Pris sefydlog gyda Phris uned.
  • Ar linellau dyfynbris ac anfoneb: Colofn Peidio ag argraffu (hide_in_report), hefyd ar gyfer llinellau arferol heb set.
  • Trosglwyddo: Wrth greu'r anfoneb o'r archeb, caiff y marcydd ei drosglwyddo i linell yr anfoneb. Wrth gopïo dyfynbris, mae'n cael ei gadw.

Gweithredu technegol

Mae'r modiwl yn fwriadol fach: Mae'n ymestyn modelau presennol ac yn diystyru dim ond y mannau lle mae Odoo yn penderfynu pa linellau a argraffir a sut y caiff set ei mewnosod. Nid oes templedi adroddiad newydd, dim modelau newydd a dim ymyriadau SQL.

Llif data: set cynnyrch, dewin Ychwanegu set, llinellau dyfynbris, llinellau anfoneb, PDF a phorth y cwsmer

Modelau a meysydd estynedig

ModelYchwanegiad
product.setMeysydd insert_as_section (Boolean, ymlaen yn ddiofyn) a print_mode (dewis, maes gorfodol, detailed yn ddiofyn)
product.set.lineMeysydd hide_in_report, fixed_price, price_unit; mae prepare_sale_order_line_values() yn eu trosglwyddo i'r llinell dyfynbris
sale.product.set.wizardMeysydd insert_as_section, section_name, print_mode; mae _prepare_order_lines() yn adeiladu'r llinell adran
sale.order / sale.order.lineMaes hide_in_report (gyda copy=True); mae _get_order_lines_to_report() yn hepgor llinellau cudd; mae _prepare_invoice_line() yn trosglwyddo'r marcydd
account.move / account.move.lineMaes hide_in_report; mae _get_move_lines_to_report(), _get_detailed_lines() a _get_subsection_lines() yn hidlo llinellau cudd; mae _get_aml_vals() yn cario'r marcydd i mewn i ddata'r adroddiad

Cuddio yn y dyfynbris

Mae Odoo 19 yn pennu'r llinellau dyfynbris i'w hargraffu yn _get_order_lines_to_report(). Mae'r modiwl yn atodi hidlydd yno. Nid oes angen ymyrryd â'r templed adroddiad: Mae templed adroddiad y dyfynbris (sale/report/ir_actions_report_templates.xml) a'r templed porth (sale/views/sale_portal_templates.xml) yn galw'r dull hwn:

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
        )

Trosglwyddo i'r anfoneb

Wrth gynhyrchu llinell yr anfoneb o'r llinell dyfynbris (_prepare_invoice_line()), caiff y marcydd ei gopïo. Ar ochr yr anfoneb yn Odoo 19 mae sawl ffordd y mae llinellau'n cyrraedd yr adroddiad: y brif restr, llinellau adran a llinellau is-adran. Felly mae'r modiwl yn hidlo mewn sawl man (_get_move_lines_to_report() ar y ddogfen, _get_detailed_lines() a _get_subsection_lines() ar y llinell), fel arall gallai llinell gudd ailymddangos trwy un o'r ffyrdd eraill:

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")]

Y dewin: adran yn lle llinellau rhydd

Mae'r dewin sale.product.set.wizard o sale_product_set yn cynhyrchu'r llinellau dyfynbris yn _prepare_order_lines(). Mae'r modiwl yn diystyru'r dull hwn. Os yw Mewnosod fel adran i ffwrdd, mae'n galw'r dull gwreiddiol yn unig, ac mae'r ymddygiad yn aros fel yn y modiwl OCA. Fel arall, crëir y llinell adran gyda'r ddau switsh safonol yn gyntaf, yna dilyn llinellau'r set. Mae adrannau o fewn y set yn dod yn is-adrannau, fel nad ydynt yn chwalu'r brif strwythur:

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

Penderfyniadau na welir

  • Dulliau cyfrifo ar wahân yn y dewin. Mae gan enw'r adran, y modd argraffu a Mewnosod fel adran eu dull compute eu hunain (store=True, readonly=False). Pe bai'r tri yn rhannu'r un dull, byddai gwerth a drosglwyddir yn benodol ar gyfer un maes yn ailosod y lleill. Mae hyn yn amlwg yn bennaf pan grëir y dewin o god neu brofion gyda gwerthoedd.
  • Enw'r adran gyda maint. Os yw'r maint yn wahanol i 1, mae yn yr enw (2 × Messkit Standard, gyda choma fel gwahanydd degol), fel bod modd gweld ar yr argraffiad mai dwy set ydynt ac nid un set gyda maint dwbl.
  • Pris sefydlog ar linellau cynnyrch yn unig. Dim ond os nad yw'r llinell set yn llinell adran neu nodyn y mae prepare_sale_order_line_values() yn gosod hide_in_report a price_unit.
  • Odoo safonol yn lle datblygu ein hunain. Mae'r modd argraffu a chuddio yn defnyddio bachau a meysydd presennol Odoo 19. Mae hyn yn gwneud diweddariadau'n hylaw: Os yw Odoo yn newid y templed adroddiad, mae'r modiwl yn aros yn ddilys cyhyd ag y mae'r dulliau'n bodoli.

Gosod heb sgil-effeithiau diangen

Gofynion: Odoo 19.0, sale_product_set (OCA/sale-workflow, cangen 19.0) a product_set (OCA/product-attribute, cangen 19.0). Mae'r modiwl ei hun yn dibynnu ar sale_management, sale_product_set ac account.

Trap auto_install gyda modiwlau OCA. Mae llawer o ystorfeydd OCA yn cynnwys modiwlau gydag auto_install. Cyn gynted ag y bydd eu dibyniaethau ar gael, mae Odoo yn eu gosod heb ofyn wrth y gosod neu'r diweddaru nesaf. Felly, pwy bynnag sy'n rhoi'r ystorfa OCA gyfan yn yr addons_path o enghraifft gynhyrchiol, efallai y caiff fodiwlau nad oedd neb eu heisiau. Gydag OCA/product-attribute, mae hyn yn effeithio, er enghraifft, ar purchase_product_template_tags. Ein dull gweithredu:

  1. Clonio'r ddwy ystorfa OCA yn fas (git clone --depth 1 --branch 19.0).
  2. Mewn cyfeiriadur ar wahân, cysylltu dim ond y ddau fodiwl angenrheidiol trwy symlink a chynnwys y cyfeiriadur hwnnw yn yr addons_path, nid yr ystorfeydd cyfan.
  3. Gosod ar gronfa ddata brawf a gwirio pa fodiwlau sy'n cael y statws wedi'i osod wrth wneud hynny.
  4. Dim ond wedyn gosod yn gynhyrchiol, gyda --workers=0, fel nad yw'r alwad yn cystadlu â'r gwasanaeth sy'n rhedeg am borth HTTP.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i sale_product_set_layout --stop-after-init

Mae meysydd a golygfeydd newydd yn y gronfa ddata ar ôl y gosod. Os yw'r gwasanaeth yn rhedeg mewn modd aml-broses, mae'r gweithwyr yn ail-lwytho'r gofrestrfa a newidiwyd trwy signal y gronfa ddata. Dim ond ar ôl ailgychwyn y gwasanaeth y daw newidiadau i ffeiliau Python y modiwl i rym.

Defnydd gam wrth gam

  1. Creu set: Gwerthu → Cynhyrchion → Setiau cynnyrch. Enwi'r set, dewis Mewnosod fel adran a Modd argraffu, nodi'r cynhyrchion gyda meintiau. Rhoi Cudd a Pris sefydlog i'r llinellau cywiro.
  2. Yn y dyfynbris: Clicio ar Ychwanegu set, dewis set a maint. Gellir newid enw'r adran a'r modd argraffu cyn mewnosod.
  3. Cuddio llinellau unigol: Yn y dyfynbris neu'r anfoneb, actifadu'r golofn Peidio ag argraffu.
  4. Gwirio: Agor y rhagolwg neu'r PDF. Mae cwsmeriaid yn gweld yr un cyflwyniad yn y porth.

Profion

Mae'r modiwl yn dod gyda chwe phrawf awtomataidd yr ydym yn eu rhedeg yn erbyn cronfa ddata brawf cyn i unrhyw beth fynd yn gynhyrchiol:

  • Mewnosod fel adran gan gynnwys modd argraffu ac is-adran
  • Mae llinell gudd ar goll o'r llinellau i'w hargraffu
  • Modd Un llinell (summary)
  • Mewnosod heb adran, yr ymddygiad gwreiddiol
  • Mae'r anfoneb yn cymryd y marcydd hide_in_report drosodd, mae'r llinell ar goll o _get_move_lines_to_report(), mae cyfanswm yr adran yn dal i'w chynnwys
  • Nid yw'r anfoneb yn y modd Cyfanswm yn unig yn dangos y llinell gudd yn llinellau'r adran, mae cyfanswm yr adran yn parhau'n gyflawn
odoo-bin -d <testdatenbank> -i sale_product_set_layout \
         --test-enable --test-tags=/sale_product_set_layout --stop-after-init

Mae'r cyfieithiad Almaeneg i'w gael yn i18n/de.po.

Cyfyngiadau a hysbysiad cyfreithiol

  • Cynllun yn unig. Nid yw'r modiwl yn newid sut mae Odoo yn cyfrifo prisiau, gostyngiadau na threthi. Mae'n newid dim ond yr hyn a argraffir ac a ddangosir yn y porth.
  • Mae llinellau cudd yn weladwy yn y backend. Mae'r marcydd yn effeithio ar yr argraffiad a'r porth, nid ar olwg sgrin y gweithwyr.
  • Gwirio manylion yr anfoneb. Mae llinellau cudd yn cyfrif yn y cyfanswm ond nid ydynt ar y ddogfen. A yw hyn yn gydnaws â'r gofynion ar anfonebau yn eich gwlad, er enghraifft y disgrifiad gorfodol o'r nwyddau a ddanfonwyd neu'r gwasanaethau a ddarparwyd, dylech ei egluro gyda'ch cynghorydd treth cyn ei ddefnyddio ar anfonebau. Ar ddyfynbrisiau mae cuddio'n llai problemus. Nid yw'r erthygl yn gyngor cyfreithiol.
  • Wedi'i brofi ar gyfer Odoo 19. Rydym wedi datblygu a phrofi'r modiwl ar gyfer Odoo 19.0 Community. Mae'n defnyddio opsiynau adran sy'n bodoli yn y ffurf hon yn Odoo 19. Nid ydym wedi'i wirio ar gyfer fersiynau eraill.

Cwestiynau cyffredin

Pam mae angen y modiwl arnaf, os yw Odoo 19 eisoes yn gallu gwneud adrannau?

Mae'r opsiynau adran i'w cael yn Odoo ei hun. Yr hyn oedd ar goll oedd y cysylltiad â'r set cynnyrch: Dylai set gael ei mewnosod yn awtomatig fel adran, gyda'r modd argraffu sydd wedi'i gadw yn y set. Heb y modiwl, rhaid creu a ffurfweddu'r llinell adran â llaw ar ôl pob mewnosodiad.

Sut mae “Cuddio prisiau” a “Cuddio cyfansoddiad” yn wahanol?

Mae “Cuddio prisiau” (collapse_prices) yn gadael y llinellau yn eu lle ond nid yw'n dangos symiau, dim ond y cyfanswm wrth yr adran. Mae “Cuddio cyfansoddiad” (collapse_composition) yn cuddio'r llinellau'n llwyr, ac mae'r cwsmer yn gweld dim ond yr adran gyda'r cyfanswm.

A yw llinell gudd yn cyfrif yng nghyfanswm yr anfoneb?

Ydy. Mae llinellau cudd yn aros yn y cyfanswm, y dreth a'r cofnod cyfrifyddu. Mae'r marcydd yn effeithio ar y cyflwyniad ar yr argraffiad ac ym mhorth y cwsmer yn unig.

A allaf newid y modd argraffu wrth fewnosod o hyd?

Gallwch. Daw'r modd fel rhagosodiad o'r set, ac yn y dewin gellir ei newid ar gyfer y mewnosodiad penodol hwnnw. Mae'r set ei hun yn aros heb ei newid.

Beth sy'n digwydd os byddaf yn diffodd Mewnosod fel adran?

Yna mae'r dewin yn ymddwyn fel yn y modiwl OCA sale_product_set: Mewnosodir llinellau'r set heb adran.

A yw'r modiwl yn gosod modiwlau eraill yn annisgwyl?

Nid yw'r modiwl ei hun yn gwneud hynny. Gydag ystorfeydd OCA, fodd bynnag, gall modiwlau auto_install ymddangos os rhoddir ystorfeydd cyfan yn yr addons_path. Felly cysylltwch dim ond y ddau fodiwl angenrheidiol (gweler yr adran Gosod).

A yw'r modiwl yn rhedeg gydag Odoo Enterprise?

Mae'r modiwl yn dibynnu ar fodiwlau Community yn unig (sale_management, account) a'r ddau fodiwl OCA. Rydym yn ei ddefnyddio ar Odoo 19 Community. Nid ydym wedi'i brofi ar Enterprise.

O dan ba drwydded mae'r modiwl?

O dan yr AGPL-3. Gallwch ei ddefnyddio, ei addasu a'i rannu, cyhyd â bod newidiadau'n aros o dan yr un drwydded. Croesewir gwallau ac awgrymiadau gwella fel Issue yn yr ystorfa GitHub .

Cymorth gan Biricon IT Services

Rydym yn gofalu am osodiadau Odoo ar gyfer busnesau bach a chanolig: o'r cyflwyniad, trwy addasiadau a mudo, hyd at y gweithrediad parhaus. Os hoffech addasu setiau cynnyrch, templedi dyfynbris neu adroddiadau yn Odoo 19 i'ch prosesau, neu os hoffech archwilio modiwl fel hwn a'i ddod yn ddiogel i'ch enghraifft gynhyrchiol, byddwn yn falch o'ch cefnogi. Mae mwy o'n datblygiadau ein hunain i'w cael yn ein blog, er enghraifft Uno anfonebau drafft a Cyfateb taliadau banc i anfonebau yn awtomatig.

Cysylltwch â ni nawr

Dyddiad: 2 Tachwedd 2026. Fersiwn y modiwl 19.0.1.0.0. Mae data enghreifftiol y delweddau wedi'u dewis yn rhydd, symiau net.