Integrationer / ERP / Odoo

Guide til Odoo-integration med SkyPlanner APS til detailplanlægning

Denne guide viser Odoo-partnere, udviklere og IT-ansvarlige, hvordan I forbinder Odoo Manufacturing med SkyPlanner APS. Læs om forretningsgrundlaget, og hvad knappen Plan i Odoo allerede kan, på siden om detailplanlægning med Odoo og i Har Odoo produktionsplanlægning? Her handler produktionsplanlægning om at lægge en plan, der respekterer den faktiske kapacitet hos maskiner og medarbejdere.

Gantt-tidslinje i SkyPlanner APS med opgaver fordelt på arbejdsstationer og en ordreliste nedenunder.

Odoo er fortsat det autoritative system for produkter, styklister, operationer, fremstillingsordrer, lager og omkostningsberegning. SkyPlanner bruger disse data til at lægge planen med sin Arcturus-motor. Integrationen med Odoo går begge veje:

  • Fremstillingsordrer, produktionsordrer, operationer på styklister, arbejdscentre og indkøbsordrer hentes ind.
  • Planlagte start- og sluttidspunkter samt arbejdscentre skrives tilbage til mrp.workorder.
  • Fremdrift og registreret tid sendes tilbage som Odoo Time Logs.
  • SkyPlanner-webhooks sender planændringer, så snart de sker.

Under opstarten konfigurerer SkyPlanner-teamet integrationen via Odoos eksterne standard-API og tilpasser den til jeres version, hosting og tilpasninger. Teamet yder også support efter idriftsættelsen. Denne guide er til partnere og udviklere, der vil deltage eller selv bygge videre på SkyPlanners dokumenterede REST API (API-reference). Håndtering af produkter, materialer og indkøbsordrer er beskrevet i den offentlige SkyPlanner-dokumentation.

Trin nul: Tjek Odoo-abonnement og hosting

Find først ud af, hvilken Odoo-løsning kunden bruger. Det afgør fremgangsmåden.

OpsætningEksternt APISpecialtilpassede modulerPraktisk fremgangsmåde
Odoo Online, One App Free eller StandardNejNejCSV/XLSX, eller skift til Custom-abonnementet
Odoo Online, Custom-abonnementJaNejEksternt API
Odoo.sh (Custom-abonnement)JaJaEksternt API, eventuelt et modul
Lokal installation, Community eller EnterpriseJaJaEksternt API, eventuelt et modul

Odoos API-dokumentation angiver, at ekstern API-adgang er “only available on Custom Odoo pricing plans” (kun tilgængelig med Odoos Custom-abonnementer), ikke med One App Free eller Standard. På prissiden beskrives Standard som hostet på Odoo Online “without custom modules” (uden specialtilpassede moduler). Afklar det i den indledende afdækning, ikke halvvejs gennem udviklingen.

Integrationsmuligheder i Odoo

MulighedVersionerAutentificeringRolle i en integration til detailplanlægning
External JSON-2 API: POST /json/2/<model>/<method>Nyt i 19.0API-nøgle i Authorization: bearer <key>, valgfri X-Odoo-Database-headerStandard til nye integrationer: search_read til læsning, write til tilbageskrivning af datoer
Ekstern XML-RPC / JSON-RPC: /xmlrpc/2, /jsonrpc, tjenesterne common, objectTil og med 19.0; planlagt fjernetcommon.authenticate med brugernavn og adgangskode eller API-nøgle, derefter execute_kwPåkrævet for kunder på 16.0 til 18.0
Brugerdefinerede controllere i et modulAllePr. route, f.eks. auth='bearer'Samlede datapakker: en MO med tilhørende produktionsordrer i ét kald
Automatiseringsregler: “Send Webhook Notification” (send webhook-notifikation)Dokumenteret fra 17.0Udgående POST til en URLSender data ved oprettelse eller redigering af MO’er og produktionsordrer
Import af poster (CSV, XLSX) og eksportAlleBrugersessionTestdata og engangsindlæsning af stamdata

