Integrations / ERP / SAP Business One
SAP Business One Integration Guide for SkyPlanner APS Production Scheduling
This guide shows SAP Business One partners and IT teams how to connect B1 to SkyPlanner APS. It covers which APIs to use, which objects move where, and where B1 projects go wrong. SkyPlanner integrates with SAP Business One in both directions through the Service Layer:
- Production orders, route stages, resources, items and purchase orders flow in.
- Planned start and due dates are written back to the production orders.
- Operator timelogs are posted as Receipt and Issue for Production.
- SkyPlanner webhooks push schedule changes as they happen.
SAP Business One keeps items, BOMs, production orders, inventory and finance, and your manufacturing module stays as it is. The SkyPlanner team configures the integration against standard B1 objects during onboarding and supports it after go-live. Every company database differs in route stages, resource groups, user-defined fields and add-ons, and that is what the configuration maps.
Laboratory & Allied runs SkyPlanner on SAP Business One on HANA. For the business case, see the SAP Business One production scheduling page.
SAP Business One integration options
SAP Business One offers three integration surfaces. For a cloud scheduler, Service Layer is the default.
| Option | What it is | Fit for APS integration |
|---|---|---|
| Service Layer | REST/OData API. /b1s/v1 is OData v3, /b1s/v2 is OData v4. Runs on SAP Business One version for SAP HANA and on Microsoft SQL Server since 10.0 PL01. | Primary route. HTTP, JSON, works from a cloud service. |
| DI API | Windows COM library. Production orders are the ProductionOrders object, stored in table OWOR (object type 202). | Legacy or on-premises middleware. Needs a Windows host. |
| Integration Framework (B1if) | SAP’s middleware for document-level scenarios. | Useful if the partner already runs B1if scenarios. |
Authentication
Service Layer uses session authentication. You POST /b1s/v1/Login with CompanyDB, UserName and Password, and receive a B1SESSION cookie (plus an optional ROUTEID for load-balanced setups). The default SessionTimeout is 30 minutes idle. Call Logout explicitly when a sync run ends. Create a dedicated B1 integration user so every change written from SkyPlanner is traceable in the change log.
Service Layer entities for production scheduling
| Data | Service Layer entity |
|---|---|
| Items and planning data | Items |
| Bills of materials and route stages | ProductTrees (Lines, Stages) |
| Machines, labor, other resources | Resources, ResourceGroups |
| Production orders | ProductionOrders (Lines, Stages) |
| Stock by warehouse | Items inventory data, Warehouses |
| Open purchase orders and delivery dates | PurchaseOrders (DocumentLines: open quantity, ShipDate) |
| Goods receipts against purchase orders | PurchaseDeliveryNotes (Goods Receipt PO, object type 20) |
| Issue for Production | InventoryGenExits |
| Receipt from Production | InventoryGenEntries |
| Webhook setup | EventSubscriptions, EventNotifications |
Default page size is 20 records. Raise it with the Prefer: odata.maxpagesize header (or PageSize in b1s.conf) and follow odata.nextLink. Use $expand to pull production order lines and stages in one call, and batch requests for bulk write-back.
Events and webhooks
From SAP Business One 10.0 FP 2602, Service Layer supports webhooks. They are off by default. You enable them per company with CompanyService_UpdateAdminInfo (EnableWebhook = tYES). Then you POST EventSubscriptions with three parts:
- a
WebhookURL - an
AuthenticationType: None, Basic, HMAC or OAuth, with HMAC as the default - an
EventCollectionof business objects and transaction types
The WebhookURL must use HTTPS with a certificate that matches the host. EventSubscriptionsService_GetEventCatalog lists what you can subscribe to. The Webhook Messenger Service must be running.
On older versions, use scheduled polling (see the pitfall on UpdateDate below). SBO_SP_TransactionNotification is a database-level validation hook, not a delivery channel.
Data mapping: SAP Business One to SkyPlanner
| SAP Business One (Service Layer) | SkyPlanner object | Direction | Frequency |
|---|---|---|---|
Items (Make items, Procurement Method) | Products | B1 → SkyPlanner | Initial load, then scheduled |
ProductTrees Lines (Item lines) | Product materials | B1 → SkyPlanner | Initial load, then on change |
ProductTrees Stages and Resource lines | Process steps and run times | B1 → SkyPlanner | Initial load, then on change |
Resources (Machine, Labor, Other) | Workstations and personnel | B1 → SkyPlanner | Initial load, rare changes |
ResourceGroups | Workstation groups | B1 → SkyPlanner | Initial load |
ProductionOrders (Planned, Released) | Orders and jobs | B1 → SkyPlanner | Webhook (FP 2602+) or polling every few minutes |
ProductionOrders Stages | Job steps with sequence | B1 → SkyPlanner | With the order |
Items stock per Warehouses | Material inventory | B1 → SkyPlanner | Scheduled, e.g. hourly |
PurchaseOrders (object type 22) open lines with delivery date | Purchase orders / incoming material with expected delivery date | B1 → SkyPlanner | Scheduled, e.g. hourly |
PurchaseDeliveryNotes (Goods Receipt PO) lines with BaseType 22 | Received quantity on the PO line, stock updated | B1 → SkyPlanner | Scheduled, e.g. hourly |
| Scheduled start and end | PATCH ProductionOrders({DocEntry}): StartDate, DueDate, resource line StartDate and EndDate | SkyPlanner → B1 | SkyPlanner webhook on schedule change |
| Logged quantities | InventoryGenEntries (Receipt from Production) | SkyPlanner → B1 | On confirmation or batched |
| Logged hours and material use | InventoryGenExits (Issue for Production) | SkyPlanner → B1 | On confirmation or batched |
Shift calendars, personnel and absences live in SkyPlanner. B1’s daily capacity figures stay out of the flow (see the first pitfall below).
Integration patterns
1. Initial master data load. Pull Resources, ResourceGroups, Items with Procurement Method Make, and their ProductTrees with stages. Map each machine resource to a SkyPlanner workstation. Review the list with planners before the first order sync.
2. Order sync. Read ProductionOrders in status Planned and Released with $expand on lines and stages. B1 production orders carry route stages taken from the BOM, and planners can change an order after it is created. Use the order’s stages, not the BOM’s. A production order makes one product, so a multi-level product runs as one production order per level. Link them so SkyPlanner schedules subproducts before the parent.
Sync open PurchaseOrders lines with their open quantity and delivery date to SkyPlanner’s purchase order endpoints as well. SkyPlanner treats ordered material as available on the PO delivery date. In B1, stock moves when a Goods Receipt PO (PurchaseDeliveryNotes) is posted. The integration reads those receipts, marks the received quantity as delivered in SkyPlanner and keeps the remainder open. Partial receipts are counted once, and material checks cover stock and incoming supply.
3. Schedule write-back. SkyPlanner’s webhooks fire when the schedule changes. The integration sends PATCH /b1s/v1/ProductionOrders({DocEntry}) with the new StartDate and DueDate, and with StartDate and EndDate on the order’s resource lines (ProductionOrderLines) so each stage carries its scheduled window. Only fields SkyPlanner owns are in the body, and several orders go in one $batch request. B1 users then see the scheduled dates on the production order and in the Resource Capacity window. On installations where Service Layer is not available, the same update runs through the DI API ProductionOrders object (GetByKey, set dates, Update) from an on-premises service.
4. Shop-floor confirmations. Operators log work in SkyPlanner with Mobile Confirmations or the Production Timer. Each timelog becomes a POST /b1s/v1/InventoryGenEntries for finished quantity (Receipt from Production) and a POST /b1s/v1/InventoryGenExits for components and resource time (Issue for Production).
Each document line carries BaseType 202 and BaseEntry set to the production order’s DocEntry; issue lines add the BaseLine of the component or resource line. Partial quantities post as they are logged, batch and serial numbers go on managed items, and the order must be Released.
The SkyPlanner timelog ID is stored on the B1 document, so a retried event never posts twice, and a failed posting is retried and reported instead of dropped.
5. Ownership and conflict rules. Agree on them before coding:
- B1 owns items, BOMs, quantities, warehouses and order creation.
- SkyPlanner owns sequence, start and end times and workstation assignment.
- If both sides change an order’s dates, the next SkyPlanner run wins, unless planners have locked the job in SkyPlanner.
- Closed or Cancelled orders in B1 remove the job from the schedule.
What the project contains
Implementation is normally completed within weeks after onboarding starts. Before that, the 30-day free trial runs on your own data. Export items, resources and open production orders from B1 to CSV or Excel and load them with SkyPlanner’s data import. Planners see a real schedule before anyone writes integration code.
A typical SAP Business One project contains:
- Master data mapping. B1 resources and resource groups to workstations, route stages to process steps, Make items to products.
- Initial load. Items, Product Trees with stages and item lines, resources and stock per warehouse.
- Order and purchase order sync. Open production orders with lines and stages, plus open purchase orders with their delivery dates.
- Schedule write-back. Scheduled start and due dates to
ProductionOrders. - Shop-floor confirmations. Receipt and Issue for Production posted from SkyPlanner time logs.
- Testing in parallel with the current plan. Planners compare SkyPlanner’s schedule with how they plan today.
- Go-live. The SkyPlanner schedule becomes the plan of record.
Clean resources and route stages in B1 keep the mapping short. At Laboratory & Allied, integration was one of the lightest parts of the project. The in-house IT team did the SAP Business One integration on HANA largely on its own. The SkyPlanner team stepped in for the most complex cases, such as products that combine across multi-step processes.
SAP Business One pitfalls
Daily capacity is not a shift model.
B1 holds Daily Internal Capacity and Single Run Capacity per resource per day (“These capacities are defined on a daily basis,” per SAP Learning). SAP’s guide states the Required Days calculation assumes “a single production order can be produced on a single machine” (SAP how-to guide). Do not copy those figures as finite capacity. Define shifts, personnel and workstation efficiencies in SkyPlanner.
Routing lives inside the BOM.
There is no routing master. Route Stage lines in the Product Tree carry the sequence, and Waiting Days are typed in by hand. Read ProductTrees Stages and ProductionOrders Stages, and check that every resource line belongs to a stage. Orders without stages give the scheduler no operation sequence.
Resource line quantities need conversion.
A BOM line’s Quantity is what is needed to produce the quantity in the BOM header, not one unit. Additional Quantity is added to the planned time “regardless of the quantity of the parent item produced” (SAP how-to guide). Treat it as fixed time per order, like a setup. Divide by the header quantity before you derive per-unit run times, or every job ends up off by a factor.
Resource master data is rarely clean.
Resources come as Machine, Labor or Other. Machines can be linked to fixed assets and labor to employees, and a resource can carry a linked non-inventory item for purchasing or selling it. None of that tells you which resources are real, schedulable machines. Clean up resource groups and duplicate resources before they become your workstation list.
Confirmations fail on inventory rules.
Receipts and issues are inventory documents. Mixing up InventoryGenEntries and InventoryGenExits, missing batch or serial numbers on managed items, or posting against a Planned order are the usual errors.
Sessions and paging.
An expired session returns “Invalid session or session already timeout.” Re-login on that error. Default paging at 20 records silently truncates syncs that ignore odata.nextLink.
UpdateDate has no time.
In table OWOR, UpdateDate is a date field; the update time sits separately in UpdateTS. A poll that filters on UpdateDate alone picks up every order changed today on every run. Combine both fields or deduplicate on your side.
Webhooks are at-least-once.
The Webhook Messenger retries a failed delivery up to five times (2, 4, 8, 16 and 32 seconds), then marks it failed. Retries can produce duplicates, and order is guaranteed only within one company. Make handlers idempotent on the event ID and keep a nightly reconciliation poll.
The SAP Business One integration: who sets it up
The work covers mapping your route stages, resources and B1 setup, plus the constraints B1 does not schedule: setting time matrix, tools, operator counts and alternative resources.
- The SkyPlanner team configures it during onboarding and supports it after go-live. Every company runs B1 differently, and this is where that know-how goes. This is the default route.
- Your SAP Business One partner can take part. Partners who know your company database, add-ons and user-defined fields can build on Service Layer and SkyPlanner’s REST API (API reference).
- Your own developers can build on it. SkyPlanner’s REST API reads and writes orders, products, materials, process steps, purchase orders and timelogs. It uses JWT bearer token authentication and is documented in Swagger/OpenAPI, with public docs at SkyPlanner docs. Webhooks push schedule and status changes in real time. You only need a SkyPlanner API key to start building (integration tutorial), and the SkyPlanner team assists when needed. This is the route Laboratory & Allied’s in-house IT team took.
Validate the schedule in the 30-day free trial first, so integration starts from a schedule that already fits the plant.
Why technical teams pick SkyPlanner for B1
- Choose SkyPlanner when you want a small, well-defined integration. The flow is standard B1 objects in (production orders, Product Trees, Resources, Items) and dates plus Issue and Receipt from Production out. No change to the B1 manufacturing module and no data migration.
- Choose SkyPlanner when the project must prove itself early. The 30-day free trial runs on a CSV export with up to 20 workstations and no credit card. The business sees its own schedule before integration starts.
- Choose SkyPlanner when the schedule must respect real constraints. Changeover times, shared tools, multi-operator jobs, alternative resources, stock and open purchase orders are all modeled in SkyPlanner. The integration only delivers the B1 data.
- Choose SkyPlanner when you want one system for planners and operators. The Arcturus engine builds the schedule in seconds, and Autopilot reschedules automatically when production changes. Operators log work on phone or tablet, and your integration writes those confirmations back to B1.
- Choose SkyPlanner when cost has to be predictable. Pricing is from 199 € per month with 5 workstations included, monthly billing, cancel any time. The integration is quoted up front for your process and needs, together with your plan, so you see the full cost before you start.
Read the SAP Business One finite capacity scheduling explainer for the planning gap, and the ERP integrations hub for other ERPs.
SkyPlanner reviews from manufacturers
+90%production efficiency
“Efficiency has gone up 90% in production.”
Abdul Rucyinga, Head of IT
Laboratory & Allied · Pharmaceutical manufacturing
Production efficiency is up 90%, and a three-month optimized plan across all workstations takes under 30 minutes.
2 hsaved every week
“SkyPlanner has taken our production planning from Excel spreadsheets to real-time production optimization.”
Kalle Kalliomäki, Supply Chain Specialist
UTU · Electrical switchboards and switchgear
Production planning saves 2 hours of working time every week, and a new work queue reaches the line in seconds.
6 monthsof free capacity visible to sales
“SkyPlanner creates the foundation and reliability for all production planning.”
Anu Järvinen, Production Manager
Fredman Operations · Food-safe packaging papers
Sales sees free capacity six months ahead, and schedule-change requests that took an hour or more are answered in seconds.
99.2%delivery reliability
“SkyPlanner has brought visibility to identifying bottlenecks and clarified production management.”
Toni Tuori, Production Manager
Piristeel · Roof safety and rainwater systems
Delivery reliability reached 99.2% this year, and scheduling saves up to four hours of working time per day.
FAQ
Who builds the SAP Business One integration?
The SkyPlanner team configures the two-way integration during onboarding and supports it after go-live. Production orders, route stages, resources, purchase orders and goods receipts come in. Scheduled dates and Issue and Receipt from Production go back. Your B1 partner or your own developers can also build on Service Layer and SkyPlanner’s REST API, and an API key is enough to start.
How long does a SkyPlanner and SAP Business One implementation take?
Implementation is normally completed within weeks after onboarding starts. The team maps resources and route stages, connects production and purchase orders, and tests the schedule against your current plan before go-live.
Service Layer or DI API?
Service Layer for new work. It is HTTP-based, runs on HANA and SQL Server, and suits a cloud scheduler. Use DI API only where existing middleware already depends on it.
Do I need SAP Business One 10.0 FP 2602?
Only for webhooks. Earlier 10.0 versions integrate through scheduled polling.
How are scheduled dates written back to SAP Business One?
With PATCH /b1s/v1/ProductionOrders({DocEntry}), setting StartDate and DueDate on the order and StartDate and EndDate on its resource lines, triggered by SkyPlanner’s schedule-change webhook. Output and time go back as InventoryGenEntries and InventoryGenExits linked to the order with BaseType 202 and BaseEntry.
Do we need a manufacturing add-on in B1?
No. The integration touches standard B1 objects only: production orders, Product Trees, Resources, Items, purchase orders and inventory documents. Nothing is migrated into a new manufacturing data model.
Can we test SkyPlanner on our B1 data before integrating?
Yes. The 30-day trial covers up to 20 workstations with CSV or Excel import, no credit card needed. Start the free trial or talk to sales about your B1 setup.