Files
ODOO4projects.com/de/odoo-community-upgrade.html
T
webmaster bd0881f882 cache-bust local assets; narrow the language facet to scores >= 3
Part 1 — asset versioning: every local <script src> and <link rel=stylesheet> on the
tracked pages now carries ?v=<sha256-of-the-file> (10 hex), computed at BUILD time from
the file's bytes by work/build-asset-versions.py — never hand-typed, and idempotent
(re-running with no file change rewrites nothing). This is what makes an edited
focus-rule.js / photo-upload.js a new URL instead of a stale cache hit.

Part 2 — language facet: a language now counts for the Language filter only when its
0-5 self-assessment is >= LANG_FACET_MIN (3 = 'works in it'). The constant sits beside
the 15-point rule in the page script and its mirror in build-directory.py. Nothing
stored changes; the card's languages chart still prints every language above 0, the
search box is unchanged, and the facet stays an exact membership test against the
card's value. A '1' language no longer offers the person under that language.
2026-11-03 21:26:58 +00:00

889 lines
51 KiB
HTML

<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Odoo Community Upgrade — für Sie übernommen | ODOO4projects</title>
<meta
name="description"
content="Ein Odoo Community Upgrade erklärt: Was sich ändert, was bricht, die konkreten Befehle und wie wir Ihre Datenbank auf unsere Server migrieren."
/>
<link rel="canonical" href="https://odoo4projects.com/de/odoo-community-upgrade.html" />
<link rel="alternate" hreflang="en-US" href="https://odoo4projects.com/odoo-community-upgrade.html" />
<link rel="alternate" hreflang="de" href="https://odoo4projects.com/de/odoo-community-upgrade.html" />
<link rel="alternate" hreflang="es" href="https://odoo4projects.com/es/odoo-community-upgrade.html" />
<link rel="alternate" hreflang="x-default" href="https://odoo4projects.com/odoo-community-upgrade.html" />
<meta property="og:title" content="Odoo Community Upgrade — für Sie übernommen" />
<meta
property="og:description"
content="Was sich bei einem Odoo Community Upgrade ändert, die konkreten Befehle für Entwickler und wie wir Ihre Datenbank auf unsere Server migrieren."
/>
<meta property="og:type" content="article" />
<meta property="og:url" content="https://odoo4projects.com/de/odoo-community-upgrade.html" />
<meta property="og:image" content="https://odoo4projects.com/images/hero/amsterdam.webp" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Odoo Community Upgrade — für Sie übernommen" />
<meta
name="twitter:description"
content="Was sich bei einem Odoo Community Upgrade ändert, die konkreten Befehle für Entwickler und wie wir Ihre Datenbank auf unsere Server migrieren."
/>
<meta name="twitter:image" content="https://odoo4projects.com/images/hero/amsterdam.webp" />
<link rel="icon" href="/images/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap"
media="print"
onload="this.media='all'"
/>
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap" /></noscript>
<link rel="stylesheet" href="/style.css?v=3332fbba93" />
<style>
/* ---- Odoo Community Upgrade page (page-scoped; additive) ---- */
.oc-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Top bar (page-scoped: the site has no global header) */
.cmp-topbar {
background: var(--midnight-2);
border-bottom: 1px solid var(--line-brass);
padding: 0.85rem 0;
}
.cmp-topbar .container {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
flex-wrap: wrap;
}
.cmp-brand {
font-family: Marcellus, Georgia, serif;
font-size: 1.15rem;
letter-spacing: 0.04em;
color: #fff;
}
.cmp-brand span {
color: var(--brass);
}
.cmp-topbar-links {
display: flex;
gap: 1.25rem;
font-size: 0.82rem;
margin-left: auto;
}
.cmp-topbar-links a {
color: rgba(255, 255, 255, 0.7);
}
.cmp-topbar-links a:hover {
color: var(--brass);
}
.cmp-topbar .lang-switch-slot {
display: flex;
align-items: center;
padding-left: 1rem;
border-left: 1px solid rgba(201, 162, 39, 0.45);
}
.cmp-topbar .lang-switch {
color: rgba(255, 255, 255, 0.7);
}
.cmp-topbar .lang-switch a:hover,
.cmp-topbar .lang-switch a:focus-visible {
color: var(--brass-bright);
}
.cmp-topbar .lang-switch a[aria-current="true"] {
color: var(--brass);
text-decoration: underline;
text-underline-offset: 3px;
}
/* Hero — the same midnight lounge as the rest of the site, with our own
Amsterdam photo behind the copy. */
.oc-hero {
min-height: 0;
padding: 3.5rem 0 3rem;
}
.oc-hero .container {
position: relative;
z-index: 1;
}
.oc-hero h1 span {
color: var(--brass);
}
.oc-hero .hero-sub {
max-width: 700px;
}
.oc-hero-img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
opacity: 0.25;
filter: brightness(1.15) saturate(1.1);
}
.oc-body {
max-width: 760px;
margin: 0 auto;
color: var(--ink-soft);
line-height: 1.75;
}
.section-dark .oc-body {
color: rgba(255, 255, 255, 0.78);
}
.oc-body p:last-child {
margin-bottom: 0;
}
.oc-body strong {
color: var(--ink);
}
.section-dark .oc-body strong {
color: #fff;
}
.oc-pull {
max-width: 760px;
margin: 2rem auto 0;
padding-top: 1.25rem;
border-top: 1px solid var(--line-brass);
font-family: Marcellus, Georgia, serif;
font-size: 1.05rem;
color: var(--ink);
text-align: center;
}
.section-dark .oc-pull {
color: var(--brass-bright);
}
/* Numbered process list */
.oc-steps {
max-width: 820px;
margin: 0 auto;
padding: 0;
list-style: none;
counter-reset: oc-step;
}
.oc-steps li {
position: relative;
counter-increment: oc-step;
padding: 0 0 1.4rem 3.2rem;
color: rgba(255, 255, 255, 0.78);
line-height: 1.7;
border-left: 1px solid rgba(201, 162, 39, 0.25);
margin-left: 1rem;
}
.oc-steps li::before {
content: counter(oc-step);
position: absolute;
left: -1.05rem;
top: -0.15rem;
width: 2.1rem;
height: 2.1rem;
display: flex;
align-items: center;
justify-content: center;
font-family: Marcellus, Georgia, serif;
font-size: 1rem;
color: var(--midnight);
background: var(--brass);
border-radius: 50%;
}
.oc-steps li strong {
color: #fff;
font-weight: 600;
}
.oc-steps li:last-child {
padding-bottom: 0;
}
/* Technical section: code cards + substitution notes */
.oc-code {
background: var(--midnight);
border: 1px solid var(--line-brass);
border-radius: var(--radius-lg);
padding: 1rem 1.15rem;
margin: 1.1rem 0 0;
overflow-x: auto;
box-shadow: var(--shadow-rest);
}
.section-dark .oc-code {
background: var(--midnight-2);
}
/* R1 moved the process list onto a light band and the technical section onto a
dark one, so their text colours have to follow the band, not their old parent. */
.section-light .oc-steps li {
color: var(--ink-soft);
}
.section-light .oc-steps li strong {
color: var(--ink);
}
.section-dark .oc-sub h3 {
color: var(--cream);
}
.section-dark .oc-sub > p,
.section-dark .oc-note {
color: rgba(255, 255, 255, 0.78);
}
.section-dark .oc-note strong {
color: #fff;
}
/* R3 puts the "See the plans" link inside the dark offer band. */
.section-dark .oc-body a {
color: var(--brass-bright);
}
.oc-code code {
display: block;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
font-size: 0.8rem;
line-height: 1.7;
color: #ece6da;
white-space: pre;
tab-size: 2;
}
.oc-note {
margin: 0.9rem 0 0;
padding: 0.15rem 0 0.15rem 1rem;
border-left: 2px solid var(--brass);
font-size: 0.9rem;
color: var(--ink-soft);
line-height: 1.7;
}
.oc-note p:last-child {
margin-bottom: 0;
}
.oc-sub {
margin-top: 2.25rem;
}
.oc-sub h3 {
color: var(--ink);
margin-bottom: 0.35rem;
}
.oc-sub > p {
color: var(--ink-soft);
line-height: 1.75;
}
/* FAQ */
.cmp-faq-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
max-width: 1000px;
margin: 0 auto;
}
.cmp-faq {
background: var(--ivory);
border: 1px solid var(--line);
border-radius: var(--radius-lg);
padding: 0.4rem 1.25rem;
box-shadow: var(--shadow-rest);
transition: box-shadow 0.25s;
}
.cmp-faq[open],
.cmp-faq:hover {
box-shadow: var(--shadow-hover);
}
.cmp-faq summary {
cursor: pointer;
list-style: none;
padding: 0.85rem 0;
display: flex;
justify-content: space-between;
align-items: center;
gap: 0.75rem;
font-family: Marcellus, Georgia, serif;
font-size: 0.98rem;
color: var(--midnight);
}
.cmp-faq summary::-webkit-details-marker {
display: none;
}
.cmp-faq summary::after {
content: "+";
font-family: Inter, sans-serif;
color: var(--brass);
font-size: 1.15rem;
line-height: 1;
flex-shrink: 0;
transition: transform 0.25s;
}
.cmp-faq[open] summary::after {
content: "\2212";
}
.cmp-faq summary:focus-visible {
outline: 2px solid var(--brass);
outline-offset: 3px;
border-radius: var(--radius);
}
.cmp-faq .cmp-a {
font-size: 0.87rem;
color: var(--ink-soft);
line-height: 1.7;
padding-bottom: 1rem;
}
.cmp-faq .cmp-a p:last-child {
margin-bottom: 0;
}
@media (max-width: 768px) {
.cmp-faq-grid {
grid-template-columns: 1fr;
}
}
/* Final CTA band */
.cmp-cta {
text-align: center;
}
.cmp-cta .oc-lead {
font-size: 1.1rem;
color: rgba(255, 255, 255, 0.72);
max-width: 700px;
margin: 0 auto 1.5rem;
line-height: 1.7;
}
.cmp-cta-actions {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
margin-top: 0.5rem;
}
.cmp-cta-actions .btn {
align-self: center;
}
/* Focus states on every CTA */
.btn:focus-visible,
.cmp-topbar-links a:focus-visible {
outline: 3px solid var(--brass-bright);
outline-offset: 2px;
border-radius: var(--radius);
}
.btn-brass:focus-visible {
outline-color: #fff;
}
@media (max-width: 768px) {
.oc-hero {
padding: 3rem 0 2.5rem;
}
.oc-steps li {
padding-left: 2.6rem;
}
}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebPage",
"@id": "https://odoo4projects.com/odoo-community-upgrade.html#webpage",
"url": "https://odoo4projects.com/odoo-community-upgrade.html",
"name": "Odoo Community Upgrade — für Sie übernommen",
"description": "Ein Odoo Community Upgrade erklärt: Was sich ändert, was bricht, die konkreten Befehle und wie wir Ihre Datenbank auf unsere Server migrieren.",
"inLanguage": "de",
"isPartOf": { "@id": "https://odoo4projects.com/#organization" }
},
{
"@type": "Service",
"name": "Migration der Odoo-Community-Datenbank auf das Hosting von ODOO4projects",
"provider": { "@id": "https://odoo4projects.com/#organization" },
"url": "https://odoo4projects.com/odoo-community-upgrade.html"
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Ist ein Upgrade dasselbe wie ein Update?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Nein. Ein Update bringt Ihnen die neueste Fassung der Software, die Sie bereits einsetzen. Ein Upgrade bringt Ihre Datenbank auf eine neue Hauptversion (18 auf 19 oder 19 auf 20) und wandelt die Daten selbst um. Es geht nur in eine Richtung: einen unterstützten Weg zurück gibt es nicht, und es ist keine Lizenzänderung, kein Editionswechsel und kein Hosting-Wechsel."
}
},
{
"@type": "Question",
"name": "Können wir direkt von Odoo 14 auf Odoo 20 upgraden?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Nein. Es geht immer nur eine Hauptversion auf einmal: 14 auf 15 auf 16 auf 17 auf 18 auf 19 auf 20. Eine Version zu überspringen ist kein unterstützter Weg. Unser eigener Migrationsservice dokumentiert Unterstützung für Datenbanken auf Odoo 17, 18 und 19, nur Hauptreleases, keine Patch-Releases; ältere Datenbanken brauchen zuerst eine Kompatibilitätsprüfung, die mit einem Support-Ticket beginnt."
}
},
{
"@type": "Question",
"name": "Was passiert mit meiner Historie: Rechnungen, Zahlungen, Anhänge?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Das ist die richtige Frage, und die ehrliche Antwort lautet: Es hängt vom Weg ab. Der OpenUpgrade-Weg — eine Versionsmigration auf Ihrem eigenen Server — nimmt die Datenbank mit und erhält die Historie und die Verknüpfungen zwischen den Datensätzen. Die OpenUpgrade-Dokumentation warnt, dass der andere Weg, Dokumente in ein neues System zu verschieben, nur einen Teil Ihrer Daten rettet und die Historie und die Verknüpfungen zwischen den Datensätzen verliert, zum Beispiel die Rechnungen je Kunde. Unser Service baut Ihnen eine neue Datenbank und bringt Ihre Daten hinein; unser Weg ist also der, nach dem Sie fragen sollten: Bitten Sie uns vor Ihrer Freigabe, genau aufzulisten, welche Datensätze in der neuen Datenbank sein werden und welche nicht. Wir möchten lieber, dass Sie sie stellen, als dass Sie sie annehmen."
}
},
{
"@type": "Question",
"name": "Funktionieren meine individuellen Module weiterhin?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Nicht von allein. Ein Modul, das für Ihr Geschäft geschrieben wurde, braucht seinen Code auf der Zielversion, und Umbenennungen, die sonst Daten kosten würden, brauchen eigene Migrationsskripte. Die Odoo-Dokumentation ist hier deutlich: Ein Upgrade ist blockiert, bis es eine Version Ihrer individuellen Module für die Zielversion gibt. Module, die mit Odoo ausgeliefert werden, und Module der Community-Vereinigung bringen ihre eigenen Migrationsskripte mit; Ihre nicht, und die muss jemand schreiben."
}
},
{
"@type": "Question",
"name": "Was kostet es, und wie lange dauert es?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Für den Upgrade-Service veröffentlichen wir weder Preis noch Dauer, und wir erfinden hier auch keine. Was wir veröffentlichen, ist der Anfang: Sie eröffnen ein Support-Ticket, wir prüfen Ihre Datenbank auf Kompatibilität und melden uns bei Ihnen. Wenn Sie es gegen die Eigenleistung abwägen, ist der ehrliche Vergleich nicht die Servermiete, sondern Ihre eigenen Stunden, die auf keiner Rechnung auftauchen."
}
},
{
"@type": "Question",
"name": "Brauche ich einen Entwickler?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Um die Befehle im technischen Abschnitt auszuführen, ja; oder jemanden, der sich im Terminal mit PostgreSQL auskennt. Damit wir es übernehmen, nein: Genau das ist der Sinn des Service. Sie senden die Datenbank, wir bauen das neue System auf unserer Infrastruktur, und Sie erhalten die Zugangsdaten."
}
},
{
"@type": "Question",
"name": "Kann ich das System mit der neuen Version ansehen, bevor es live geht?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Ja, und das sollten Sie. Wer die Arbeit macht, migriert zuerst eine Kopie; das ist die erste Regel des ganzen Prozesses, in der Odoo-Dokumentation wie im OpenUpgrade-Projekt. Und die migrierte Kopie ist das, was Sie prüfen, bevor mit dem System, auf dem Ihr Geschäft läuft, irgendetwas passiert. Unser Service folgt demselben Prinzip: Wir bauen das neue System auf unseren eigenen Servern, und Sie vergleichen es mit dem alten."
}
},
{
"@type": "Question",
"name": "Wir sind woanders gehostet. Können Sie uns trotzdem upgraden?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Ja, genau dafür ist unser Migrationsservice da. Sie eröffnen ein Support-Ticket, wir senden Ihnen ein sicheres Formular zum Hochladen Ihrer Datenbank, richten Ihnen einen neuen Server auf unserer Infrastruktur ein und stellen die Zugangsdaten bereit. Datenbanken auf Odoo 17, 18 und 19, nur Hauptreleases; ältere nach einer Kompatibilitätsprüfung."
}
}
]
}
]
}
</script>
<!-- Privacy-friendly analytics by Plausible -->
<script async src="https://plausible.office.odoo4projects.com/js/pa-NhA7Rf-79VopXFQXhSS4e.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
<script defer src="/static/lang.js?v=3ec49a7e62"></script>
</head>
<body>
<!-- Page-scoped top bar: the site has no global header, so the page carries its own way home. -->
<div class="cmp-topbar">
<div class="container">
<a class="cmp-brand" href="/de/">ODOO4<span>projects</span></a>
<nav class="cmp-topbar-links" aria-label="Seitenlinks">
<a href="/de/#pricing">Tarife &amp; Preise</a>
<a href="/de/support.html">Support</a>
</nav>
<div data-lang-switcher class="lang-switch-slot"></div>
</div>
</div>
<!-- Hero -->
<main>
<section class="hero oc-hero">
<div class="hero-bg">
<img
class="oc-hero-img"
src="/images/hero/amsterdam.webp"
alt="Amsterdam in der Abenddämmerung — eine der sechs Regionen, in denen unsere Server laufen"
width="1920"
height="768"
fetchpriority="high"
decoding="async"
/>
</div>
<div class="container">
<p class="hero-kicker">ODOO COMMUNITY UPGRADE</p>
<h1><span>Odoo Community Upgrade</span>: Was sich ändert und wie wir es für Sie übernehmen</h1>
<p class="hero-sub">
Der Sprung auf eine neue Odoo-Hauptversion ist kein Update: Er ist eine Umwandlung Ihrer Datenbank in nur eine Richtung, und nichts, was Sie falsch machen wollen. Hier steht, wie wir das für Sie übernehmen — ein neues System auf unseren eigenen Servern, Ihr bestehendes bleibt unberührt, während wir arbeiten — und darunter die konkreten Befehle, die ein Entwickler ausführen würde.
</p>
<div class="hero-actions">
<a href="/de/support.html#contact" class="btn btn-brass btn-lg">Ticket eröffnen: Sagen Sie uns, welche Version Sie nutzen</a>
<a href="/de/#pricing" class="btn btn-outline btn-lg">Tarife ansehen</a>
</div>
</div>
</section>
<!-- What an upgrade is -->
<section class="section-light">
<div class="container">
<p class="section-kicker">Der Unterschied, auf den es ankommt</p>
<h2 class="section-title">Was ein Odoo Community Upgrade wirklich ist</h2>
<div class="oc-body">
<p>
Odoo benutzt zwei Wörter, die gleich klingen und es nicht sind. Ein <strong>Update</strong> bringt Ihnen die neueste Fassung der Software, die Sie bereits einsetzen. Ein <strong>Upgrade</strong> bringt Ihre Datenbank auf eine neue Hauptversion (18 auf 19 oder 19 auf 20) und wandelt die Daten selbst um. Es geht nur in eine Richtung: einen unterstützten Weg zurück gibt es nicht, und es ist keine Lizenzänderung, kein Wechsel der Edition und kein Wechsel des Hosting-Anbieters.
</p>
<p>Drei Dinge sollten Sie wissen, bevor jemand Ihr System anfasst.</p>
<p>
<strong>Es geht immer nur eine Hauptversion auf einmal.</strong> Ein Sprung von 17 auf 20 sind drei Migrationen, nicht eine: 17 → 18, 18 → 19, 19 → 20. Eine Version zu überspringen ist im gesamten Odoo-Ökosystem kein unterstützter Weg.
</p>
<p>
<strong>Er wird an einer Kopie gemacht, nie an der laufenden Datenbank.</strong> Alle, die darüber geschrieben haben (die eigene Dokumentation von Odoo, das OpenUpgrade-Projekt der OCA und jeder Praktiker, den wir gesehen haben), beginnen mit einem Backup und arbeiten an einer Zweitkopie. Sie erfahren, was kaputtgegangen ist, an der Kopie und nicht vor Ihren Kunden.
</p>
<p>
<strong>Ihre eigenen Anpassungen sind der Teil, der Arbeit macht.</strong> Ein Modul, das für Ihr Geschäft gebaut wurde, zieht nicht von selbst mit: Sein Code muss auf die Zielversion gebracht werden, und Umbenennungen, die sonst Daten kosten würden, brauchen eigene Migrationsskripte. Die Odoo-Dokumentation sagt es unverblümt: Ein Upgrade ist blockiert, bis es Ihre individuellen Module für die Zielversion gibt.
</p>
<p>
Und dann der Weg selbst. Odoo verkauft einen Upgrade-Pfad für Enterprise; für Odoo Community ist die Open-Source-Antwort das OpenUpgrade-Projekt der OCA. Die OpenUpgrade-Dokumentation stellt fest, dass die Odoo Community Edition Migrationen zwischen Hauptversionen nicht unterstützt, und hält fest, dass OpenUpgrade die Lösung ist, die der Gründer von Odoo selbst dafür empfiehlt. Es ist ein echtes Projekt, gepflegt von der Community-Vereinigung, und es ist der Weg, den ein Entwickler auf einer Community-Datenbank nutzt.
</p>
</div>
</div>
</section>
<!-- Our way -->
<section class="section-dark" id="our-way">
<div class="container">
<p class="section-kicker">Der Weg von ODOO4projects</p>
<h2 class="section-title">Der Weg von ODOO4projects: eine neue Datenbank, und wir erledigen die Arbeit</h2>
<div class="oc-body">
<p>
Nichts davon müssen Sie selbst tun. Wenn Ihr Geschäft auf Odoo Community läuft und Sie die Version wechseln wollen, ohne jemanden einzustellen, der die Reihenfolge auf dieser Seite abarbeitet, machen wir stattdessen Folgendes.
</p>
<p>
Sie eröffnen ein Support-Ticket und sagen uns, was Sie haben. Wir sehen uns zuerst Ihre Datenbank an (ihre Version, ihre Anpassungen, ob wir sie überhaupt bewegen können) und sagen Ihnen, was wir finden. Dann senden wir Ihnen einen Link zu einem sicheren Formular, über das Sie Ihre Datenbank hochladen. Sobald wir sie haben, richten wir Ihnen einen neuen Server auf unserer eigenen Infrastruktur ein und übergeben Ihnen die Zugangsdaten. Ihr bestehendes System läuft die ganze Zeit weiter, weil wir es nicht anfassen: Wir arbeiten an der Datenbank, die Sie uns gesendet haben, und an dem neuen Server, den wir gebaut haben.
</p>
<p>
Wenn Sie lieber erst eine Zahl sehen möchten: Welchen Tarif Sie brauchen, hängt von den Modulen ab, die Sie nutzen, und die Tarife finden Sie hier — <a href="/de/#pricing">Tarife ansehen</a>. Das Upgrade selbst ist auf dieser Seite nicht bepreist; wir melden uns bei Ihnen, nachdem wir Ihre Datenbank angesehen haben.
</p>
<p>
Genau dieser letzte Punkt ist der ganze Grund für diesen Weg. Bei unserem Service migrieren Sie nicht abends nach Ladenschluss Ihre laufende Datenbank. Sie sehen sich ein zweites System an, in einer neuen Version, mit Ihren Daten darin, und können beide vergleichen, bevor Sie irgendetwas entscheiden.
</p>
<p>
Unser Migrationsservice dokumentiert Unterstützung für Datenbanken auf Odoo 17, 18 und 19, nur Hauptreleases; Patch-Releases wie 18.1 oder 17.2 werden nirgends in unserem Service unterstützt. Ist Ihre Datenbank älter als 17, helfen wir Ihnen trotzdem, sie auf ein unterstütztes Release zu bringen, aber erst nach einer Prüfung auf Kompatibilität. Neue Instanzen auf unseren Servern können auf Odoo 19 oder Odoo 20 angelegt werden. Wenn Sie gezielt auf 20 wollen, sagen Sie es im Ticket: Die Version, zu der Sie gehen, zählt mehr als die, auf der Sie sind.
</p>
<p>
Auf der KI-Seite ist hier ein Fall, den wir tatsächlich veröffentlicht haben. Rechnungen von Hand von einer Odoo-Instanz in eine andere zu kopieren ist langsam und leicht falsch, also haben wir es stattdessen mit einem Workflow gemacht: Datensätze aus einem Odoo-19-System in ein neues Odoo-20-System geschrieben, angetrieben von einem Automatisierungs-Workflow und einem MCP-Server, der auf das neue System zeigt. Drei Regeln machten es sicher (Rechnungsnummer und Datum ändern sich nie, der Kontakt wird nachgeschlagen statt geraten, das Produkt wird nachgeschlagen statt geraten) und eine harte Vorgabe: Fehlt ein Kontakt oder ein Produkt, bricht der Lauf laut ab, statt einen Fast-Doppelgänger anzulegen. Bevor wir es auf den Rest losließen, haben wir eine Rechnung von Anfang bis Ende geprüft: Nummer, Datum, Kontakt, Positionen.
</p>
<p>
Eines verwischen wir nicht, denn es ist der Unterschied zwischen uns und einem Verkäufer. Der MCP-Server, den wir in unserer eigenen Verwaltungskonsole mitliefern, macht Hosting-Operationen. Er startet einen Server neu, lädt ein Modul hoch, fügt eine Domain hinzu oder prüft sie, verwaltet Backups und liest eine Logdatei; das ist die veröffentlichte Liste, und sie ist eine echte Erleichterung, wenn Sie einen KI-Assistenten nutzen. Er ist keine Datenmigrations-Engine, und wir beschreiben ihn auch nicht als eine. Die Importarbeit oben wurde mit einem Automatisierungs-Workflow und einem MCP von Drittanbietern erledigt; die KI machte den mühsamen Teil und wurde von einem Menschen geprüft, genau wie es sein soll.
</p>
<p>
Und die ehrliche Grenze, in den Worten des Projekts, das sich damit am besten auskennt. Die OpenUpgrade-Dokumentation nennt die Export-und-Import-Alternative und benennt ihren Preis klar: Sie retten nur einen Teil Ihrer Daten, und insbesondere erhalten Sie nicht die Historie und die Verknüpfungen zwischen den Datensätzen, zum Beispiel die Rechnungen je Kunde. Das ist das Risiko jedes Weges, der Dokumente in ein neues System verschiebt, und deshalb stellen Sie uns, wenn Sie diesen Weg mit uns gehen, vor Ihrer Freigabe eine Frage: Welche Datensätze werden in der neuen Datenbank sein und welche nicht? Wir möchten lieber, dass Sie sie stellen, als dass Sie sie annehmen.
</p>
</div>
</div>
</section>
<!-- Process -->
<section class="section-light">
<div class="container">
<p class="section-kicker">Der dokumentierte Weg</p>
<h2 class="section-title">Der Upgrade-Prozess, Schritt für Schritt</h2>
<div class="oc-body">
<p>
Das ist die Reihenfolge, auf die sich die Odoo-Dokumentation, das OpenUpgrade-Projekt und die aufgezeichneten Workshops einig sind. Nichts davon ist unseres und nichts davon ist geheim: Es ist der dokumentierte Weg, in der Reihenfolge, in der er gegangen wird.
</p>
</div>
<ol class="oc-steps">
<li>
<strong>Sichern Sie die Datenbank und wissen Sie, wo der Filestore liegt.</strong> Vor allem anderen. Die Dokumentation des OpenUpgrade-Projekts sagt, dass Sie unbedingt ein Backup der laufenden Datenbank machen müssen, und jeder Praktiker macht das zuerst.
</li>
<li>
<strong>Arbeiten Sie an einer Kopie.</strong> Spielen Sie das Backup in eine Testdatenbank ein und migrieren Sie diese. Ihr laufendes System bleibt unberührt, bis die Kopie funktioniert.
</li>
<li>
<strong>Richten Sie zuerst die Zielversion ein.</strong> Installieren Sie das neuere Odoo und legen Sie den OpenUpgrade-Code für die Zielversion in dessen Add-ons-Pfad, neben die Module, die Sie bereits nutzen.
</li>
<li>
<strong>Portieren Sie Ihre individuellen Module.</strong> Bringen Sie ihren Code auf die neue Version, bevor die Migration läuft.
</li>
<li>
<strong>Führen Sie die Migration an der Kopie aus.</strong> Ein Modul nach dem anderen, in Abhängigkeitsreihenfolge; jedes führt erst sein Pre-Skript aus, dann lädt es, dann sein Post-Skript.
</li>
<li>
<strong>Rechnen Sie damit, sie mehr als einmal auszuführen.</strong> Das ist iterativ. Im aufgezeichneten Workshop ist die Umgebung (Repositories, Branches, die Modulliste) der Teil, der Zeit kostet; der Migrationslauf selbst ist schnell, sobald die Umgebung steht. Sie setzen zurück und laufen erneut, bis das Log sauber ist.
</li>
<li>
<strong>Schließen Sie mit einem einfachen Update ab.</strong> Das Update noch einmal ohne die Migrationsparameter auszuführen, hebt den Zustand „inkompatibel“ auf und lässt die Datenbank nutzbar zurück.
</li>
<li>
<strong>Testen Sie anhand der Daten, nicht anhand der Versionsnummer.</strong> Öffnen Sie die migrierte Kopie und prüfen Sie, was zählt: einen Kunden, ein Produkt, einen Auftrag, eine Rechnung, eine Zahlung. So überprüfen die Praktiker es am Bildschirm.
</li>
<li>
<strong>Räumen Sie danach auf.</strong> Veraltete Tabellen, Spalten und Views, die eine Migration zurücklässt, kosten Leistung; deshalb werden sie entfernt, wenn das System eine Zeit lang läuft und niemand ein Problem gemeldet hat.
</li>
<li>
<strong>Dann geht es in den Produktivbetrieb.</strong> Spielen Sie die migrierte Datenbank dort ein, wo sie hingehört, oder lassen Sie das Upgrade zu einem Zeitpunkt Ihrer Wahl auf der Produktivdatenbank laufen.
</li>
</ol>
<p class="oc-pull">
So sieht es ehrlich aus: Die Vorbereitung ist der lange Teil, die Migration selbst der kurze, und die Kopie ist das, was Sie kaputtmachen dürfen.
</p>
</div>
</section>
<!-- Technical section -->
<section class="section-dark" id="commands">
<div class="container">
<p class="section-kicker">Für Ihre Entwickler</p>
<h2 class="section-title">Für Ihre Entwickler: die konkreten Befehle</h2>
<div class="oc-body">
<p>
Wenn Sie Odoo Community selbst betreiben und das lieber im Haus erledigen möchten, statt es uns zu überlassen, sind das die Befehle. Sie sind aus der jeweiligen Dokumentation übernommen, und bei jedem steht, was Sie einsetzen müssen und wovor die Quelle warnt. Nichts davon haben wir gegen Ihre Datenbank ausgeführt, und kein von uns veröffentlichter Befehl läuft auf unseren eigenen Servern: Unser Service beginnt mit einem Support-Ticket, nicht mit einem Terminal.
</p>
</div>
<div class="oc-sub">
<h3>Odoos Upgrade-Plattform</h3>
<p>
Odoo dokumentiert eine Upgrade-Plattform, die für On-Premise-Installationen über die Kommandozeile funktioniert. Die Odoo-Dokumentation stellt fest, dass die Migrationsskripte, die sie ausführt, nicht Open Source sind und zu Enterprise gehören; die Plattform selbst aber bringt eine selbst gehostete Datenbank auf die neue Version.
</p>
<pre class="oc-code"><code># upgraded TEST database
python &lt;(curl -s https://upgrade.odoo.com/upgrade) test -d &lt;your db name&gt; -t &lt;target version&gt;
# production upgrade
python &lt;(curl -s https://upgrade.odoo.com/upgrade) production -d &lt;your db name&gt; -t &lt;target version&gt;
# general help
python &lt;(curl -s https://upgrade.odoo.com/upgrade) --help</code></pre>
<div class="oc-note">
<p>
<strong>Ersetzen:</strong> <code>&lt;your db name&gt;</code> ist die Datenbank auf der Maschine, auf der Sie den Befehl ausführen, und <code>&lt;target version&gt;</code> ist die Version, zu der Sie wechseln — 17.0, 18.0 oder 19.0, entsprechend dem Versionsauswahlfeld auf unserer eigenen Tarifseite.
</p>
<p>
Was die Odoo-Dokumentation neben diesen drei Zeilen verlangt, weil davon abhängt, ob sie funktionieren: Das Skript braucht die üblichen Linux-Befehle auf der Maschine; der Systembenutzer, der es ausführt, braucht Zugriff auf Ihre PostgreSQL-Datenbank (die übliche PostgreSQL-Client-Umgebung, etwa <code>.pgpass</code>); und die Maschine muss die Upgrade-Plattform auf TCP 443 und auf einem Port im Bereich 32768-60999 erreichen, ein Firewall kann also eine Ausnahme brauchen. Die Kopie, die Sie hochladen, wird ohne Filestore übermittelt, deshalb muss der Produktiv-Filestore in die aktualisierte Datenbank zusammengeführt werden, bevor Sie sie testen. Der Download enthält <code>dump.sql</code> und einen Filestore-Ordner, und nur wer das Upgrade angefordert hat, kann das Ergebnis herunterladen.
</p>
</div>
</div>
<div class="oc-sub">
<h3>Der Community-Weg: OCA OpenUpgrade</h3>
<pre class="oc-code"><code># 1. OpenUpgrade for the TARGET version (the branch is the target major version)
git clone --depth 1 --branch &lt;TARGET&gt;.0 https://github.com/OCA/OpenUpgrade.git
# 2. helper library — the line the OpenUpgrade docs use
pip install "git+https://github.com/OCA/openupgradelib.git@master#egg=openupgradelib"
# 3. put the clone on the add-ons path of the &lt;TARGET&gt; Odoo config
# addons_path = &lt;your own addons&gt;,&lt;/abs/path&gt;/OpenUpgrade
# 4. migrate the copy of the database
&lt;odoo-bin&gt; -c /etc/odoo/&lt;TARGET&gt;.conf \
-d &lt;DB&gt; \
--upgrade-path=/abs/path/OpenUpgrade/openupgrade_scripts/scripts \
-u all --stop-after-init \
--load=base,web,openupgrade_framework
# 5. finish: a plain update, no migration parameters
&lt;odoo-bin&gt; -c /etc/odoo/&lt;TARGET&gt;.conf -d &lt;DB&gt; -u all --stop-after-init</code></pre>
<div class="oc-note">
<p>
<strong>Vier Dinge ersetzen:</strong> <code>&lt;TARGET&gt;</code> ist die Ziel-Hauptversion (17, 18 oder 19 — nicht die Version, von der Sie kommen); <code>&lt;DB&gt;</code> ist die Kopie, die Sie migrieren, nie die laufende Datenbank; <code>&lt;odoo-bin&gt;</code> ist die Binärdatei der Zielversion, und wie sie heißt, hängt davon ab, wie Sie Odoo installiert haben (<code>odoo-bin</code>, <code>odoo</code> oder das Docker-Äquivalent); und beide absoluten Pfade sind Ihre eigenen — der Add-ons-Pfad und der Ort des OpenUpgrade-Klons.
</p>
<p>
Zwei Details aus der eigenen Dokumentation des Projekts, die man mitnehmen sollte: Der <code>openupgrade_framework</code>-Teil dieses Befehls ist eine Reihe von Patches, die unter anderem verhindern, dass Odoo die Spalten und Tabellen von Feldern löscht, die es nicht mehr gibt — einer der Wege, auf denen eine Migration Daten verliert. Und die Umgebungsvariable <code>OPENUPGRADE_USE_DEMO=yes</code> behält die Demodaten in der migrierten Datenbank, wenn Sie sie wollen.
</p>
</div>
</div>
<div class="oc-sub">
<h3>Ihre individuellen Module</h3>
<pre class="oc-code"><code># Odoo's own code-rewrite command (it runs the scripts in odoo/upgrade_code)
&lt;odoo-bin&gt; upgrade_code --from &lt;FROM&gt; --to &lt;TO&gt; --dry-run</code></pre>
<div class="oc-note">
<p>
<strong>Ersetzen Sie</strong> <code>&lt;FROM&gt;</code> und <code>&lt;TO&gt;</code> durch die beiden Hauptversionen (zum Beispiel 18 und 19). Führen Sie es zuerst mit <code>--dry-run</code> aus. Die eigene Befehlsreferenz von Odoo nennt diesen Befehl ein „Best-Effort“-Werkzeug und warnt, dass er „keine Silberkugeln“ ist: Er schreibt um, was er kann, und hinterlässt Ihnen eine Liste dessen, was ein Mensch noch ändern muss. Das Gegenstück der OpenUpgrade-Community für Modulcode ist <code>odoo-module-migrator</code>, das INFO für automatische Änderungen, WARNING für prüfenswerte Dinge und ERROR für Dinge protokolliert, die gar nicht funktionieren. Beide Werkzeuge berichten; keines denkt.
</p>
</div>
</div>
<div class="oc-sub">
<h3>Backups und der Filestore</h3>
<pre class="oc-code"><code># stop the service while you work (packaged install; the Odoo docs show this pattern)
sudo service odoo&lt;TARGET&gt; stop
# database dump (PostgreSQL's own tool)
sudo -u postgres pg_dump -Fc -d &lt;DB&gt; -f /path/backup/&lt;DB&gt;.dump
# restore a dump into a fresh database
sudo -u postgres createdb -O &lt;DB_OWNER&gt; &lt;DB_NEW&gt;
sudo -u postgres pg_restore -d &lt;DB_NEW&gt; /path/backup/&lt;DB&gt;.dump
# the filestore lives under Odoo's data directory:
# default on Unix: $XDG_DATA_HOME or ~/.local/share/Odoo or /var/lib/Odoo
# filestore path: &lt;data_dir&gt;/filestore/&lt;DB&gt;</code></pre>
<div class="oc-note">
<p>
<strong>Ersetzen Sie</strong> die Datenbanknamen, den Eigentümer, den Backup-Pfad und das Filestore-Datenverzeichnis durch Ihre eigenen; der Filestore enthält die Anhänge und Dokumente, auf die Ihre Datensätze zeigen, und eine Datenbank, die ohne ihn wiederhergestellt wird, ist eine Datenbank mit fehlenden Dateien. Das sind die dokumentierten Verfahren von PostgreSQL und Odoo, nicht unsere: Wir veröffentlichen keinen Befehl, der auf unseren eigenen Servern läuft, weil unser Service mit einem Ticket beginnt.
</p>
</div>
</div>
</div>
</section>
<!-- Self-hosting cost -->
<section class="section-light">
<div class="container">
<p class="section-kicker">Eigenleistung</p>
<h2 class="section-title">Was Eigenleistung wirklich kostet</h2>
<div class="oc-body">
<p>
Ein gemieteter Server ist billig. Das ist die kleinste Zahl in dieser Entscheidung. Odoo Community selbst ist kostenlos: Eine Lizenz pro Benutzer werden Sie auf diesem Weg nirgends finden, weil Community keine hat.
</p>
<p>
Was in dieser Zahl nicht steckt, ist der Mensch. Ein Upgrade auf Ihrem eigenen Server heißt: Jemand installiert die neue Version, bringt den Migrationscode auf den richtigen Pfad, portiert die Module, die Ihr Geschäft tatsächlich nutzt, lässt die Migration laufen, bis das Log nicht mehr meckert, prüft, ob Kunden, Aufträge und Rechnungen noch da sind, räumt auf, was die Migration hinterlassen hat, und macht das Ganze dann zu einem passenden Zeitpunkt noch einmal auf der Produktivdatenbank. Die Odoo-Dokumentation sagt, das Update erledigt am besten die Person, die Odoo ursprünglich eingerichtet hat. Auf einem gemieteten Server sind das Sie oder jemand, den Sie pro Stunde bezahlen, und keine dieser Zeilen steht auf der Rechnung. Das ist die Hälfte der Rechnung, die niemand ausdruckt, und die Hälfte, die in Ihren Abenden landet.
</p>
<p>
Wir werden Ihre Stunden nicht beziffern, weil wir sie nicht gemessen haben und eine Marketingzahl schlechter wäre als keine. Was wir sagen, ist der Teil, bei dem es nicht wirklich ums Geld geht: Während Sie diese Arbeit machen, machen Sie nicht die Arbeit, für die man Sie bezahlt, und wenn die Migration falsch ist, erfahren Sie es von einem Kunden.
</p>
</div>
</div>
</section>
<!-- FAQ -->
<section class="section-dark" id="faq">
<div class="container">
<p class="section-kicker">Klare Antworten</p>
<h2 class="section-title">Fragen zum Upgrade</h2>
<div class="cmp-faq-grid">
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Ist ein Upgrade dasselbe wie ein Update?</summary>
<div class="cmp-a">
<p>
Nein. Ein Update bringt Ihnen die neueste Fassung der Software, die Sie bereits einsetzen. Ein Upgrade bringt Ihre Datenbank auf eine neue Hauptversion (18 auf 19 oder 19 auf 20) und wandelt die Daten selbst um. Es geht nur in eine Richtung: einen unterstützten Weg zurück gibt es nicht, und es ist keine Lizenzänderung, kein Editionswechsel und kein Hosting-Wechsel.
</p>
</div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Können wir direkt von Odoo 14 auf Odoo 20 upgraden?</summary>
<div class="cmp-a">
<p>
Nein. Es geht immer nur eine Hauptversion auf einmal: 14 auf 15 auf 16 auf 17 auf 18 auf 19 auf 20. Eine Version zu überspringen ist kein unterstützter Weg. Unser eigener Migrationsservice dokumentiert Unterstützung für Datenbanken auf Odoo 17, 18 und 19, nur Hauptreleases, keine Patch-Releases; ältere Datenbanken brauchen zuerst eine Kompatibilitätsprüfung, die mit einem Support-Ticket beginnt.
</p>
</div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Was passiert mit meiner Historie: Rechnungen, Zahlungen, Anhänge?</summary>
<div class="cmp-a">
<p>
Das ist die richtige Frage, und die ehrliche Antwort lautet: Es hängt vom Weg ab. Der OpenUpgrade-Weg — eine Versionsmigration auf Ihrem eigenen Server — nimmt die Datenbank mit und erhält die Historie und die Verknüpfungen zwischen den Datensätzen. Die OpenUpgrade-Dokumentation warnt, dass der andere Weg, Dokumente in ein neues System zu verschieben, nur einen Teil Ihrer Daten rettet und die Historie und die Verknüpfungen zwischen den Datensätzen verliert, zum Beispiel die Rechnungen je Kunde. Unser Service baut Ihnen eine neue Datenbank und bringt Ihre Daten hinein; unser Weg ist also der, nach dem Sie fragen sollten: Bitten Sie uns vor Ihrer Freigabe, genau aufzulisten, welche Datensätze in der neuen Datenbank sein werden und welche nicht. Wir möchten lieber, dass Sie sie stellen, als dass Sie sie annehmen.
</p>
</div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Funktionieren meine individuellen Module weiterhin?</summary>
<div class="cmp-a">
<p>
Nicht von allein. Ein Modul, das für Ihr Geschäft geschrieben wurde, braucht seinen Code auf der Zielversion, und Umbenennungen, die sonst Daten kosten würden, brauchen eigene Migrationsskripte. Die Odoo-Dokumentation ist hier deutlich: Ein Upgrade ist blockiert, bis es eine Version Ihrer individuellen Module für die Zielversion gibt. Module, die mit Odoo ausgeliefert werden, und Module der Community-Vereinigung bringen ihre eigenen Migrationsskripte mit; Ihre nicht, und die muss jemand schreiben.
</p>
</div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Was kostet es, und wie lange dauert es?</summary>
<div class="cmp-a">
<p>
Für den Upgrade-Service veröffentlichen wir weder Preis noch Dauer, und wir erfinden hier auch keine. Was wir veröffentlichen, ist der Anfang: Sie eröffnen ein Support-Ticket, wir prüfen Ihre Datenbank auf Kompatibilität und melden uns bei Ihnen. Wenn Sie es gegen die Eigenleistung abwägen, ist der ehrliche Vergleich nicht die Servermiete, sondern Ihre eigenen Stunden, die auf keiner Rechnung auftauchen.
</p>
</div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Brauche ich einen Entwickler?</summary>
<div class="cmp-a">
<p>
Um die Befehle im technischen Abschnitt auszuführen, ja; oder jemanden, der sich im Terminal mit PostgreSQL auskennt. Damit wir es übernehmen, nein: Genau das ist der Sinn des Service. Sie senden die Datenbank, wir bauen das neue System auf unserer Infrastruktur, und Sie erhalten die Zugangsdaten.
</p>
</div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Kann ich das System mit der neuen Version ansehen, bevor es live geht?</summary>
<div class="cmp-a">
<p>
Ja, und das sollten Sie. Wer die Arbeit macht, migriert zuerst eine Kopie; das ist die erste Regel des ganzen Prozesses, in der Odoo-Dokumentation wie im OpenUpgrade-Projekt. Und die migrierte Kopie ist das, was Sie prüfen, bevor mit dem System, auf dem Ihr Geschäft läuft, irgendetwas passiert. Unser Service folgt demselben Prinzip: Wir bauen das neue System auf unseren eigenen Servern, und Sie vergleichen es mit dem alten.
</p>
</div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Wir sind woanders gehostet. Können Sie uns trotzdem upgraden?</summary>
<div class="cmp-a">
<p>
Ja, genau dafür ist unser Migrationsservice da. Sie eröffnen ein Support-Ticket, wir senden Ihnen ein sicheres Formular zum Hochladen Ihrer Datenbank, richten Ihnen einen neuen Server auf unserer Infrastruktur ein und stellen die Zugangsdaten bereit. Datenbanken auf Odoo 17, 18 und 19, nur Hauptreleases; ältere nach einer Kompatibilitätsprüfung.
</p>
</div>
</details>
</div>
</div>
</section>
<!-- Final CTA band -->
<section class="section-dark cmp-cta" id="start">
<div class="container">
<p class="oc-lead">
Sie eröffnen ein Support-Ticket, wir prüfen Ihre Datenbank auf Kompatibilität und melden uns bei Ihnen.
</p>
<div class="cmp-cta-actions">
<a href="/de/support.html#contact" class="btn btn-brass btn-lg">Ticket eröffnen: Sagen Sie uns, welche Version Sie nutzen</a>
<a href="/de/#pricing" class="btn btn-outline btn-lg">Tarife ansehen</a>
</div>
</div>
</section>
<!-- Footer (copied from index.html; icon-font glyphs replaced with inline SVG so the page
carries no external icon dependency) -->
</main>
<footer class="footer">
<div class="container">
<div class="fgrid">
<div>
<h4>Nützliche Links</h4>
<ul>
<li><a href="/de/odoo-erp-automation-bootcamp/">ODOO Bootcamp</a></li>
<li><a href="/de/odoo-hosting-2027.html">ODOO Hosting in 2027</a></li>
<li><a href="/de/support.html">Support</a></li>
<li><a href="/legal.html">Rechtliches</a></li>
</ul>
</div>
<div>
<h4>Partner</h4>
<div class="partner-list">
<a href="https://oc-guy.com" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OC Guy</a>
<a href="https://oca-py.org" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OCA Paraguay</a>
<a href="https://OD8N.com" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OD8N</a>
</div>
</div>
<div class="fcol-desc">
<h4>Über uns</h4>
<p>Wir bauen clevere, skalierbare Geschäftslösungen: die <strong>Stabilität</strong> von Odoo ERP trifft auf die <strong>Kraft</strong> von KI-Agenten und N8N-Automatisierungen.</p>
<p>Von schlanken Vertriebsprozessen bis zum globalen Rollout: Unser <strong>schlanker, umweltfreundlicher</strong> Ansatz senkt Kosten, steigert die Effizienz und lässt Unternehmen ohne Grenzen wachsen.</p>
</div>
<div>
<h4>Folgen Sie uns</h4>
<div class="social">
<a href="https://www.linkedin.com/company/odoo4projects/" target="_blank" aria-label="LinkedIn"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9h4v12H3zM9 9h3.8v1.7h.05c.53-.95 1.83-1.95 3.76-1.95 4.02 0 4.76 2.5 4.76 5.75V21h-4v-5.5c0-1.31-.02-3-1.9-3-1.9 0-2.19 1.42-2.19 2.9V21H9z" /></svg></a>
<a href="https://www.youtube.com/@ODOO4projects" target="_blank" aria-label="YouTube"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M23 12s0-3.2-.41-4.73a2.5 2.5 0 0 0-1.76-1.77C19.3 5.1 12 5.1 12 5.1s-7.3 0-8.83.4A2.5 2.5 0 0 0 1.4 7.27C1 8.8 1 12 1 12s0 3.2.41 4.73a2.5 2.5 0 0 0 1.76 1.77c1.53.4 8.83.4 8.83.4s7.3 0 8.83-.4a2.5 2.5 0 0 0 1.76-1.77C23 15.2 23 12 23 12zM9.75 15.02V8.98L15.5 12z" /></svg></a>
</div>
<form class="footer-contact-form" id="footerContactForm" action="mailto:support@odoo4projects.com" method="post" enctype="text/plain">
<label class="oc-sr-only" for="footerContactEmail">Ihre E-Mail-Adresse</label>
<input type="email" id="footerContactEmail" name="email" placeholder="Ihre E-Mail-Adresse" required />
<div class="footer-textarea-wrap">
<label class="oc-sr-only" for="footerContactText">Ihre Nachricht</label>
<textarea id="footerContactText" name="message" placeholder="Ihre Nachricht …" required></textarea>
<button type="submit" class="footer-send-btn" aria-label="Nachricht senden"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M2 21l21-9L2 3v7l15 2-15 2z" /></svg></button>
</div>
<div class="footer-form-status" id="footerFormStatus" role="status"></div>
</form>
</div>
</div>
<div class="fcopy">Copyright &copy; ODOO4projects LLC</div>
</div>
</footer>
</body>
</html>