Tag højde for fjernelsen allerede nu. Odoo har planlagt at fjerne XML-RPC og JSON-RPC i Odoo 22 (efteråret 2028) og Odoo Online 21.1 (vinteren 2027). Byg på JSON-2 til 19.0, og saml RPC-kommunikationen til ældre databaser bag én adapter, så en opgradering kun kræver én ændring. Brugerdefinerede controllere med @route(type='jsonrpc') berøres ikke af fjernelsen.

Autentificering

Opret en særskilt integrationsbruger med læseadgang til Manufacturing og Inventory og skriveadgang til produktionsordrer. Generér brugerens nøgle under Preferences > Account Security > New API Key. I 19.0 gælder nøgler højst tre måneder, så middlewaren skal kunne rotere nøgler og advare ved autentificeringsfejl. Ellers stopper en udløbet nøgle synkroniseringen, uden at nogen opdager det. På SkyPlanner-siden bruger REST API’et JWT, så middlewaren opbevarer begge sæt legitimationsoplysninger.

Hvert JSON-2-kald kører i sin egen SQL-transaktion. En skrivning fordelt over flere kald er derfor ikke atomisk. Skriv én produktionsordre ad gangen, og log hvert resultat.

Hændelser

Odoo sender ændringer via automatiseringsregler. En regel på mrp.production eller mrp.workorder med udløseren Ved oprettelse og redigering og handlingen “Send Webhook Notification” (send webhook-notifikation) sender en POST med de valgte felter til en URL. Opret reglen i Studio eller via formularen Automatiseringsregler i udviklertilstand. Kombinér den med planlagte search_read-forespørgsler på write_date for at opfange importer og alt, hvad reglen har overset. I den modsatte retning sender SkyPlanner-webhooks ændringer i planen og status, så snart de sker.

Feltnavne varierer mellem versionerne. I 19.0 viser hver database sine modeller, felter og metoder på /doc; i ældre versioner skal du kalde fields_get. Brug det som grundlag for feltmappingen, ikke hukommelsen.

Datamapping: Fra Odoo til SkyPlanner

Odoo-modelSkyPlanner-objektRetningHyppighed
product.product / product.template (default_code, uom_id, qty_available)Produkt eller materialeOdoo → SkyPlannerFørste indlæsning, derefter dagligt eller ved ændringer
mrp.bom (product_tmpl_id, product_qty, produce_delay), mrp.bom.line (product_id, product_qty, operation_id), mrp.bom.byproductProdukt med flere niveauer, materialebehov pr. procestrinOdoo → SkyPlannerVed ændringer
mrp.routing.workcenter (fanen Operationer: workcenter_id, sequence, time_mode, time_cycle_manual, blocked_by_operation_ids)Procestrin med rækkefølge og køretidOdoo → SkyPlannerVed ændringer
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids)Arbejdsstation, effektivitet, klargøring og afslutning, alternative arbejdsstationerOdoo → SkyPlanner, derefter vedligeholdelse i SkyPlannerFørste indlæsning
mrp.workcenter.capacity (capacity)Antal emner pr. cyklus, produktspecifikke tider til klargøring og afslutningOdoo → SkyPlannerFørste indlæsning
resource.calendar, resource.calendar.attendance, resource.calendar.leavesSkift og fraværOdoo → SkyPlannerFørste indlæsning, fravær ved ændringer
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids)Ordre med leveringsfrist og prioritetOdoo → SkyPlannerWebhook ved bekræftelse samt periodiske forespørgsler
mrp.workorder (operation_id, workcenter_id, duration_expected, state)Opgave på en arbejdsstationOdoo → SkyPlannerWebhook samt periodiske forespørgsler
stock.quant, stock.move (komponentbevægelser)Lagerbeholdning og materialebehov til materialestyret detailplanlægningOdoo → SkyPlannerMed faste intervaller, f.eks. hvert 15. til 60. minut
purchase.order (partner_id, state), purchase.order.line (product_id, product_qty, date_planned, qty_received)Indkøbsordrer og indgående materialer, tilgængelige på den forventede leveringsdatoOdoo → SkyPlannerWebhook ved bekræftelse eller redigering af indkøbsordren samt de samme periodiske forespørgsler
Planlagt start, slut og arbejdsstationmrp.workorder.date_start, date_finished, workcenter_idSkyPlanner → OdooVed ændringer i planen via SkyPlanner-webhook
Mobile Confirmations, tidsregistreringermrp.workcenter.productivity (Time Logs: workcenter_id, workorder_id, date_start, date_end, loss_id)SkyPlanner → OdooVed hver tilbagemelding
Produceret antal, afsluttet operationqty_producing på produktionsordren, derefter button_finish; button_mark_done på MO’enSkyPlanner → Odoo, eller registrering i Odoo Shop FloorVed hver tilbagemelding

