SAP Business One to Odoo: how much history should move?

Back
Kevin Riedl

10 min read · 5 Nov 2026
Last reviewed

Next
Made on your device, with no Instagram connection. We copy the post link for Instagram’s Link sticker.

“Take all the history” sounds safer than deciding what to leave behind. It still leaves a difficult question unanswered: should a paid invoice become an active accounting record, a reference for customer service, or a document someone can retrieve from an archive?

Move the records needed to continue approved work in Odoo, coordinate open items with one agreed opening position, and retain the remaining history through a tested retrieval route. Choose each dataset by the job it must support. A number of years is a filter, not a complete migration scope.

Research checked: 5 November 2026. The source boundaries below use official Odoo 20 documentation, SAP Business One’s public archive guide and a public SAP knowledge-base preview. The register and amounts are synthetic examples. We did not access a business database or execute a SAP-to-Odoo migration.

Which records need an operational future in Odoo?

Start with the first task someone must complete after the switch. Identify the records and relationships that task depends on, then define their permitted target effect. An active customer, an unfinished order and a settled invoice can share a source history while needing different destinations and different acceptance evidence.

Proposed destinations for a Business One migration scope
PurposeExamplePermitted effectProof to request
Continue workActive customer and remaining order linesSupport the approved next operational step.A user can complete that step without repeating completed work.
Establish the opening positionOpen invoices and approved opening balancesRepresent the agreed financial position once.Finance accepts the reconciliation and target treatment.
Consult selected historyA service record needed for an active serial numberProvide context without creating an unapproved movement or obligation.The right user retrieves the linked evidence.
Retain older evidenceClosed invoices and their attachmentsAllow authorized historical consultation.A retrieval exercise returns the required original and context.

Consider an open order with some lines already delivered. The scope needs the remaining work and enough context to explain it. Importing the original order total without deciding how completed lines are represented may give the user the wrong next action. The scope owner should approve the continuation behavior before an engineer designs the import.

Keep source identity available across these destinations. A proposed reference can include the source company, record type and source identifier. Do not assume a visible document number is unique across every company database. Decide where the mapping from source record to target record or archive location will be maintained.

Record the actual SAP Business One version and database platform, target Odoo version, installed apps and relevant custom fields. A procedure for another SAP product or a different Odoo configuration needs separate verification. This article does not establish a universal converter or a compatible connector release.

How do open items relate to the opening balance?

Open items explain the outstanding obligations, while the opening position states the financial starting point. Their target representations must work together. Ask finance to approve the treatment and reconciliation before loading either dataset, including how duplicates or changes after the cutoff will be detected. A successful import alone is insufficient evidence.

Odoo 20's opening-entry guidance warns that importing open documents and opening balances incorrectly can duplicate values.

Use this fictional control-total example. It describes the exposure that the scope must preserve; it does not prescribe journal entries, clearing accounts, tax handling or a posting sequence.

Synthetic receivables scope at one agreed cutoff
Source itemRemaining exposureScope requirement
INV-AEUR 15,000Preserve customer identity, source reference and the remaining amount.
INV-BEUR 8,000Preserve the same evidence for this separate item.
Combined open itemsEUR 23,000Reconcile to the finance-approved opening representation.
Duplicate representation to rejectEUR 23,000 + EUR 23,000 = EUR 46,000Do not accept the same exposure contributing twice.

The two invoices may be needed for subsequent collection work. That does not authorize adding another independent EUR 23,000 contribution without the approved accounting treatment. Equally, an aggregate amount alone may leave the user unable to identify which customer document remains unpaid. Both the financial total and the intended user task need evidence.

SAP’s public opening-balance KBA preview also notes that existing postings do not by themselves prevent further opening balances; a locked posting period is a restriction. This is a SAP behavior boundary, not proof of an Odoo safeguard.

