Integrazioni / ERP / SAP Business One
Guida all’integrazione di SAP Business One con SkyPlanner APS per la schedulazione della produzione
Questa guida spiega ai partner SAP Business One e ai team IT come collegare B1 a SkyPlanner APS. Illustra quali API usare, quali oggetti vengono trasferiti e in quale direzione, e dove nascono i problemi nei progetti B1. SkyPlanner si integra con SAP Business One in entrambe le direzioni tramite Service Layer:
- SkyPlanner riceve ordini di produzione, fasi del ciclo di lavorazione, risorse produttive, articoli e ordini di acquisto.
- Le date di inizio e di scadenza pianificate vengono riscritte negli ordini di produzione.
- Le registrazioni dei tempi degli operatori vengono contabilizzate come Receipt e Issue for Production.
- I webhook di SkyPlanner inviano le modifiche alla schedulazione non appena avvengono.
SAP Business One continua a gestire articoli, distinte base, ordini di produzione, magazzino e contabilità, mentre il modulo di produzione resta invariato. Il team SkyPlanner configura l’integrazione con gli oggetti standard di B1 durante l’avviamento e fornisce assistenza dopo la messa in esercizio. Ogni database aziendale presenta differenze nelle fasi del ciclo di lavorazione, nei gruppi di risorse, nei campi definiti dall’utente e negli add-on: la configurazione serve a mappare proprio queste specificità.
Laboratory & Allied utilizza SkyPlanner con SAP Business One su HANA. Per valutarne i vantaggi aziendali, consulta la pagina sulla schedulazione della produzione con SAP Business One.
Opzioni di integrazione con SAP Business One
SAP Business One offre tre interfacce di integrazione. Per uno schedulatore cloud, Service Layer è la scelta predefinita.
| Opzione | Descrizione | Idoneità all’integrazione con un APS |
|---|---|---|
| Service Layer | API REST/OData. /b1s/v1 usa OData v3, /b1s/v2 usa OData v4. Funziona sulla versione di SAP Business One per SAP HANA e su Microsoft SQL Server a partire dalla versione 10.0 PL01. | Soluzione principale. Usa HTTP e JSON ed è accessibile da un servizio cloud. |
| DI API | Libreria COM per Windows. Gli ordini di produzione corrispondono all’oggetto ProductionOrders, memorizzato nella tabella OWOR (tipo di oggetto 202). | Per middleware legacy o on-premises. Richiede un host Windows. |
| Integration Framework (B1if) | Middleware SAP per scenari di integrazione a livello di documento. | Utile se il partner utilizza già scenari B1if. |
Autenticazione
Service Layer usa l’autenticazione basata su sessione. Esegui POST /b1s/v1/Login con CompanyDB, UserName e Password per ricevere un cookie B1SESSION (più un ROUTEID facoltativo per le configurazioni con bilanciamento del carico). Il valore predefinito di SessionTimeout è di 30 minuti di inattività. Chiama esplicitamente Logout al termine di ogni sincronizzazione. Crea un utente B1 dedicato all’integrazione, così ogni modifica scritta da SkyPlanner sarà tracciabile nel registro delle modifiche.
Entità di Service Layer per la schedulazione della produzione
| Dati | Entità di Service Layer |
|---|---|
| Articoli e dati di pianificazione | Items |
| Distinte base e fasi del ciclo di lavorazione | ProductTrees (Lines, Stages) |
| Macchine, manodopera e altre risorse produttive | Resources, ResourceGroups |
| Ordini di produzione | ProductionOrders (Lines, Stages) |
| Giacenze per magazzino | Dati di giacenza di Items, Warehouses |
| Ordini di acquisto aperti e date di consegna | PurchaseOrders (DocumentLines: quantità aperta, ShipDate) |
| Entrate merci a fronte di ordini di acquisto | PurchaseDeliveryNotes (Goods Receipt PO, tipo di oggetto 20) |
| Uscita per produzione | InventoryGenExits |
| Entrata da produzione | InventoryGenEntries |
| Configurazione dei webhook | EventSubscriptions, EventNotifications |
La dimensione predefinita della pagina è di 20 record. Aumentala con l’header Prefer: odata.maxpagesize (oppure con PageSize in b1s.conf) e segui odata.nextLink. Usa $expand per recuperare righe e fasi degli ordini di produzione con un’unica chiamata, e richieste batch per scrivere grandi volumi di dati nel sistema di origine.
Eventi e webhook
A partire da SAP Business One 10.0 FP 2602, Service Layer supporta i webhook. Per impostazione predefinita sono disattivati. Abilitali per ciascuna azienda con CompanyService_UpdateAdminInfo (EnableWebhook = tYES). Poi esegui POST EventSubscriptions specificando tre elementi:
- un
WebhookURL - un
AuthenticationType: None, Basic, HMAC oppure OAuth; il valore predefinito è HMAC - una
EventCollectioncon gli oggetti di business e i tipi di transazione
Il WebhookURL deve usare HTTPS con un certificato che corrisponda all’host. EventSubscriptionsService_GetEventCatalog elenca gli eventi a cui è possibile iscriversi. Webhook Messenger Service deve essere in esecuzione.
Nelle versioni precedenti, usa il polling a intervalli programmati (vedi più avanti il problema relativo a UpdateDate). SBO_SP_TransactionNotification è un hook di validazione a livello di database, non un canale di invio delle notifiche.
Mappatura dei dati da SAP Business One a SkyPlanner
| SAP Business One (Service Layer) | Oggetto SkyPlanner | Direzione | Frequenza |
|---|---|---|---|
Items (articoli da produrre, Procurement Method) | Prodotti | B1 → SkyPlanner | Caricamento iniziale, poi a intervalli programmati |
Lines di ProductTrees (righe articolo) | Materiali del prodotto | B1 → SkyPlanner | Caricamento iniziale, poi a ogni modifica |
Stages e righe risorsa di ProductTrees | Fasi di lavorazione e tempi di esecuzione | B1 → SkyPlanner | Caricamento iniziale, poi a ogni modifica |
Resources (Machine, Labor, Other) | Centri di lavoro e personale | B1 → SkyPlanner | Caricamento iniziale, modifiche rare |
ResourceGroups | Gruppi di centri di lavoro | B1 → SkyPlanner | Caricamento iniziale |
ProductionOrders (Planned, Released) | Ordini e operazioni | B1 → SkyPlanner | Webhook (FP 2602+) o polling ogni pochi minuti |
Stages di ProductionOrders | Fasi delle operazioni con relativa sequenza | B1 → SkyPlanner | Insieme all’ordine |
Giacenze di Items per Warehouses | Giacenze dei materiali | B1 → SkyPlanner | A intervalli programmati, ad es. ogni ora |
Righe aperte di PurchaseOrders (tipo di oggetto 22) con data di consegna | Ordini di acquisto / materiali in arrivo con data di consegna prevista | B1 → SkyPlanner | A intervalli programmati, ad es. ogni ora |
Righe di PurchaseDeliveryNotes (Goods Receipt PO) con BaseType 22 | Quantità ricevuta sulla riga dell’ordine di acquisto e giacenze aggiornate | B1 → SkyPlanner | A intervalli programmati, ad es. ogni ora |
| Inizio e fine schedulati | PATCH ProductionOrders({DocEntry}): StartDate, DueDate, StartDate e EndDate della riga risorsa | SkyPlanner → B1 | Webhook SkyPlanner a ogni modifica della schedulazione |
| Quantità registrate | InventoryGenEntries (Receipt from Production) | SkyPlanner → B1 | Alla conferma o in batch |
| Ore e consumi di materiale registrati | InventoryGenExits (Issue for Production) | SkyPlanner → B1 | Alla conferma o in batch |
I calendari dei turni, il personale e le assenze vengono gestiti in SkyPlanner. I dati sulla capacità giornaliera di B1 restano esclusi dal flusso (vedi la prima criticità più avanti).
Modelli di integrazione
1. Caricamento iniziale delle anagrafiche. Recupera Resources, ResourceGroups, gli Items con Procurement Method impostato su Make e i relativi ProductTrees con le fasi. Associa ogni risorsa macchina a un centro di lavoro SkyPlanner. Verifica l’elenco con i pianificatori prima della prima sincronizzazione degli ordini.
2. Sincronizzazione degli ordini. Leggi i ProductionOrders negli stati Planned e Released usando $expand per righe e fasi. Gli ordini di produzione B1 contengono le fasi del ciclo di lavorazione riprese dalla distinta base, ma i pianificatori possono modificare un ordine dopo averlo creato. Usa quindi le fasi dell’ordine, non quelle della distinta base. Un ordine di produzione realizza un solo prodotto: per un prodotto multilivello serve quindi un ordine di produzione per ogni livello. Collega gli ordini tra loro, così SkyPlanner schedulerà i componenti intermedi prima del prodotto padre.
Sincronizza anche le righe aperte di PurchaseOrders, con quantità aperta e data di consegna, tramite gli endpoint di SkyPlanner per gli ordini di acquisto. SkyPlanner considera il materiale ordinato disponibile alla data di consegna dell’ordine di acquisto. In B1, le giacenze vengono movimentate quando si registra un documento Goods Receipt PO (PurchaseDeliveryNotes). L’integrazione legge queste entrate, segna la quantità ricevuta come consegnata in SkyPlanner e mantiene aperto il residuo. Le entrate parziali vengono conteggiate una sola volta e i controlli sui materiali considerano sia le giacenze sia le forniture in arrivo.
3. Scrittura della schedulazione in B1. I webhook di SkyPlanner si attivano quando la schedulazione cambia. L’integrazione invia PATCH /b1s/v1/ProductionOrders({DocEntry}) con i nuovi valori di StartDate e DueDate, oltre a StartDate e EndDate sulle righe risorsa dell’ordine (ProductionOrderLines), così ogni fase riporta l’intervallo schedulato. Il corpo della richiesta contiene solo i campi di competenza di SkyPlanner e più ordini vengono inclusi in un’unica richiesta $batch. Gli utenti B1 vedono così le date schedulate sull’ordine di produzione e nella finestra Resource Capacity. Nelle installazioni in cui Service Layer non è disponibile, lo stesso aggiornamento viene eseguito da un servizio on-premises tramite l’oggetto ProductionOrders della DI API (GetByKey, impostazione delle date, Update).
4. Consuntivazione in reparto. Gli operatori registrano il lavoro in SkyPlanner con Mobile Confirmations o Production Timer. Ogni registrazione dei tempi genera un POST /b1s/v1/InventoryGenEntries per la quantità prodotta (Receipt from Production) e un POST /b1s/v1/InventoryGenExits per i componenti e il tempo delle risorse produttive (Issue for Production).
Ogni riga del documento riporta BaseType 202 e BaseEntry impostato sul DocEntry dell’ordine di produzione; le righe di uscita includono anche il BaseLine della riga del componente o della risorsa produttiva. Le quantità parziali vengono contabilizzate man mano che sono registrate. Per gli articoli gestiti a lotti o a numeri di serie occorre indicare i relativi numeri, e l’ordine deve essere nello stato Released.
L’ID della registrazione dei tempi di SkyPlanner viene salvato nel documento B1: in questo modo un evento ritentato non genera mai una doppia contabilizzazione. Se la contabilizzazione non riesce, viene ritentata e segnalata, anziché scartata.
5. Responsabilità sui dati e regole per i conflitti. Concordale prima di scrivere il codice:
- B1 gestisce articoli, distinte base, quantità, magazzini e creazione degli ordini.
- SkyPlanner gestisce sequenza, orari di inizio e fine e assegnazione ai centri di lavoro.
- Se le date di un ordine vengono modificate in entrambi i sistemi, prevale la successiva elaborazione di SkyPlanner, a meno che i pianificatori non abbiano bloccato l’operazione in SkyPlanner.
- Gli ordini con stato Closed o Cancelled in B1 comportano la rimozione dell’operazione dal programma di produzione.
Cosa comprende il progetto
L’implementazione si completa normalmente nel giro di poche settimane dall’inizio dell’avviamento. Prima di questa fase, puoi usare i tuoi dati nella prova gratuita di 30 giorni. Esporta da B1 articoli, risorse produttive e ordini di produzione aperti in CSV o Excel, quindi caricali con la funzione di importazione dati di SkyPlanner. I pianificatori vedono così un programma di produzione reale prima che venga scritta una sola riga di codice per l’integrazione.
Un tipico progetto SAP Business One comprende:
- Mappatura delle anagrafiche. Le risorse e i gruppi di risorse di B1 vengono associati ai centri di lavoro, le fasi del ciclo di lavorazione alle fasi di processo e gli articoli Make ai prodotti.
- Caricamento iniziale. Articoli, Product Trees con fasi e righe articolo, risorse produttive e giacenze per magazzino.
- Sincronizzazione degli ordini di produzione e di acquisto. Ordini di produzione aperti con righe e fasi, oltre agli ordini di acquisto aperti con le relative date di consegna.
- Scrittura della schedulazione in B1. Date di inizio e scadenza schedulate trasferite a
ProductionOrders. - Consuntivazione di reparto. Contabilizzazione di Receipt e Issue for Production a partire dalle registrazioni dei tempi di SkyPlanner.
- Test in parallelo con il piano attuale. I pianificatori confrontano il programma di SkyPlanner con il proprio metodo di pianificazione attuale.
- Messa in esercizio. Il programma di produzione di SkyPlanner diventa il piano di riferimento.
Risorse e fasi del ciclo di lavorazione ben organizzate in B1 riducono il lavoro di mappatura. Per Laboratory & Allied, l’integrazione è stata una delle parti meno impegnative del progetto. Il team IT interno ha realizzato l’integrazione con SAP Business One su HANA in gran parte in autonomia. Il team SkyPlanner è intervenuto nei casi più complessi, come i prodotti che vengono combinati tra loro nel corso di processi articolati in più fasi.
Criticità di SAP Business One
La capacità giornaliera non descrive l’organizzazione dei turni.
B1 memorizza Daily Internal Capacity e Single Run Capacity per ogni risorsa e per ogni giorno (“These capacities are defined on a daily basis,” (queste capacità sono definite su base giornaliera), come spiega SAP Learning). La guida SAP indica che il calcolo di Required Days presuppone che “a single production order can be produced on a single machine” (un singolo ordine di produzione possa essere realizzato su una sola macchina) (guida operativa SAP). Non copiare questi valori come capacità effettiva disponibile per la schedulazione della produzione: il programma deve rispettare la capacità reale di macchine e personale. Definisci in SkyPlanner i turni, il personale e l’efficienza dei centri di lavoro.
Il ciclo di lavorazione è contenuto nella distinta base.
Non esiste un’anagrafica dei cicli di lavorazione. La sequenza è definita dalle righe Route Stage del Product Tree, mentre i Waiting Days vengono inseriti a mano. Leggi le Stages di ProductTrees e le Stages di ProductionOrders, e verifica che ogni riga risorsa appartenga a una fase. Gli ordini senza fasi non forniscono allo schedulatore alcuna sequenza delle operazioni.
Le quantità nelle righe risorsa vanno convertite.
Il campo Quantity di una riga della distinta base indica quanto serve per produrre la quantità specificata in testata, non una singola unità. Additional Quantity viene aggiunto al tempo pianificato “regardless of the quantity of the parent item produced” (indipendentemente dalla quantità prodotta dell’articolo padre) (guida operativa SAP). Trattalo come un tempo fisso per ordine, ad esempio un tempo di attrezzaggio. Prima di ricavare i tempi di lavorazione unitari, dividi per la quantità in testata; altrimenti la durata di ogni operazione risulterà errata di un fattore moltiplicativo.
Le anagrafiche delle risorse raramente sono ben organizzate.
Le risorse sono classificate come Machine, Labor o Other. Le macchine possono essere collegate ai cespiti e la manodopera ai dipendenti; una risorsa può inoltre essere associata a un articolo non gestito a magazzino per consentirne l’acquisto o la vendita. Nessuna di queste informazioni indica quali risorse siano macchine reali e schedulabili. Riordina i gruppi di risorse ed elimina i duplicati prima di ricavarne l’elenco dei centri di lavoro.
Le regole di magazzino possono impedire la consuntivazione.
Le entrate e le uscite sono documenti di magazzino. Gli errori più comuni sono confondere InventoryGenEntries e InventoryGenExits, omettere i numeri di lotto o di serie per gli articoli che li richiedono oppure registrare movimenti a fronte di un ordine nello stato Planned.
Sessioni e paginazione.
Una sessione scaduta restituisce “Invalid session or session already timeout.” (Sessione non valida o già scaduta). In caso di questo errore, esegui nuovamente il login. La paginazione predefinita a 20 record tronca senza segnalazioni le sincronizzazioni che ignorano odata.nextLink.
UpdateDate non contiene l’ora.
Nella tabella OWOR, UpdateDate è un campo data; l’ora dell’aggiornamento è memorizzata separatamente in UpdateTS. Un polling che filtra solo per UpdateDate recupera a ogni esecuzione tutti gli ordini modificati nella giornata. Combina entrambi i campi oppure elimina i duplicati lato integrazione.
I webhook prevedono la consegna almeno una volta.
Webhook Messenger ritenta una consegna non riuscita fino a cinque volte (2, 4, 8, 16 e 32 secondi), poi la contrassegna come fallita. I tentativi possono generare duplicati e l’ordine è garantito solo all’interno di una stessa azienda. Rendi i gestori idempotenti in base all’ID dell’evento e mantieni un’interrogazione notturna di riconciliazione.
Chi configura l’integrazione con SAP Business One
Il lavoro comprende la mappatura delle fasi del ciclo di lavorazione, delle risorse produttive e della configurazione B1, oltre ai vincoli che B1 non considera nella schedulazione: matrice dei tempi di attrezzaggio, utensili, numero di operatori e risorse alternative.
- Il team SkyPlanner configura l’integrazione durante l’avviamento e fornisce assistenza dopo la messa in esercizio. Ogni azienda usa B1 in modo diverso: è qui che entra in gioco questa competenza. È la modalità predefinita.
- Il tuo partner SAP Business One può partecipare. I partner che conoscono il database aziendale, gli add-on e i campi definiti dall’utente possono sviluppare l’integrazione usando Service Layer e l’API REST di SkyPlanner (documentazione di riferimento dell’API).
- I tuoi sviluppatori possono realizzare l’integrazione. L’API REST di SkyPlanner legge e scrive ordini, prodotti, materiali, fasi di processo, ordini di acquisto e registrazioni dei tempi. Usa l’autenticazione con token bearer JWT ed è documentata in Swagger/OpenAPI; la documentazione pubblica è disponibile nella documentazione SkyPlanner. I webhook inviano in tempo reale le modifiche al programma di produzione e agli stati. Per iniziare a sviluppare basta una chiave API SkyPlanner (tutorial di integrazione), con l’assistenza del team SkyPlanner quando serve. È il percorso scelto dal team IT interno di Laboratory & Allied.
Prima convalida il programma di produzione nella prova gratuita di 30 giorni: l’integrazione partirà così da un programma già adatto allo stabilimento.
Perché i team tecnici scelgono SkyPlanner per B1
- Scegli SkyPlanner se vuoi un’integrazione circoscritta e ben definita. Il flusso prevede in ingresso gli oggetti standard di B1 (ordini di produzione, Product Trees, Resources, Items) e in uscita le date, oltre a Issue e Receipt from Production. Nessuna modifica al modulo di produzione di B1 e nessuna migrazione dei dati.
- Scegli SkyPlanner se il progetto deve dimostrare subito il proprio valore. La prova gratuita di 30 giorni usa un’esportazione CSV e consente di gestire fino a 20 centri di lavoro, senza carta di credito. L’azienda vede il proprio programma di produzione prima che inizi l’integrazione.
- Scegli SkyPlanner se il programma di produzione deve rispettare i vincoli reali. Tempi di cambio produzione, utensili condivisi, operazioni con più operatori, risorse alternative, giacenze e ordini di acquisto aperti vengono tutti modellati in SkyPlanner. L’integrazione si limita a fornire i dati di B1.
- Scegli SkyPlanner se vuoi un unico sistema per pianificatori e operatori. Il motore Arcturus crea il programma di produzione in pochi secondi e Autopilot lo rischedula automaticamente quando la produzione cambia. Gli operatori registrano il lavoro da telefono o tablet e l’integrazione riporta questi consuntivi in B1.
- Scegli SkyPlanner se i costi devono essere prevedibili. I prezzi partono da 199 € al mese con 5 centri di lavoro inclusi, fatturazione mensile e possibilità di disdire in qualsiasi momento. L’integrazione viene preventivata in anticipo in base ai tuoi processi e alle tue esigenze, insieme al piano scelto: conosci così il costo complessivo prima di iniziare.
Per capire quali esigenze di pianificazione restano scoperte, leggi l’approfondimento sulla schedulazione della produzione con SAP Business One. Per gli altri ERP, consulta la pagina delle integrazioni ERP.
Le recensioni delle aziende manifatturiere su SkyPlanner
+90%di efficienza produttiva
“L’efficienza in produzione è aumentata del 90%.”
Abdul Rucyinga, responsabile IT
Laboratory & Allied · Produzione farmaceutica
L’efficienza produttiva è aumentata del 90% e bastano meno di 30 minuti per ottenere un piano ottimizzato di tre mesi per tutti i centri di lavoro.
2 hrisparmiate ogni settimana
“Con SkyPlanner siamo passati dalla pianificazione della produzione su fogli Excel all’ottimizzazione della produzione in tempo reale.”
Kalle Kalliomäki, specialista della supply chain
UTU · Quadri e apparecchiature elettriche di manovra
La pianificazione della produzione richiede 2 ore di lavoro in meno ogni settimana e una nuova coda di lavoro arriva alla linea in pochi secondi.
6 mesidi capacità disponibile visibili al reparto vendite
“SkyPlanner offre una base solida e affidabile per tutta la pianificazione della produzione.”
Anu Järvinen, responsabile di produzione
Fredman Operations · Carte per imballaggi idonee al contatto alimentare
Il reparto vendite vede la capacità disponibile con sei mesi di anticipo. Le richieste di modifica del programma, che prima richiedevano un’ora o più, ricevono risposta in pochi secondi.
99,2%di affidabilità delle consegne
“SkyPlanner ha reso visibili i colli di bottiglia e più chiara la gestione della produzione.”
Toni Tuori, responsabile di produzione
Piristeel · Sistemi di sicurezza per tetti e di raccolta delle acque piovane
Quest’anno l’affidabilità delle consegne ha raggiunto il 99,2% e la schedulazione consente di risparmiare fino a quattro ore di lavoro al giorno.
Domande frequenti
Chi realizza l’integrazione con SAP Business One?
Il team SkyPlanner configura l’integrazione bidirezionale durante l’avviamento e fornisce assistenza dopo la messa in esercizio. In SkyPlanner vengono importati ordini di produzione, fasi del ciclo di lavorazione, risorse produttive, ordini di acquisto ed entrate merci. A SAP vengono restituiti le date schedulate e i documenti Issue and Receipt from Production. Anche il tuo partner B1 o i tuoi sviluppatori possono realizzare l’integrazione usando Service Layer e l’API REST di SkyPlanner: per iniziare basta una chiave API.
Quanto tempo richiede l’implementazione di SkyPlanner con SAP Business One?
L’implementazione si conclude normalmente entro poche settimane dall’inizio dell’avviamento. Il team mappa le risorse produttive e le fasi del ciclo di lavorazione, collega gli ordini di produzione e di acquisto e verifica la schedulazione rispetto al piano attuale prima della messa in esercizio.
Service Layer o DI API?
Per le nuove integrazioni, Service Layer. Si basa su HTTP, funziona su HANA e SQL Server ed è adatto a uno schedulatore cloud. Usa DI API solo se il middleware esistente ne dipende già.
È necessario SAP Business One 10.0 FP 2602?
Solo per i webhook. Le versioni 10.0 precedenti si integrano tramite polling a intervalli programmati.
Come vengono riscritte in SAP Business One le date schedulate?
Tramite PATCH /b1s/v1/ProductionOrders({DocEntry}), impostando StartDate e DueDate sull’ordine e StartDate e EndDate sulle relative righe risorsa. L’aggiornamento viene attivato dal webhook di SkyPlanner che segnala le modifiche alla schedulazione. Le quantità prodotte e i tempi vengono trasferiti a B1 come InventoryGenEntries e InventoryGenExits, collegati all’ordine tramite BaseType 202 e BaseEntry.
Serve un add-on di produzione in B1?
No. L’integrazione utilizza solo oggetti standard di B1: ordini di produzione, Product Trees, Resources, Items, ordini di acquisto e documenti di magazzino. Nessun dato viene migrato in un nuovo modello dati di produzione.
Possiamo provare SkyPlanner con i nostri dati B1 prima dell’integrazione?
Sì. La prova di 30 giorni include fino a 20 centri di lavoro con importazione da CSV o Excel, senza carta di credito. Inizia la prova gratuita oppure parla con il team commerciale della tua configurazione B1.