Integrationsmønstre

Stamdata først.

Indlæs arbejdscentre og kalendere først, derefter produkter, styklister og operationer, som refererer til arbejdscentrene. I prøveperioden på 30 dage indlæses de samme lister som CSV-eksporter. Odoos værktøj til import og eksport fungerer i alle listevisninger.

Synkronisering af ordrer.

Indlæs MO’er med status confirmed og progress sammen med deres produktionsordrer. Udelad MO’er i kladde, eller behandl dem som foreløbigt behov. Delmontager med egen stykliste kan komme ind som separate underordnede MO’er, og Odoo planlægger hver MO for sig. Map dem til underprodukter i SkyPlanner, så delmontagerne er færdige, før den overordnede ordre starter.

Tilbageskrivning af planen.

Når planen ændres, udløser en SkyPlanner-webhook integrationen, som kalder ORM-metoden write på hver berørt mrp.workorder. I Odoo 19.0 er det én JSON-2-anmodning pr. produktionsordre:

“ POST /json/2/mrp.workorder/write Authorization: bearer <api-key> {"ids": [4711], "vals": {"date_start": "2026-11-03 06:00:00", "date_finished": "2026-11-03 09:30:00", "workcenter_id": 7}} “

JSON-2 modtager alle metodeargumenter ved navn samt ids og context, så write(vals) bliver til nøglen vals. I 16.0 til 18.0 udføres samme kald som execute_kw(db, uid, key, 'mrp.workorder', 'write', [[4711], vals]) via XML-RPC eller JSON-RPC, og i 16.0 hedder nøglerne date_planned_start og date_planned_finished. Datoer og klokkeslæt sendes i UTC. Følg disse få regler for at skrive data korrekt:

  • Send begge datoer i samme kald.
  • Tilføj kun workcenter_id, når motoren har valgt en alternativ maskine.
  • Skriv kun til planlægningsfelter, aldrig til mængder eller styklister.

Når datoerne skrives, flyttes Odoos egen reservation af arbejdscentret, så Odoos planlægningsvisninger viser SkyPlanners plan.

Fra produktionsgulvet tilbage til Odoo. Operatørerne registrerer arbejdet i SkyPlanner Mobile Confirmations. For hver tilbagemelding kalder integrationen create på mrp.workcenter.productivity (JSON-2: POST /json/2/mrp.workcenter.productivity/create med vals_list). Den udfylder workorder_id, workcenter_id, date_start, date_end og et loss_id af typen Productive, hvorefter arbejdstid og omkostninger registreres i Odoo.

Når en operation er færdig, angiver integrationen det producerede antal og kalder button_finish på produktionsordren. Efter den sidste produktionsordre er MO’en klar til button_mark_done. Hver tilbagemelding registreres én gang, og dens post-id i Odoo gemmes sammen med tidsregistreringen i SkyPlanner. Derfor opretter en gentaget webhook aldrig en ekstra Time Log.

På fabrikker, der bruger Enterprise Shop Floor-appen, går data den modsatte vej: SkyPlanner læser produktionsordrens status og qty_produced, og Autopilot omplanlægger automatisk, når produktionen ændrer sig.

Dataejerskab. Skriv reglerne ned før idriftsættelsen:

DataEjer
Produkter, styklister, operationer, mængder, MO-statusOdoo
Produktionsordrernes rækkefølge, start- og sluttidspunkter, valg af arbejdscenterSkyPlanner
Matrix for omstillingstider, krav til værktøj og operatører, alternative ressourcerSkyPlanner
Arbejdscentrenes kalendere og Time OffÉt system, som vælges under afklaringen
Time Logs, lager og omkostningsberegningOdoo, med tilbagemeldinger fra SkyPlanner