Keep the cutoff explicit. If INV-A changes after the approved extract, its earlier amount no longer proves the final scope. Record the correction and ask finance which evidence must be refreshed. Do not silently alter a spreadsheet while keeping the previous approval attached.

Which closed history earns a place in Odoo?

Bring closed history into Odoo when a named workflow needs it there and the target representation can satisfy that need without an unintended business effect. Require an owner to describe the retrieval or reporting job. Keep the scope selective, and test the behavior of the chosen representation before extending the period.

A support team may need a service intervention linked to an active serial number. A sales team may need to consult an old agreement before renewing it. These examples justify questions about specific fields and relationships. They do not automatically justify recreating every underlying financial transaction.

Specify whether the history will be an attachment, a dedicated reference record, a reporting dataset or a link to an external archive. Those are design alternatives to evaluate, not interchangeable native import capabilities promised by this guide. Each has different consequences for search, permissions and maintenance.

For a paid invoice, a useful acceptance question is: can the authorized user retrieve the required original and settlement context without creating a new amount due? For a completed delivery, ask whether historical consultation leaves current stock and fulfillment work unchanged. Inspect the target effect in the actual configuration.

If the only requirement is a monthly historical trend, define the reporting dataset and reconciliation separately. A report requirement may be satisfied without replaying individual operational documents. If users need drill-down to an original record, the reporting scope must include that retrieval route.

What does a usable historical archive require?

An archive needs an agreed retrieval job, controlled access and an owner who can keep that job working. Define how a user finds a record, what evidence must accompany it, and how access or recovery will be maintained. A folder of exported files is only a candidate until those requirements are demonstrated.

Here, “archive” means the retained-history destination agreed by the project. It does not mean running SAP’s Data Archive Wizard. The SAP Business One 10.0 archive guide describes irreversible data removal and excludes Browser Access and SAP HANA from that wizard’s support.

Write a retrieval task that another person can perform. For example: “For company A and invoice PAID-17, retrieve the original invoice, its required attachment and the reference explaining settlement.” Agree what counts as a correct result and record the location of each piece. This is an example specification, not a completed archive test.

Test a second company with the same visible invoice number. The result should remain within the requested company scope. Also include a missing attachment and a user without the necessary access. A search that returns something quickly can still return incomplete evidence or expose another company’s record.

Decide who maintains the retrieval service after the migration team leaves. That includes the access handover, the supported runtime if one is required, and a recovery exercise for the retained material. Obtain the necessary contractual and licensing confirmation for the chosen route; do not assume continued source-system access is automatic or free.

The relevant owners must set retention, deletion and any preservation obligations for the actual records and jurisdictions. This guide does not supply a universal retention period. Technical retrieval evidence supports that decision but does not establish legal compliance by itself.

What belongs in the migration scope register?

For each dataset, record the business purpose, exact inclusion boundary, destination, permitted effect and accountable owner. Add the evidence that will prove acceptance. Make exclusions explicit enough to review, and version the register so that a new cutoff or an added historical period cannot inherit approval from a different scope.

Minimum proposed scope contract
FieldQuestion it answersExample entry
Dataset and boundaryWhich records are included?Company A, open customer invoices at the approved cutoff.
Purpose and destinationWhat must a user do with them?Continue collection work using the approved Odoo representation.
Allowed effectWhat may change as a result?Represent the remaining exposure once under the approved opening method.
Identity and evidenceHow can a reviewer trace a record?Company, source ID, target reference and reconciliation evidence.
Owner and acceptanceWho approves the result?Finance approves the amount; operations demonstrates the next task.
Revision and exclusionsWhich decision is being accepted?Scope version, cutoff and explicitly excluded closed records.

Download the proposed history-scope acceptance register. Its twelve cases cover operational continuation, the two open invoices, opening-position coordination, selected reference history and archive retrieval. They also include a changed cutoff and an unauthorized historical reposting case.

Every row is marked NOT_RUN. Replace the fictional records with approved test data and add actual evidence before anyone treats a row as accepted. The file is a starting specification, not a compatibility certificate or a completed reconciliation.

