
»Hvor meget har vi egentlig stadig udestående hos Dem?« Dette spørgsmål dukker regelmæssigt op i enhver kundebase, som regel kort før kvartalsafslutningen, før revisionen af årsregnskabet, eller når kundens bogholderi forbereder betalinger. Den, der ikke selv besvarer det på forhånd, får det stillet pr. e-mail eller telefon, og så skal nogen eksportere en liste over åbne poster fra bogholderiet og sende den afsted. Med Odoo 19 Community sker det ikke af sig selv: Kundeportalen viser ganske vist de enkelte fakturaer, men ikke en liste over hele virksomhedens åbne poster, og slet ikke for en frit valgt dag.
Vi har skrevet modulet Åbne poster i kundeportalen (portal_open_items) til Odoo 19 til netop dette formål. Kunder med aktiveret adgang ser i portalen en liste over alle åbne fakturaer, kreditnotaer og endnu ikke tildelte betalinger for deres virksomhed, kan vælge en skæringsdato, downloade listen som PDF og kan med et blik se, hvordan det står til med deres betalingsmoral. Modulet er fri software under AGPL-3-licensen og ligger på GitHub:
github.com/Alex0176/odoo-portal-open-items
Vi installerede modulet den 5. november 2026 i vores produktionssystem. Indstillingen er der slået fra som standard og sættes kun efter aftale med enkelte kunder. Erfaringen fra driften er altså stadig kort; vi har testet med tretten automatiske tests og en testdatabase med eksempelkunder. Den, der overtager modulet, bør læse afsnittene om beregning af skæringsdatoen, om betalingsmoral og om begrænsningerne .
Indhold i dette indlæg
- Problemet: Liste over åbne poster på forespørgsel
- Løsningen i overblik
- Godkendelse pr. kontakt: indstillingen
- Listen i kundeportalen
- Åbne poster pr. skæringsdato
- PDF-eksport
- Betalingsmoral: vurdering med et blik
- Hvem må se hvad? Adgangsmodellen
- Teknisk implementering
- Tests
- Installation og opsætning
- Begrænsninger og bemærkninger
- Ofte stillede spørgsmål
- Support fra Biricon IT Services
Problemet: Liste over åbne poster på forespørgsel
En liste over åbne poster viser, hvilke af en kundes fakturaer der endnu ikke er betalt, hvad af det der er forfaldent, og hvor stor saldoen er. For leverandøren er den et middel til likviditetsplanlægning og rykkerprocedurer. For kunden er den grundlaget for at planlægge betalinger, afstemme fakturaer med eget bogholderi og afklare spørgsmål uden at åbne hver enkelt faktura. Typiske anledninger:
- Kvartals- og årsafslutning: Kundens bogholderi vil vide, hvilke forpligtelser der bestod pr. 31.12. Det er en skæringsdato i fortiden.
- Afstemning: Kunden mener at have betalt en faktura, vi ser den stadig som åben. En fælles liste med dato, forfaldsdato og beløb afklarer det hurtigere end en lang e-mailkæde.
- Betalingskørsler: Den, der forbereder betalinger ugentligt eller månedligt, har brug for alle en leverandørs åbne fakturaer med et enkelt blik, med de forfaldne øverst.
- Flere kontaktpersoner: I en virksomhed bestiller den ene, mens den anden betaler. De åbne poster tilhører virksomheden, ikke en enkelt person.
Hidtil har vi trukket disse lister manuelt fra bogholderiet og sendt dem pr. mail. Det koster tid og er til sidst et øjebliksbillede, der allerede er forældet dagen efter. Bedre er en liste, som kunden selv til enhver tid kan åbne i portalen, altid med den aktuelle status.
Løsningen i overblik
Modulet udvider Odoo-kundeportalen med en side Åbne poster og en flise på Min konto. Funktionsomfanget:
- Indstilling pr. kontakt: »Vis liste over åbne poster i portalen«. Kun når den er sat, ser portalbrugeren fliserne og siden. Som standard er den slået fra.
- Hele virksomheden: Listen indeholder de åbne poster for alle virksomhedens kontakter, ikke kun for den loggede bruger.
- Skæringsdato: Kunden vælger en dato og ser, hvad der var åbent den dag.
- PDF-eksport: Listen som PDF i Deres virksomheds layout, med brevhoved, saldo og summen af forfaldne poster.
- Betalingsmoral: andel af fakturaer betalt til tiden, med lille forsinkelse og sent, den længst åbne faktura og en vurdering god eller dårlig, i portalen og i PDF'en.
- Forfaldne poster er markeret med farve og viser antallet af dage efter forfaldsdatoen.
- Kreditnotaer og tilgodehavender står med negativt beløb i listen og reducerer saldoen.
- Link: Hver faktura i listen fører til fakturavisningen i portalen.
- Flersproget: Brugerfladen og PDF'en følger brugerens sprog, tysk medfølger som oversættelse.