Planlæggerne skal holde op med at bruge Plan og Unplan i Odoo på de MO’er, som SkyPlanner planlægger. Ellers reserverer Odoo sine egne tidsrum oven i SkyPlanners datoer.

Typiske trin i projektet

Implementeringen er normalt afsluttet inden for få uger efter opstarten. Inden da kører den gratis prøveperiode på 30 dage med CSV-eksporter af jeres egne Odoo-data. Selve projektet omfatter:

  1. Mapping af stamdata: Odoo-modeller og -felter pr. version (tjek /doc eller fields_get), måleenheder samt hvilket system der vedligeholder kalendere og Time Off.
  2. Oprydning: arbejdscentrenes kalendere, Setup Time og Cleanup Time samt indstillingen Fixed i stedet for Computed for varigheden af styklisternes operationer.
  3. Første indlæsning: produkter, arbejdscentre med kalendere samt styklister og deres operationer.
  4. Synkronisering af ordrer og indkøbsordrer: bekræftede og igangværende MO’er med deres produktionsordrer samt purchase.order-linjer med forventede ankomstdatoer.
  5. Tilbageskrivning af planen: datoer og arbejdscentre på mrp.workorder med rotation af API-nøgler på Odoo-siden.
  6. Tilbagemeldinger fra produktionsgulvet: Time Logs og færdigmeldinger af produktionsordrer sendes tilbage til Odoo.
  7. Test parallelt med den nuværende plan, derefter idriftsættelse.

Faldgruber i Odoo

  • Datofelter har fået nye navne. Til og med 16.0 indeholdt date_planned_start og date_planned_finished de planlagte tidspunkter, mens date_start/date_finished indeholdt de faktiske. Fra 17.0 er date_start og date_finished de planlagte tidspunkter. En mapping kopieret fra et 16.0-projekt læser faktiske tidspunkter som planlagte i 17+ uden at give en fejl.
  • Produktionsordrernes tidspunkter er reservationer. I 19.0 beregnes date_start og date_finished på mrp.workorder ud fra en resource.calendar.leaves-post (leave_id) i arbejdscentrets kalender. Når tidspunkterne skrives på produktionsordren, opdateres reservationen. Skriv aldrig direkte i fraværstabellen.
  • Påbegyndte produktionsordrer blokerer Unplan. Odoo afviser at fjerne planlægningen af en MO, når “Some work orders have already started” (nogle produktionsordrer er allerede startet). Spring produktionsordrer med status progress eller done over ved tilbageskrivning, og flyt kun dem, der endnu ikke er startet.
  • Varighederne ændrer sig. Operationer med indstillingen Computed får deres varighed fra de seneste produktionsordrer (som standard 10), skaleret med Time Efficiency. Sæt dem til Fixed i prøveperioden, eller acceptér, at inputdata ændrer sig. Operationer ligger på den enkelte stykliste uden fælles stamdata for ruter, så hver stykliste skal ryddes op særskilt.
  • Fejl i kalendere. Hvert arbejdscenter skal have en arbejdstidskalender. Odoos egen planlægger søger op til 700 dage frem og stopper derefter med “Impossible to plan the workorder” (produktionsordren kan ikke planlægges). Ret kalenderne før den første indlæsning.
  • Måleenheder. mrp.bom.line har sit eget product_uom_id, som kan afvige fra produktets lagerenhed. Omregn, før du kontrollerer materialetilgængeligheden.

Hvem konfigurerer Odoo-integrationen?