For the broader verification process, use the Odoo migration acceptance and reconciliation guide. Mapping suggestions have their own validation needs in the AI data-mapping review. The scope register decides which records and effects those checks must cover.

How should a scope change be accepted?

Treat a scope change as a new decision about dependent records and target effects. Name the additional job, identify what evidence becomes stale, and obtain the relevant owners' approval after the revised checks. Adding historical years can change relationships and financial behavior even when the extraction query changes only slightly.

Suppose someone asks to add all paid invoices from an earlier year. Ask whether the purpose is customer service, reporting or an active financial workflow. Then choose a representation and inspect its effect. A successful test for open invoices does not demonstrate that paid historical invoices are safe to replay through the same path.

If the required source access is unavailable, resolve that constraint before promising a complete history. The legacy ERP access-options guide covers the integration decision. Missing access should be an explicit scope dependency with an owner, not an undocumented assumption about what an export will contain.

What would we approve before building the import?

Approve a small scope register that covers the first operational tasks, the finance-approved opening position and a demonstrated route to retained history. Give each area a named owner. Build and evaluate the import against that agreement, then widen the scope only when another user job justifies the additional records and evidence.

Our recommendation is to start with one representative open-document chain and one closed-history retrieval task. They make the differences visible early: continuing work, preserving financial meaning and retrieving evidence are separate acceptance jobs. A legacy modernization assessment can turn those decisions into a bounded migration work package. Use the standard-versus-custom decision guide when choosing the retained-history implementation.

Frequently asked questions

Must every paid invoice become an Odoo invoice?
Only if the approved target job requires that representation and its effects have been accepted. A reference record, reporting dataset or retained original may satisfy a historical lookup requirement. Define what users need to do and verify that the chosen route does not create an unintended amount due or other active transaction.
Does an archive remove the need for retention decisions?
No. The responsible owners still need to decide which records must be preserved, who may access them and when deletion is permitted. The archive design should implement those decisions and demonstrate retrieval. A technical export alone does not establish that the organization has met its actual legal or contractual obligations.
Can SAP Business One remain available only for consultation?
It may be a candidate route, but confirm the required access, licensing, hosting and maintenance arrangements for the actual installation. Then demonstrate the agreed retrieval tasks and recovery procedure. Do not base the migration scope on an assumption that the old application will remain accessible indefinitely without an owner or cost.
Can historical reporting use a separate dataset?
Yes, as a design option to evaluate against the reporting job. Define the periods, measures, source references and reconciliation evidence. If a report must open an original invoice or attachment, include that route too. A useful aggregate does not automatically preserve the detail needed for a later document-level question.
Should open orders be treated like open invoices?
They need separate acceptance decisions. An order may need to continue fulfillment, while an open invoice represents an outstanding financial item. Work out the remaining action and its dependencies for each record type. Do not assume that one import rule or one total can prove both operational continuation and the approved opening financial position.
Does the downloadable register prove migration compatibility?
No. It contains proposed synthetic cases, all marked NOT_RUN. It does not execute a connector or test a SAP or Odoo installation. Adapt the cases to the exact versions and configuration, perform the approved checks, and attach evidence before marking an outcome accepted. Compatibility still requires its own verified implementation scope.

Build the product, not just the backlog

If this article maps to a real product decision, Wavect can help you scope, build, harden, or lead the software work with senior founder-level judgment.

Useful service paths:

Inbox, without the noise

Follow the work that matters to you

Get a short email when we publish something new. Follow the whole blog or only the problems you care about.

What would you like to receive?
Choose your topics

Free, double opt-in, no tracking pixels.

Back
Kevin Riedl

10 min read · 5 Nov 2026
Last reviewed

Next

Get the next Delivery and QA field note

One concise email when we publish. No tracking pixels, and no inbox filler.

Free, double opt-in, no tracking pixels.