SAP Business One 集成指南:对接 SkyPlanner APS 生产排程
本指南面向 SAP Business One 合作伙伴和 IT 团队,介绍如何将 B1 与 SkyPlanner APS 对接。内容涵盖 API 的选择、各类对象的传输方向,以及 B1 项目容易出问题的环节。SkyPlanner 通过 Service Layer 与 SAP Business One 实现双向集成:
- 将生产订单、工艺路线阶段、资源、物料和采购订单传入 SkyPlanner。
- 将计划开始日期和到期日期回写到生产订单。
- 将操作员的工时记录作为 Receipt and Issue for Production 过账。
- 排程发生变化时,SkyPlanner webhook 会即时推送。
物料、BOM、生产订单、库存和财务仍由 SAP Business One 管理,现有制造模块保持不变。SkyPlanner 团队会在实施导入阶段基于标准 B1 对象配置集成,并在上线后提供支持。各公司的数据库在工艺路线阶段、资源组、用户自定义字段和附加组件方面各有不同,集成配置正是针对这些差异建立映射。
Laboratory & Allied 将 SkyPlanner 与基于 HANA 的 SAP Business One 配合使用。如需了解其业务价值,请参阅 SAP Business One 生产排程页面。
SAP Business One 集成方式
SAP Business One 提供三种集成接口。对于云端排程系统,默认使用 Service Layer。
| 集成方式 | 说明 | APS 集成适用性 |
|---|---|---|
| Service Layer | REST/OData API。/b1s/v1 使用 OData v3,/b1s/v2 使用 OData v4。可在基于 SAP HANA 的 SAP Business One 上运行;从 10.0 PL01 起,也支持 Microsoft SQL Server。 | 首选方式。使用 HTTP 和 JSON,可从云服务调用。 |
| DI API | Windows COM 库。生产订单对应 ProductionOrders 对象,存储在 OWOR 表中(对象类型为 202)。 | 适用于旧有中间件或本地部署的中间件。需要 Windows 主机。 |
| Integration Framework (B1if) | SAP 用于单据级集成场景的中间件。 | 如果合作伙伴已在运行 B1if 集成场景,可采用此方式。 |
身份验证
Service Layer 采用会话认证。通过 POST /b1s/v1/Login 提交 CompanyDB、UserName 和 Password,即可获得 B1SESSION cookie(负载均衡部署还可选用 ROUTEID)。默认 SessionTimeout 为空闲 30 分钟。每次同步结束后,应显式调用 Logout。请创建专用的 B1 集成用户,确保从 SkyPlanner 写入的每项变更都能在变更日志中追溯。
用于生产排程的 Service Layer 实体
| 数据 | Service Layer 实体 |
|---|---|
| 物料及计划数据 | Items |
| 物料清单和工艺路线阶段 | ProductTrees(Lines、Stages) |
| 设备、人工及其他资源 | Resources, ResourceGroups |
| 生产订单 | ProductionOrders(Lines、Stages) |
| 各仓库库存 | Items 库存数据、Warehouses |
| 未结采购订单及交货日期 | PurchaseOrders(DocumentLines:未清数量、ShipDate) |
| 基于采购订单的收货 | PurchaseDeliveryNotes(采购收货单,对象类型为 20) |
| 生产发料 | InventoryGenExits |
| 生产收货 | InventoryGenEntries |
| Webhook 配置 | EventSubscriptions, EventNotifications |
默认每页返回 20 条记录。可通过 Prefer: odata.maxpagesize 请求头(或 PageSize 配置项,该配置项位于 b1s.conf 中)增大每页记录数,并按 odata.nextLink 继续读取。使用 $expand 可在一次调用中获取生产订单的明细行和阶段;批量回写时使用批处理请求。
事件与 webhook
从 SAP Business One 10.0 FP 2602 起,Service Layer 支持 webhook,默认关闭。需通过 CompanyService_UpdateAdminInfo(EnableWebhook = tYES)为各公司分别启用。随后调用 POST EventSubscriptions,提交以下三部分内容:
- 一个
WebhookURL - 一个
AuthenticationType:可选 None、Basic、HMAC 或 OAuth,默认为 HMAC - 一个包含业务对象和事务类型的
EventCollection
WebhookURL 必须使用 HTTPS,且证书须与主机匹配。EventSubscriptionsService_GetEventCatalog 可列出可订阅的事件。Webhook Messenger Service 必须处于运行状态。
旧版本需采用定时轮询(参见下文关于 UpdateDate 的注意事项)。SBO_SP_TransactionNotification 是数据库级校验钩子,并非事件投递通道。
数据映射:从 SAP Business One 到 SkyPlanner
| SAP Business One (Service Layer) | SkyPlanner 对象 | 方向 | 频率 |
|---|---|---|---|
Items(Procurement Method 为 Make 的物料) | 产品 | B1 → SkyPlanner | 首次加载,之后定时同步 |
ProductTrees 的 Lines(物料行) | 产品用料 | B1 → SkyPlanner | 首次加载,之后在变更时同步 |
ProductTrees 的 Stages 和资源行 | 工序及运行时间 | B1 → SkyPlanner | 首次加载,之后在变更时同步 |
Resources(Machine、Labor、Other) | 工作中心及人员 | B1 → SkyPlanner | 首次加载,后续很少变更 |
ResourceGroups | 工作中心组 | B1 → SkyPlanner | 首次加载 |
ProductionOrders(Planned、Released 状态) | 订单及生产任务 | B1 → SkyPlanner | Webhook(FP 2602+)或每隔几分钟轮询 |
ProductionOrders 的 Stages | 生产任务的工序及其顺序 | B1 → SkyPlanner | 随订单同步 |
Items 按 Warehouses 划分的库存 | 物料库存 | B1 → SkyPlanner | 定时同步,例如每小时一次 |
PurchaseOrders(对象类型为 22)的未结明细行及交货日期 | 采购订单/待到货物料及预计交货日期 | B1 → SkyPlanner | 定时同步,例如每小时一次 |
PurchaseDeliveryNotes(采购收货单)中 BaseType 为 22 的明细行 | 采购订单行的已收货数量,并更新库存 | B1 → SkyPlanner | 定时同步,例如每小时一次 |
| 排定的开始和结束时间 | PATCH ProductionOrders({DocEntry}):StartDate、DueDate,以及资源行上的 StartDate 和 EndDate | SkyPlanner → B1 | 排程变更时由 SkyPlanner webhook 触发 |
| 已记录的产量 | InventoryGenEntries(生产收货) | SkyPlanner → B1 | 确认时同步或批量同步 |
| 已记录的工时及物料消耗 | InventoryGenExits(生产发料) | SkyPlanner → B1 | 确认时同步或批量同步 |
班次日历、人员和缺勤信息在 SkyPlanner 中管理。B1 的每日产能数值不纳入数据传输范围(参见下文第一项注意事项)。
集成模式
1. 首次加载主数据。读取 Resources、ResourceGroups、Procurement Method 为 Make 的 Items,以及对应的、包含阶段信息的 ProductTrees。将每个设备资源映射到 SkyPlanner 中的一个工作中心。在首次同步订单前,与计划员一起核对清单。
2. 订单同步。读取状态为 Planned 和 Released 的 ProductionOrders,通过 $expand 展开明细行和阶段。B1 生产订单包含从 BOM 获取的工艺路线阶段,计划员可以在订单创建后修改订单。因此,应使用订单中的阶段,而不是 BOM 中的阶段。一张生产订单只生产一种产品,因此多层级产品的每个层级都对应一张生产订单。将这些订单关联起来,让 SkyPlanner 先安排子件生产,再安排父件生产。
同时,将未结 PurchaseOrders 明细行及其未清数量、交货日期同步到 SkyPlanner 的采购订单端点。SkyPlanner 将已订购物料视为在采购订单交货日期可用。在 B1 中,采购收货单(PurchaseDeliveryNotes)过账后才会产生库存变动。集成程序读取这些收货单,在 SkyPlanner 中将已收货数量标记为已交付,并保留剩余未交付数量。分批收货只计入一次,物料检查同时考虑现有库存和待到货供应。
3. 排程回写。排程发生变更时,SkyPlanner 的 webhook 会触发通知。集成程序通过 PATCH /b1s/v1/ProductionOrders({DocEntry}) 写入新的 StartDate 和 DueDate,并更新订单资源行上的 StartDate 和 EndDate(资源行为 ProductionOrderLines),使每个阶段都有排定的时间区间。请求体只包含由 SkyPlanner 负责维护的字段,多张订单合并到一个 $batch 请求中。随后,B1 用户即可在生产订单和 Resource Capacity 窗口中看到排定的日期。对于无法使用 Service Layer 的部署,可由本地服务通过 DI API 的 ProductionOrders 对象执行相同更新(调用 GetByKey、设置日期、调用 Update)。
4. 车间报工。操作员通过移动端报工或生产计时器在 SkyPlanner 中记录作业。每条工时记录都会转换为一次 POST /b1s/v1/InventoryGenEntries,用于记录完工数量(生产收货),以及一次 POST /b1s/v1/InventoryGenExits,用于记录组件消耗和资源工时(生产发料)。
每个单据行的 BaseType 均为 202,BaseEntry 设置为生产订单的 DocEntry;发料行还需填写对应组件行或资源行的 BaseLine。分批完成的数量在记录时即过账,启用批次或序列号管理的物料需填写相应号码,且订单必须处于 Released 状态。
SkyPlanner 工时记录的 ID 会保存在 B1 单据上,因此事件重试不会导致重复过账。过账失败时,系统会重试并报告错误,而不是直接丢弃。
5. 数据管理权与冲突处理规则。编码前先约定以下规则:
- B1 负责管理物料、BOM、数量和仓库,以及创建订单。
- SkyPlanner 负责管理生产顺序、开始和结束时间,以及工作中心分配。
- 如果两边都修改了订单日期,则以 SkyPlanner 下一次运行的结果为准,除非计划员已在 SkyPlanner 中锁定该生产任务。
- B1 中的订单关闭或取消后,对应生产任务会从排程中移除。
项目包含哪些工作
从实施导入启动算起,通常几周内即可完成实施。在此之前,您可以使用自己的数据进行 30 天免费试用。将 B1 中的物料、资源和未结生产订单导出为 CSV 或 Excel,再通过 SkyPlanner 的数据导入功能加载。这样,还没开始编写集成代码,计划员就能看到实际排程。
典型的 SAP Business One 集成项目包括:
- 主数据映射。将 B1 资源和资源组映射为工作中心,工艺路线阶段映射为工序,Make 类型的物料映射为产品。
- 初始数据加载。加载物料、包含阶段和物料行的 Product Trees、资源以及各仓库的库存。
- 生产订单和采购订单同步。同步未结生产订单及其明细行和阶段,以及未结采购订单及其交货日期。
- 排程回写。将排定的开始日期和到期日期写入
ProductionOrders。 - 车间报工。根据 SkyPlanner 工时记录,对 Receipt and Issue for Production 进行过账。
- 与现行计划并行测试。计划员将 SkyPlanner 的排程与当前的计划方式进行比较。
- 正式上线。以 SkyPlanner 的排程作为正式执行的计划。
B1 中的资源和工艺路线阶段数据越规范,映射工作就越简单。在 Laboratory & Allied 的项目中,集成是工作量最小的部分之一。其内部 IT 团队基本独立完成了基于 HANA 的 SAP Business One 集成。SkyPlanner 团队则协助处理最复杂的情况,例如产品在多道工序中合并的场景。
SAP Business One 集成注意事项
每日产能不等于班次模型。
B1 按天保存各资源的 Daily Internal Capacity 和 Single Run Capacity(SAP Learning 中说明:”These capacities are defined on a daily basis,”(这些产能按天定义))。SAP 指南指出,Required Days 的计算假设是 “a single production order can be produced on a single machine”(一张生产订单可以在一台机器上完成生产)(SAP 操作指南)。不要直接将这些数值当作生产排程中的实际可用产能。应在 SkyPlanner 中定义班次、人员和工作中心效率。
工艺路线包含在 BOM 中。
系统没有独立的工艺路线主数据。Product Tree 中的 Route Stage 行定义工序顺序,Waiting Days 需手动填写。读取 ProductTrees 和 ProductionOrders 中的 Stages,并检查每个资源行是否都归属于某个阶段。订单如果没有阶段,排程系统就无法获取工序顺序。
资源行的数量需要换算。
BOM 行中的 Quantity 表示生产 BOM 表头所列数量需要的用量,而非生产一个单位的用量。Additional Quantity 会计入计划时间,”regardless of the quantity of the parent item produced”(与所生产父项物料的数量无关)(SAP 操作指南)。应将其视为每张订单的固定时间,类似于生产准备时间。计算单位加工时间前,先除以表头数量,否则每个生产任务的时间都会出现倍数偏差。
资源主数据往往需要清理。
资源分为 Machine、Labor 和 Other 类型。机器可以关联固定资产,人工可以关联员工;资源还可以关联非库存物料,用于采购或销售该资源。但这些关联都无法说明哪些资源是真正可用于排程的机器。在将资源转换为工作中心列表之前,应先清理资源组和重复资源。
库存规则可能导致报工过账失败。
收货单和发料单都属于库存单据。常见错误包括混淆 InventoryGenEntries 与 InventoryGenExits、未给启用批次或序列号管理的物料填写相应号码,以及对 Planned 状态的订单过账。
会话与分页。
会话过期时会返回 “Invalid session or session already timeout.”(会话无效或已超时)。遇到此错误时需重新登录。默认每页仅返回 20 条记录;如果同步程序忽略 odata.nextLink,数据就会被截断,且不会有提示。
UpdateDate 不包含时间。
在 OWOR 表中,UpdateDate 是日期字段,更新时间单独存放在 UpdateTS 中。如果轮询仅按 UpdateDate 筛选,每次运行都会读取当天所有发生过变更的订单。应结合这两个字段筛选,或在集成端去重。
Webhook 采用“至少一次”投递机制。
Webhook Messenger 对投递失败的消息最多重试五次(间隔为 2、4、8、16 和 32 秒),之后将其标记为失败。重试可能产生重复消息,而且只保证同一公司内的消息顺序。应基于事件 ID 实现处理程序的幂等性,并保留每晚轮询核对的机制。
SAP Business One 集成由谁配置
配置工作包括映射您的工艺路线阶段、资源和 B1 设置,还包括 B1 排程未考虑的约束:准备时间矩阵、工具、操作员人数和替代资源。
- SkyPlanner 团队在实施导入阶段完成配置,并在上线后提供支持。每家公司使用 B1 的方式都不同,团队会将相应经验应用到配置中。这是默认方案。
- 您的 SAP Business One 合作伙伴也可以参与。熟悉您公司数据库、附加组件和用户自定义字段的合作伙伴,可以基于 Service Layer 和 SkyPlanner 的 REST API 开发集成(API 参考文档)。
- 您的开发团队也可以自行开发集成。SkyPlanner 的 REST API 可读写订单、产品、物料、工序、采购订单和工时记录。该 API 使用 JWT bearer token 认证,文档采用 Swagger/OpenAPI,公开文档见 SkyPlanner 文档。Webhook 会实时推送排程和状态变更。只需一个 SkyPlanner API 密钥即可开始开发(参见集成教程),SkyPlanner 团队会在需要时提供协助。Laboratory & Allied 的内部 IT 团队采用的就是这一方案。
先在 30 天免费试用期间验证排程,确保集成工作以已经符合工厂实际情况的排程为基础。
技术团队为何选择 SkyPlanner 对接 B1
- 如果您希望集成规模小、范围明确,可以选择 SkyPlanner。传入的是标准 B1 对象(生产订单、Product Trees、Resources、Items),传出的是日期以及 Issue and Receipt from Production。无需修改 B1 制造模块,也无需迁移数据。
- 如果项目需要尽早验证价值,可以选择 SkyPlanner。30 天免费试用可使用导出的 CSV 数据,支持最多 20 个工作中心,无需信用卡。集成开始前,业务团队就能看到自己的生产排程。
- 如果排程必须符合实际约束,可以选择 SkyPlanner。换型时间、共享工具、需要多名操作员的生产任务、替代资源、库存和未结采购订单,都在 SkyPlanner 中建模。集成只负责传输 B1 数据。
- 如果您希望计划员和操作员共用一套系统,可以选择 SkyPlanner。Arcturus 引擎可在数秒内生成排程,生产情况变化时,Autopilot 会自动重新排程。操作员通过手机或平板电脑记录作业,集成程序再将这些报工记录回写到 B1。
- 如果您需要可预见的成本,可以选择 SkyPlanner。价格从每月 199 € 起,包含 5 个工作中心,按月付费,可随时取消。集成费用会根据您的流程和需求,与订阅方案一起预先报价,让您在开始前就了解全部费用。
如需了解现有计划功能的不足,请阅读 SAP Business One 生产排程详解;如需了解其他 ERP,请访问 ERP 集成中心。
制造企业对 SkyPlanner 的评价
+90%生产效率
“生产效率提高了 90%。”
Abdul Rucyinga,IT 负责人
Laboratory & Allied · 制药
生产效率提高了 90%,为所有工作中心制定覆盖三个月的优化计划,用时不到 30 分钟。
2 小时每周节省时间
“SkyPlanner 让我们的生产计划从使用 Excel 表格转向了实时生产优化。”
Kalle Kalliomäki,供应链专家
UTU · 配电盘和开关设备
生产计划工作每周节省 2 小时,新的作业队列几秒内就能下达到产线。
6 个月的可用产能,销售一目了然
“SkyPlanner 为所有生产计划工作打下了基础,提供了可靠保障。”
Anu Järvinen,生产经理
Fredman Operations · 食品级包装纸
销售人员能提前掌握未来六个月的可用产能。排程变更请求过去需要一小时甚至更久才能答复,现在几秒钟就能回应。
99.2%准时交付率
“SkyPlanner 让生产瓶颈更容易发现,也让生产管理更加清晰。”
Toni Tuori,生产经理
Piristeel · 屋面安全设施及雨水系统
今年的准时交付率达到了 99.2%,排程每天最多可节省四小时的工作时间。
常见问题
SAP Business One 集成由谁搭建?
SkyPlanner 团队在导入实施期间配置双向集成,并在上线后提供支持。生产订单、工艺阶段、资源、采购订单和收货数据会传入 SkyPlanner,排程日期以及 Issue and Receipt from Production 则回传至 B1。您的 B1 合作伙伴或内部开发人员也可以基于 Service Layer 和 SkyPlanner 的 REST API 自行开发集成,只需一个 API 密钥即可开始。
SkyPlanner 与 SAP Business One 的集成实施需要多长时间?
通常在启动导入实施后的几周内即可完成。团队会映射资源和工艺阶段,接入生产订单和采购订单,并在上线前对照您当前的计划测试排程。
选择 Service Layer 还是 DI API?
新开发的集成应使用 Service Layer。它基于 HTTP,可在 HANA 和 SQL Server 上运行,适合云端排程系统。只有在现有中间件已经依赖 DI API 的情况下,才使用 DI API。
是否必须使用 SAP Business One 10.0 FP 2602?
只有使用 Webhook 时才需要该版本。较早的 10.0 版本通过定时轮询进行集成。
排程日期如何回写到 SAP Business One?
由 SkyPlanner 的排程变更 webhook 触发,通过 PATCH /b1s/v1/ProductionOrders({DocEntry}) 设置订单上的 StartDate 和 DueDate,以及资源行上的 StartDate 和 EndDate。产量和工时通过 InventoryGenEntries 和 InventoryGenExits 回写,并使用值为 202 的 BaseType 及 BaseEntry 关联到订单。
B1 是否需要安装制造业附加组件?
不需要。集成仅涉及 B1 的标准对象:生产订单、Product Trees、Resources、Items、采购订单和库存单据。无需将任何数据迁移到新的制造数据模型中。