Hver fabrik bruger Odoo på sin egen måde med egne operationer på styklister, kalendere for arbejdscentre, alternative arbejdscentre og specialtilpassede moduler. SkyPlanner-teamets ekspertise er at få datamappingen til at passe til netop den opsætning.

  1. SkyPlanner-teamet konfigurerer integrationen til jeres Odoo-opsætning under opstarten og yder support efter idriftsættelsen. Den bruger SkyPlanners REST API og webhooks samt Odoos JSON-2- eller RPC-API. Det er standardforløbet.
  2. Jeres Odoo-partner kan deltage. Partneren kender jeres opsætning og specialtilpassede moduler og kan bygge videre på det samme dokumenterede REST API. Det læser og skriver ordrer, produkter, materialer, procestrin og tidsregistreringer med JWT-autentificering og Swagger/OpenAPI-dokumentation.
  3. Jeres egne udviklere kan gøre det samme, typisk med et lille stykke middleware ved siden af Odoo eller et modul på Odoo.sh eller i en lokal installation. En API-nøgle er nok til at komme i gang (integrationsvejledning), og SkyPlanner-teamet hjælper efter behov.

Den samme model er i drift med andre ERP-systemer. Hos Laboratory & Allied byggede det interne IT-team stort set selv integrationen til SAP Business One med hjælp fra SkyPlanner. UTU bruger NetSuite og kører SkyPlanner ved siden af sit ERP-system.

Derfor betaler integrationen sig

Det er tilbageskrivningen, der får integrationen til at skabe værdi i hverdagen. Når den kører:

  • Odoos produktionsordrer får konkrete tidspunkter. Arcturus AI-motoren fastlægger rækkefølgen for alle åbne MO’er på sekunder. De beregnede tidspunkter og valgte arbejdsstationer skrives til mrp.workorder, hvor de vises i Odoos planlægningsvisninger.
  • Ingen omplanlægger manuelt. Autopilot omplanlægger automatisk, når produktionen ændrer sig, og webhooken sender de nye datoer til Odoo.
  • Produktionsgulvet melder tilbage. Operatørerne registrerer arbejdet på telefon eller tablet med Mobile Confirmations, Production Timer og Quick Log Mode, og Time Logs sendes til Odoo til lagerføring og omkostningsberegning. Detailplanlægning og udførelse foregår i ét værktøj, både med Community og Enterprise.
  • Planen tager højde for begrænsninger, som Odoo ikke håndterer. En omstillingstidsmatrix angiver rækkefølgeafhængige omstillinger for hvert produktpar. Værktøjer er ressourcer med begrænset kapacitet, som deles mellem maskiner, og en opgave kan kræve flere operatører på én gang. Motoren vælger alternative maskiner eller medarbejdere, når det primære valg ikke er tilgængeligt. De tidspunkter, der skrives tilbage til mrp.workorder, tager højde for alle disse begrænsninger.
  • Materialernes ankomst styrer planen. Lagerbeholdningen og åbne indkøbsordrer i Odoo danner grundlag for materialestyret planlægning. Bestilte komponenter regnes som tilgængelige på indkøbsordrens leveringsdato, og lageret opdateres, når indkøbsordren markeres som Delivered. Hver opgave kontrolleres mod det, der er på lager, og det, der er på vej.

I kan vurdere planen, før integrationsarbejdet begynder. Start den gratis prøveperiode på 30 dage med CSV-eksporter, og se jeres egne Odoo-produktionsordrer i Gantt-diagrammet med op til 20 arbejdsstationer og uden kreditkort. Prisen er fra 199 € om måneden med 5 arbejdsstationer inkluderet. Der faktureres månedligt, og I kan opsige når som helst. I får på forhånd et tilbud på integrationen ud fra jeres processer og behov sammen med jeres abonnement, så I kender den samlede pris, før I går i gang. Se funktioner og kunder, eller book en demo.

Produktionsvirksomheders anmeldelser af SkyPlanner

Kalle Kalliomäki, forsyningskædespecialist hos UTU, i eltavleproduktionen i Ulvila

2 hsparet hver uge

“SkyPlanner har flyttet vores produktionsplanlægning fra Excel-ark til produktionsoptimering i realtid.”

Kalle Kalliomäki, forsyningskædespecialist
UTU · Eltavler og koblingsanlæg

Produktionsplanlægningen sparer 2 timers arbejdstid hver uge, og en ny opgavekø når ud til produktionslinjen på få sekunder.

Læs anmeldelsen fra UTU

Operatører i renrumsdragter ved en flaskepåfyldningslinje på Laboratory & Allieds lægemiddelfabrik i Nairobi