Fliserne vises på startsiden Min konto ved siden af ordrer og fakturaer. Den, der ikke har indstillingen, ser den ikke.
Godkendelse pr. kontakt: indstillingen
En liste over åbne poster viser forretningsdata for en hel virksomhed. Derfor aktiverer modulet den ikke for alle portalbrugere, men kun der, hvor De udtrykkeligt ønsker det. På kontakten findes i formularen under Website afkrydsningsfeltet »Vis liste over åbne poster i portalen«. Det er synligt for brugere med faktureringsrettigheder (gruppen account.group_account_invoice) og gælder for netop denne ene kontakt.

Det passer til praksis: I en virksomhed skal ledelsen eller bogholderiet se listen, mens en medarbejder, der kun ser tickets, ikke skal. Indstillingen gælder for kontakten, men de viste poster tilhører hele virksomheden. Sæt derfor indstillingen hos den person, der skal have overblik over virksomheden.
Listen i kundeportalen
Et klik på fliserne åbner /my/open-items. Siden viser virksomhedens navn, valget af skæringsdato og tabellen med de åbne poster:

| Kolonne | Indhold |
|---|---|
| Bilag | Bilagsnummer på fakturaen eller kreditnotaen, med link til fakturavisningen i portalen; derunder referencen, hvis den findes |
| Dato | Fakturadato henholdsvis bogføringsdato |
| Forfalden den | Forfaldsdato; ved forfaldne poster derunder »n dage forfalden« i rødt |
| Beløb | Postens oprindelige beløb |
| Åben | Endnu åbent beløb (efter delbetalinger) |
Under tabellen står saldoen, altså summen af alle åbne beløb, og summen af forfaldne poster. Forfaldne linjer har farvet baggrund, så man straks ser dem, når man skimmer listen. Kreditnotaer og betalinger, der endnu ikke er tildelt en faktura, vises med negativt fortegn og reducerer saldoen; en bemærkning under tabellen forklarer det for kunden. Regner Deres virksomhed i flere valutaer, opgøres saldoen pr. valuta.
Åbne poster pr. skæringsdato
Over tabellen står »Åbne poster pr. skæringsdato«, ved siden af et datofelt og knappen Vis. Med en skæringsdato i fortiden viser listen, hvad der endnu ikke var betalt den dag. Det er netop den opgørelse, der er brug for ved afslutninger, revisioner og afstemninger: »Hvilke forpligtelser havde vi pr. 31.12. over for denne leverandør?«

Sådan beregnes skæringsdatoen
For hver post gælder: Åben pr. skæringsdato = fakturabeløb minus alle betalinger, der var afstemt til og med skæringsdatoen. En post hører med på listen, hvis den allerede var bogført på skæringsdatoen og stadig havde en restsaldo dér. En faktura fra 7. september på 1.250,50 €, som den 20. oktober blev delvist betalt med 500,00 € og den 5. november blev udlignet med resten, står altså på listen med 750,50 € ved skæringsdatoen 2. november og slet ikke længere ved skæringsdatoen 5. november.