+90%produktionseffektivitet

“Effektiviteten i produktionen er steget med 90%.”

Abdul Rucyinga, IT-chef
Laboratory & Allied · Lægemiddelproduktion

Produktionseffektiviteten er steget med 90%, og det tager under 30 minutter at lægge en optimeret plan for tre måneder på tværs af alle arbejdsstationer.

Læs anmeldelsen fra Laboratory & Allied

Hannu Ryynänen, administrerende direktør for Mamec, i virksomhedens produktionshal i Lohja

1.000-vis afproduktionsordrer planlægges automatisk

“Vi har styr på produktionen på en anden måde, og vores forståelse af kapaciteten er på et helt andet niveau.”

Hannu Ryynänen, administrerende direktør
Mamec · Industrielle blandere, pumper og højteknologisk kontraktproduktion

Tusindvis af produktionsordrer planlægges automatisk, og hele organisationen har overblik over produktionen i realtid.

Læs anmeldelsen fra Mamec

Luftfoto af Piristeels fabrik for tagsikkerhedsudstyr i Kauhava

99,2%leveringssikkerhed

“SkyPlanner har givet os det overblik, vi skal bruge til at identificere flaskehalse, og gjort produktionsstyringen mere overskuelig.”

Toni Tuori, produktionschef
Piristeel · Tagsikkerhed og regnvandssystemer

Leveringssikkerheden nåede op på 99,2% i år, og detailplanlægningen sparer op til fire timers arbejdstid om dagen.

Læs anmeldelsen fra Piristeel

Ofte stillede spørgsmål

Virker integrationen på Odoo Online?

Ja, med Custom-abonnementet via den eksterne API. One App Free og Standard har ikke adgang til den eksterne API, og Standard kører uden tilpassede moduler. Disse abonnementer er derfor begrænset til import og eksport af CSV/XLSX.

Skal vi bruge JSON-2 eller XML-RPC?

Brug JSON-2 på Odoo 19.0 og nyere. XML-RPC og JSON-RPC er stadig nødvendige til 16.0 til 18.0, men efter planen fjernes de i Odoo 22.

Hvordan overføres planen tilbage til Odoo?

Via ORM-metoden write på hver mrp.workorder: POST /json/2/mrp.workorder/write med ids og vals i 19.0, eller execute_kw med write via XML-RPC eller JSON-RPC i 16.0 til 18.0. Værdierne er date_start, date_finished (date_planned_start og date_planned_finished i 16.0) og workcenter_id, hvis arbejdscentret er ændret. Odoo flytter samtidig reservationen på arbejdscentret, så Odoos planlægningsvisninger viser SkyPlanners tidspunkter.

Hvordan overføres operatørernes tilbagemeldinger til Odoo?

Som Time Logs: Integrationen opretter mrp.workcenter.productivity-poster på produktionsordren med start, slut og tabsårsagen Productive og kalder derefter button_finish, når operationen er færdig. Hver tilbagemelding registreres én gang, så gentagne forsøg ikke giver dobbelt tidsregistrering.

Hvem vedligeholder integrationen efter idriftsættelsen?

SkyPlanner-teamet konfigurerer integrationen under opstarten og yder support efter idriftsættelsen, også når ændringer i jeres Odoo-opsætning kræver tilpasninger. Hvis jeres partner eller udviklere bygger integrationen, tager de udgangspunkt i den dokumenterede REST API og SkyPlanner-dokumentationen, og teamet hjælper efter behov.

Hvad sker der med produktionsordrer, der allerede er startet?

Lad dem være uændrede, når data skrives tilbage. Odoo tillader ikke, at planlægningen af en MO ophæves, når en produktionsordre er i gang eller afsluttet. SkyPlanner læser deres status og fremdrift og tager hensyn til dem, når det resterende arbejde planlægges.

Hvor lang tid tager Odoo-integrationen?

Implementeringen er normalt afsluttet inden for få uger efter opstart. Brug først den 30-dages prøveperiode med CSV-eksporter, så planen er afprøvet med jeres egne Odoo-data, inden arbejdet med API’en begynder.