Forfaldenheden vurderes ligeledes pr. skæringsdatoen: En post er forfalden, hvis dens forfaldsdato ligger før skæringsdatoen, og resten er positiv. Dagene efter forfald tælles til skæringsdatoen, ikke til i dag. En skæringsdato i fremtiden behandles som i dag, ligesom en tom eller ugyldig dato i adresselinjen. Listen kan altså ikke foregøgle en prognose.
Hvad »betalingsdato« betyder her
Afgørende er den dato, hvor faktura og betaling blev afstemt med hinanden i Odoo (den største af de to bogføringsdatoer), ikke fakturadatoen. Det er det sædvanlige tilfælde: Betalingen bogføres på dagen for betalingsindgangen og tildeles fakturaen. Den, der først tildeler betalinger flere dage senere, ser fakturaen som åben tilsvarende længere. Afsnittet begrænsningerne går nærmere ind på det.
PDF-eksport
Via Download PDF opretter modulet listen som PDF-fil for den valgte skæringsdato. Knappen Udskriv åbner den samme liste i browserens udskriftsdialog. PDF'en bruger dokumentlayoutet for Deres Odoo-virksomhed (logo, adresse, sidefod fra indstillingerne) og det europæiske papirformat:

- Overskrift med skæringsdato: »Åbne poster pr. skæringsdato 02.11.2026«, også selv om skæringsdatoen er i dag. Er der ingen åbne poster, står der »Der er ingen åbne poster.«
- Kundens adresse i adressefeltet i virksomhedslayoutet, så listen også udskrevet passer til sagen.
- Forfaldne poster trykt med fed, så de også ses ved sort-hvid-udskrift.
- Saldo og sum af forfaldne poster i slutningen af tabellen, ved flere valutaer pr. valuta.
- Filnavn med virksomhed og dato, for eksempel
Open_items_Muster_Handels_GmbH_2026-11-02.pdf.
Betalingsmoral: vurdering med et blik
Siden version 19.0.1.1.0 står der over tabellen en kort opgørelse af, hvor punktligt virksomheden betaler sine fakturaer. Den samme opgørelse vises i PDF'en. Kunden kan dermed selv se, hvor han står, og De behøver ikke længere at forklare ham det særskilt.

- Grøn: »47 % blev betalt inden for betalingsfristen.« Det er fakturaer, der blev betalt på forfaldsdagen eller tidligere.
- Orange: »29 % blev betalt i ugen efter betalingsfristens udløb.« Det er betalinger en til syv dage efter forfaldsdatoen.
- Rød: »24 % blev betalt senere, i gennemsnit efter 39 dage (25 dage efter betalingsfristens udløb).« Det første tal regnes fra fakturadatoen, tallet i parentesen fra forfaldsdatoen. Linjen vises kun, hvis der findes sådanne fakturaer.
- »Fakturaer er åbne i op til 60 dage.« Det er alderen på den ældste faktura, der på skæringsdatoen stadig er åben, regnet fra fakturadatoen.
Under den står vurderingen af betalingsmoralen: god eller dårlig, og nederst på siden, i PDF'en nederst på siden, henvisningen »Kunder med dårlig betalingsmoral omstilles til forudbetaling.« PDF'en viser de samme linjer i brevhovedlayoutet:

Hvad der tælles med
- Der vurderes fakturaer til kunden, som er bogført. Kreditnotaer og kladder tæller ikke. Ved ratebetaling tæller hver rate for sig.
- Periode: fakturaerne for de seneste tolv måneder og alle fakturaer, der stadig er åbne, også hvis de er ældre.
- Betalingsdagen er datoen for den seneste afstemning med en betaling, ligesom ved skæringsdatoen.
- Åbne fakturaer: Er en faktura forfalden på skæringsdatoen, tæller den, som om den var blevet betalt på skæringsdatoen, altså orange eller rød. En åben faktura, der endnu ikke er forfalden, vurderes ikke.
- Med en skæringsdato i fortiden gælder status på den dag: Betalinger efter skæringsdatoen tæller endnu ikke.
- Er der intet at vurdere, står der »Ingen fakturaer fra de seneste 12 måneder at vurdere.«, og der er ingen vurdering.
Hvornår er betalingsmoralen »god«?
Vurderingen er god, hvis mindst 70 % af fakturaerne er grønne eller orange (til tiden eller højst en uge for sent) og ingen åben faktura er forfalden i mere end 30 dage. Ellers er den dårlig. Tærsklerne (7 dage, 70 %, 30 dage, 12 måneder) står som konstanter øverst i models/res_partner.py og kan tilpasses dér.
Vigtigt: Modulet omstiller ikke nogen til forudbetaling. Henvisningen i sidefoden er en fast tekst, der viser kunder med dårlig vurdering, hvad det kan føre til. Om og hvornår De beslutter det, er Deres egen sag. Hvis De ikke bryder Dem om sætningen, ændrer De den i de to skabeloner (portalsiden og rapporten) eller i oversættelsen.
Hvem må se hvad? Adgangsmodellen
Åbne poster er følsomme data, derfor var adgangen os vigtigere end enhver ekstrafunktion. Modellen er bevidst enkel:

- Kun med sat indstilling. Uden hak ved kontakten er der ingen flise, og et kald af
/my/open-itemsomdirigerer til Min konto. - Altid egen virksomhed. Virksomheden bestemmes ud fra den loggede bruger, ikke ud fra en parameter i adressen. Der er ingen mulighed for at efterspørge en fremmed virksomhed via adresselinjen.
- Samme kontrol ved PDF. Odoo stiller som udgangspunkt PDF-rapporter til rådighed også via en generel adresse. Modulet kontrollerer derfor endnu en gang i selve rapporten: Kun brugere med bogholderirettighed eller portalbrugere med sat indstilling for egen virksomhed får en PDF, alle andre en adgangsfejl.
- Kun bogførte poster. Kladder og annullerede bilag vises aldrig.
- Kun egne regnskabskredse: Der tages kun hensyn til posteringer fra virksomheder, som brugeren har adgang til.
Teknisk implementering
Modulet afhænger kun af account og portal, altså af komponenter i Odoo Community. Det tilføjer ét enkelt felt til kontakten og består ellers af controller, rapportklasse og skabeloner.
| Komponent | Opgave |
|---|---|
Felt portal_open_items på res.partner | Boolesk indstilling »Vis liste over åbne poster i portalen«, ikke kopierbar, standard slået fra. |
_open_items_data() | Søger virksomhedens bogførte, endnu ikke afstemte tilgodehavendelinjer og beregner pr. linje rest, forfaldenhed og dage. Leverer linjer, summer pr. valuta og skæringsdatoen. |
_payment_morale() | Opgør fakturaerne for de seneste tolv måneder og alle åbne fakturaer pr. skæringsdatoen: andele til tiden, op til syv dage for sent og senere, gennemsnitlig varighed, længst åbne faktura og vurderingen god eller dårlig. |
_open_items_residual() | Resten af en linje pr. skæringsdato: Beløb minus alle delafstemninger med dato til og med skæringsdatoen, i fakturaens valuta. |
Controller /my/open-items | Viser siden, vurderer skæringsdatoen (tom, ugyldig eller i fremtiden = i dag) og omdirigerer uden indstilling til Min konto. |
Controller /my/open-items/pdf | Opretter PDF'en med samme skæringsdato og leverer den med filnavn. |
Rapport report_open_items | QWeb-skabelon i virksomhedslayoutet (web.external_layout) med egen kontrol af tilladelsen. |
| Portalskabeloner | Flise på Min konto, brødkrummesti, side med datoformular og tabel. |
| Kontaktformular | Indstilling i området Website, kun synlig for gruppen account.group_account_invoice. |
| Oversættelse | Tysk (de.po) og skabelon (.pot) medfølger. |
De åbne poster læses fra bogføringslinjerne, ikke fra fakturaerne. Det er vigtigt: Kun sådan dukker også kreditnotaer og endnu ikke tildelte betalinger op, og kun sådan kan status på en tidligere dag spores ud fra afstemningerne (account.partial.reconcile). Forespørgslen kører for hele virksomheden (commercial_partner_id) med forhøjede rettigheder, kontrollen af, om brugeren må se dem, står foran.
Tests
Modulet leveres med tretten automatiske tests, som hos os kører grønt igennem:
- Adgang kun med sat indstilling, ellers omdirigering til Min konto,
- listen indeholder hele virksomhedens poster, men aldrig en anden virksomheds,
- indstillingen gælder pr. kontakt, ikke for alle virksomhedens brugere,
- kreditnotaer står med negativt beløb i listen og reducerer saldoen,
- skæringsdato: en senere betalt faktura står på listen før, ikke efter,
- side med fremtidig og med ugyldig dato,
- PDF-adressen leverer en PDF-fil,
- rapport som HTML og adgangskontrol i rapporten,
- åbent beløb pr. skæringsdatoen efter delbetalinger før og efter skæringsdatoen,
- betalingsmoral: opdeling i til tiden, op til en uge for sent og senere, med gennemsnitsværdierne, også for en skæringsdato i fortiden,
- betalingsmoral med åbne fakturaer og vurderingen god eller dårlig,
- betalingsmoral uden fakturaer og aldrig med data fra en anden virksomhed,
- betalingsmoral på portalsiden og i PDF'en.
Derudover har vi gennemspillet siden i browseren i en testdatabase med eksempelkunder; billederne i dette indlæg stammer derfra. Alle navne, bilagsnumre og beløb heri er frit opfundet.
Installation og opsætning
git clone https://github.com/Alex0176/odoo-portal-open-items.git
ln -s /pfad/odoo-portal-open-items/portal_open_items /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i portal_open_items --stop-after-init
Afhængigheder er account og portal. Efter installationen skal Odoo-tjenesten genstartes, fordi modulet indeholder Python-kode. Den, der driver et produktionssystem, installerer først modulet på en kopi af databasen. Derefter:
- Åbn den kontakt, der skal se listen (person med portaladgang),
- sæt afkrydsningsfeltet Vis liste over åbne poster i portalen i formularen og gem,
- log ind i portalen som denne bruger eller kontrollér sammen med kunden: flise, liste, skæringsdato og PDF.
Kontrollér før godkendelsen Deres virksomheds afsender- og layoutindstillinger, for PDF'en overtager logo, adresse og sidefod fra dokumentlayoutet. Modulet sender selv ingen e-mails og opretter ingen notifikationer.
Begrænsninger og bemærkninger
- Status i dag for bogførte bilag. Skæringsdatoen regner på grundlag af posteringerne, som de står i systemet nu. Er en faktura efter skæringsdatoen blevet annulleret eller sat tilbage til kladde, viser listen den ikke. Et uforanderligt øjebliksbillede »som det dengang blev udskrevet« er det ikke.
- Betalinger tæller fra afstemningsdagen. Tildeles en betaling først flere dage efter, at en faktura er modtaget, står fakturaen indtil da som åben på listen. Den, der ønsker rene skæringsdatoopgørelser, bør tildele betalinger tæt på tidspunktet. En bankafstemning mod fakturaer er ikke indeholdt i Odoo Community; vi bruger til det vores Bank-Statement-Matcher-modul.
- Betalingsmoralen er kun så god som Deres afstemning. Der tælles, hvornår en betaling blev tildelt en faktura. Betalinger, der længe ikke er blevet afstemt, får en kunde til at se dårligere ud, end han er. Kontrollér vurderingen hos Deres kunder, før De udleder noget af den.
- Vurderingen er synlig for kunden. Den, der har indstillingen, ser også resultatet og henvisningen til forudbetaling. Modulet ændrer ikke noget ved betalingsbetingelserne.
- Kun tilgodehavender. Modulet viser, hvad kunden skylder Dem, ikke Deres forpligtelser over for kunden.
- Ingen rykkerniveauer og intet betalingslink i listen. Kunden kan fra listen åbne en faktura og betale dér, som Deres portal ellers tillader.
- PDF og flerprocesdrift. Til oprettelse af PDF-rapporter kalder Odoo internt sin egen webadresse. Kører Deres system med kun én arbejdsproces, kan det blokere. Det gælder for alle PDF-rapporter i portalen, ikke kun for dette modul. Kontrollér PDF-knappen én gang under rigtige forhold efter installationen.
- Kun testet med Odoo 19.0 Community. For andre versioner har vi ikke afprøvet det.
- Ingen erstatning for rykkerprocedurer og kontoudtog. Listen erstatter hverken et regnskabsmæssigt kontoudtog eller Deres rykkerprocesser, den gør blot status gennemsigtig.
Ofte stillede spørgsmål
Hvad er en liste over åbne poster?
En opstilling af alle fakturaer, der endnu ikke eller ikke fuldt ud er betalt, med fakturadato, forfaldsdato og åbent beløb. Den kaldes også »åbne fakturaer«, »kundekonto« eller »saldoliste«, selv om en saldoliste i snævrere forstand betyder saldiene på alle konti.
Hvorfor viser Odoo-portalen ikke allerede som standard en liste over åbne poster?
Portalen viser ordrer, fakturaer og betalinger enkeltvis, med status og filtre. En samlet liste for virksomheden med saldo og en skæringsdatoopgørelse hører ikke til Community-omfanget, så vidt vi har set. Dertil er modulet tænkt.
Ser alle portalbrugere i en virksomhed listen?
Nej. Kun kontakter med sat indstilling. Den viste liste omfatter dog hele virksomheden, ikke kun denne ene kontakts fakturaer.
Kan jeg vælge en skæringsdato i fortiden, for eksempel 31.12. i det foregående år?
Ja, en vilkårlig dato til og med i dag. Listen viser da de poster, der var bogført og endnu ikke betalt den dag. Bemærk henvisningerne om beregningen: Afgørende er dagen for betalingens afstemning.
Understøttes en skæringsdato i fremtiden?
Nej. Fremtidige datoer behandles som i dag, så listen ikke viser en status, der endnu ikke findes.
Vises kreditnotaer og forudbetalinger i listen?
Ja. Kreditnotaer og betalinger, der endnu ikke er tildelt en faktura, står med negativt beløb i listen og reducerer saldoen. En bemærkning under tabellen forklarer det for kunden.
Hvordan genkendes forfaldne poster?
En post er forfalden, hvis dens forfaldsdato ligger før skæringsdatoen, og der stadig er en positiv rest åben. Dagene efter forfald tælles til skæringsdatoen.
Findes PDF'en også på andre sprog?
Ja, brugerfladen og PDF'en følger brugerens sprog. Den tyske oversættelse medfølger; for flere sprog er en .po-fil eller oversættelse via Odoo-brugerfladen tilstrækkelig.
Kan en kunde se en anden virksomheds liste, hvis han ændrer adressen?
Nej. Virksomheden fremgår altid af den loggede bruger. Adressen indeholder kun skæringsdatoen. Også Odoos PDF-rapportadresse kontrolleres endnu en gang i selve rapporten.
Hvordan beregnes betalingsmoralen?
Ud fra de bogførte kundefakturaer for de seneste tolv måneder og alle åbne fakturaer. For hver faktura tæller det, hvor mange dage efter forfaldsdatoen den blev betalt: højst på forfaldsdagen (grøn), op til syv dage efter (orange) eller senere (rød). Vurderingen er god ved mindst 70 % grønne eller orange og ingen faktura, der er åben og mere end 30 dage forfalden. Enkeltheder findes i afsnittet betalingsmoral.
Omstiller modulet kunder med dårlig betalingsmoral til forudbetaling?
Nej. Det viser kun vurderingen og henvisningen. Betalingsbetingelser, forudbetaling og spærringer er fortsat Deres beslutning og Deres proces i Odoo.
Sender modulet e-mails eller rykkere?
Nej. Det stiller kun siden og PDF'en til rådighed. Det opretter ingen beskeder, notifikationer eller aktiviteter.
Kører modulet med Odoo Enterprise?
Det afhænger kun af account og portal, som findes i begge udgaver. Vi har kun testet det på Community-udgaven af Odoo 19.
Under hvilken licens står modulet?
Under AGPL-3. De må anvende, ændre og videregive det, hvis De overholder licensbetingelserne. Fejl og forbedringsforslag modtager vi gerne som issue i GitHub-repositoriet .
Support fra Biricon IT Services
Vi betjener Odoo-installationer for små og mellemstore virksomheder: fra indførelse over tilpasninger og migreringer til løbende drift. Hvis De vil stille åbne poster, fakturaer og tickets til rådighed for Deres kunder i portalen, udbygge bogholderiet i Odoo Community eller bringe et modul sikkert ind i Deres produktionsinstans, hjælper vi gerne. Flere egenudviklinger: Arkivér virksomhed inklusive portalbrugere, Firmenbuch og adressekontrol for østrigske kunder, Bilagsnumre af præfiks, år og tæller og Produktsæt i tilbuddet som afsnit.
Status: 6. november 2026. Modulversion 19.0.1.1.1. Ændringer siden den første version fra 5. november: betalingsmoral (19.0.1.1.0) og rettelse af det åbne beløb pr. skæringsdatoen efter delbetalinger (19.0.1.1.1). Alle navne, bilagsnumre og beløb i billederne er frit opfundet.