Commit 6a8476f8 authored by 刘鹏's avatar 刘鹏

feat: 恢复开发清单/开发功能说明书缺失文件,更新接口功能说明书及新增开发文档

parent 36124c9a
# 深圳广联齐套性检查功能说明书
## 文档信息
| 项目 | 内容 |
|------|------|
| 文档编号 | GL-KC-001 |
| 版本号 | V1.5 |
| 创建日期 | 2026-08-10 |
| 文档状态 | 初稿 |
| 系统版本 | S/4HANA CLOUD 公有云 |
| 技术路线 | CDS View + Custom Query + Fiori 报表 |
## 修订记录
| 版本 | 修订日期 | 修订人 | 修订内容 |
|------|----------|--------|----------|
| V1.0 | 2026-08-10 | - | 初始版本 |
| V1.1 | 2026-08-10 | - | 更新:增加订单类型/计划订单号字段;需求计算增加已领料扣减 |
| V1.2 | 2026-08-10 | - | 修复:生产订单类型改为GL01-04;计划订单状态改为未删除即生效 |
| V1.3 | 2026-08-10 | - | 优化:移除OP版本相关内容,统一使用S/4HANA CLOUD标准表 |
| V1.4 | 2026-08-10 | - | 重构:技术路线改为CDS View+Fiori报表;修正表/字段为公有云标准CDS视图;明确状态过滤、PR/在途/库存口径 |
| V1.5 | 2026-08-10 | - | 完善:补全明细/汇总CDS视图完整定义;库存/PR/在途改为子查询聚合;统一技术路线为CDS+Fiori List Report;明确MES扩展字段访问方式 |
---
## 1. 功能概述
### 1.1 功能名称
广联齐套性检查报表
### 1.2 功能描述
本功能用于检查生产订单/计划订单所需组件物料的齐套情况,帮助生产计划人员快速了解物料供应状态,及时发现欠料风险。
### 1.3 业务目标
- 实时监控物料齐套状态
- 支持按SKU、订单、日期等多维度查询
- 提供明细和汇总两种视图
- 支持导出功能供进一步分析
---
## 2. 查询条件(抬头)
### 2.1 查询维度
| 序号 | 字段名称 | 字段类型 | 必填 | 说明 |
|------|----------|----------|------|------|
| 1 | SKU | CHAR(多选) | 是 | 物料号(组件物料),支持多选 |
| 2 | 计划订单 | CHAR(区间) | 否 | 计划订单号区间 |
| 3 | 生产订单 | CHAR(区间) | 否 | 生产订单号区间 |
| 4 | 是否发送MES | CHAR(1) | 否 | 勾选后仅显示已发送MES的订单 |
| 5 | 需求日期 | DATS(区间) | 否 | 按需求日期区间查询 |
| 6 | 工厂 | CHAR(4) | 是 | 工厂代码,如1011 |
### 2.2 查询条件说明
| 条件 | 说明 |
|------|------|
| 计划订单维度 | 勾选后将计划订单纳入齐套计算,不勾选仅计算生产订单 |
| 生产订单维度 | 仅考虑已生效的生产订单 |
| MES同步状态 | 通过生产订单自定义字段"是否发送MES"筛选 |
---
## 3. 输出界面
### 3.1 明细界面
#### 3.1.1 字段定义
| 序号 | 字段名称 | 类型 | 长度 | 说明 |
|------|----------|------|------|------|
| 1 | 工厂 | CHAR | 4 | 工厂代码 |
| 2 | 订单类型 | CHAR | 30 | 计划订单/生产订单 |
| 3 | 生产订单号 | CHAR | 12 | 生产订单号 |
| 4 | 计划订单号 | CHAR | 12 | 计划订单号 |
| 5 | 订单类型代码 | CHAR | 4 | GL01-GL04(仅生产订单) |
| 6 | 订单抬头物料 | CHAR | 18 | 订单产出物料号 |
| 7 | 订单抬头物料描述 | CHAR | 40 | 物料描述 |
| 8 | 组件物料号 | CHAR | 18 | 需求组件物料号 |
| 9 | 组件物料描述 | CHAR | 40 | 组件物料描述 |
| 10 | 需求日期 | DATS | 8 | 需求日期 |
| 11 | 需求 | QUAN | 13.3 | 需求数量(已扣减已领料) |
| 12 | 已领料数量 | QUAN | 13.3 | 已发料数量(仅生产订单) |
| 13 | 库存 | QUAN | 13.3 | 非限制使用库存 |
| 14 | PR数量 | QUAN | 13.3 | 全工厂该物料PR汇总 |
| 15 | 在途 | QUAN | 13.3 | 全工厂该物料在途汇总 |
| 16 | 是否齐套 | CHAR | 2 | 是/否 |
#### 3.1.2 需求计算逻辑
```
-- 计划订单需求
需求 = 计划订单组件需求量
-- 生产订单需求(需扣除已领料)
需求 = 生产订单组件需求量 - 已领料数量
```
#### 3.1.3 齐套判断逻辑
```
齐套条件:库存 >= 需求数量
是否齐套 =
IF 库存 >= 需求 THEN '是'
ELSE '否'
```
**注意**:当前版本齐套判断仅考虑库存,不考虑PR和在途数量(PR和在途仅显示供参考)。
---
### 3.2 汇总界面
#### 3.2.1 字段定义
| 序号 | 字段名称 | 类型 | 长度 | 说明 |
|------|----------|------|------|------|
| 1 | 工厂 | CHAR | 4 | 工厂代码 |
| 2 | 组件物料 | CHAR | 18 | 组件物料号 |
| 3 | 物料描述 | CHAR | 40 | 物料描述 |
| 4 | 需求数量汇总 | QUAN | 13.3 | 该物料所有订单需求汇总(已扣减已领料) |
| 5 | 库存 | QUAN | 13.3 | 非限制使用库存 |
| 6 | 欠料 | QUAN | 13.3 | 需求数量汇总 - 库存(负数显示为0) |
| 7 | PR数量 | QUAN | 13.3 | 全工厂该物料PR汇总 |
| 8 | 在途 | QUAN | 13.3 | 全工厂该物料在途汇总 |
| 9 | 是否齐套 | CHAR | 2 | 是/否 |
#### 3.2.2 汇总计算逻辑
```
需求数量汇总 = SUM(明细需求) -- 明细需求已扣除已领料数量
欠料 = MAX(需求数量汇总 - 库存, 0)
齐套条件:库存 >= 需求数量汇总
```
---
## 4. 数据模型
### 4.1 数据来源(S/4HANA CLOUD 标准CDS视图)
| 标准视图 | 描述 | 用途 |
|----------|------|------|
| I_ProductionOrder | 生产订单抬头 | 获取订单号、订单类型、物料、状态 |
| I_ProductionOrderComponent | 生产订单组件 | 获取组件需求、已领料、需求日期 |
| I_PlannedOrder | 计划订单 | 获取计划订单信息 |
| I_PlannedOrderComponent | 计划订单组件 | 获取计划订单组件需求 |
| I_MaterialStock | 物料库存 | 获取非限制使用库存(按物料+工厂聚合) |
| I_PurchaseRequisitionItem | 采购申请项目 | 获取PR数量(按物料+工厂汇总) |
| I_PurchaseOrderScheduleLine | 采购订单计划行 | 获取在途数量(按物料+工厂汇总) |
| I_ProductDescription | 物料描述 | 获取物料描述 |
> **自定义字段说明**:"是否发送MES"是生产订单的自定义扩展字段,通过 **Custom Fields** 挂载到 I_ProductionOrder 上,在 CDS 视图中直接以字段形式访问(如 `po.ZZ_SEND_MES`),**不需要** JOIN 任何自定义字段表。
### 4.2 自定义CDS视图设计
#### 视图1:ZC_KITSCHECK_DETAIL(明细视图)
用于 Fiori List Report 的明细展示,`@OData.publish` 发布为 OData 服务,查询条件通过 UI Filter Bar 实现(**不需要 with parameters**)。
```cds
@AbapCatalog.sqlViewName: 'ZCKCHEKDT'
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '齐套性检查明细'
@OData.publish: true
define view ZC_KITSCHECK_DETAIL as select from
I_ProductionOrderComponent as poc
inner join I_ProductionOrder as po
on po.ManufacturingOrder = poc.ManufacturingOrder
-- 订单抬头物料描述
left outer join I_ProductDescription as mh
on mh.Product = po.Material
-- 组件物料描述
left outer join I_ProductDescription as mc
on mc.Product = poc.ComponentMaterial
-- 库存(按物料+工厂聚合,避免分仓重复)
left outer join (
select Material, Plant, sum(UnrestrictedStock) as Stock
from I_MaterialStock
group by Material, Plant
) as ms
on ms.Material = poc.ComponentMaterial
and ms.Plant = po.Plant
-- PR数量(按物料+工厂汇总)
left outer join (
select Material, Plant, sum(Quantity) as PrQty
from I_PurchaseRequisitionItem
where DeletionIndicator <> 'X'
group by Material, Plant
) as pr
on pr.Material = poc.ComponentMaterial
and pr.Plant = po.Plant
-- 在途(按物料+工厂汇总)
left outer join (
select Material, Plant, sum(OpenQuantity) as OtQty
from I_PurchaseOrderScheduleLine
group by Material, Plant
) as otw
on otw.Material = poc.ComponentMaterial
and otw.Plant = po.Plant
{
po.Plant as Plant, -- 工厂
'生产订单' as OrderType, -- 订单类型
po.ManufacturingOrder as ProductionOrder, -- 生产订单号
'' as PlannedOrder, -- 计划订单号
po.ManufacturingOrderType as OrderTypeCode, -- 订单类型代码
po.Material as HeaderMaterial, -- 订单抬头物料
mh.ProductDescription as HeaderDescription, -- 抬头物料描述
poc.ComponentMaterial as ComponentMaterial, -- 组件物料号
mc.ProductDescription as ComponentDesc, -- 组件物料描述
poc.ComponentRequirementDate as RequirementDate, -- 需求日期
poc.ComponentRequiredQuantity as RequiredQty, -- 需求
poc.ComponentWithdrawnQuantity as WithdrawnQty, -- 已领料
poc.ComponentRequiredQuantity - poc.ComponentWithdrawnQuantity
as NetRequirement, -- 净需求
ms.Stock as Stock, -- 库存
pr.PrQty as PRQuantity, -- PR数量
otw.OtQty as InTransit, -- 在途
case when ms.Stock >=
poc.ComponentRequiredQuantity - poc.ComponentWithdrawnQuantity
then '是' else '否' end as IsKitted -- 是否齐套
}
where
po.ManufacturingOrderType in ('GL01','GL02','GL03','GL04')
and po.OrderIsTechnicallyCompleted = false
and po.OrderIsDeleted = false
and po.OrderIsClosed = false
and po.OrderIsMarkedForDeletion = false
```
> **计划订单部分**:同一报表内通过 UNION 联合计划订单数据(订单类型='计划订单',无已领料,不参与MES过滤),来源为 I_PlannedOrder JOIN I_PlannedOrderComponent,库存/PR/在途聚合逻辑与生产订单部分一致。
#### 视图2:ZC_KITSCHECK_SUMMARY(汇总视图)
基于 ZC_KITSCHECK_DETAIL 的 UNION 结果(明细数据源)按 工厂 + 组件物料 聚合,作为同一 App 内"汇总"视图的数据源。
```cds
@AbapCatalog.sqlViewName: 'ZCKCHEKSUM'
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '齐套性检查汇总'
@OData.publish: true
define view ZC_KITSCHECK_SUMMARY as
select from ZC_KITSCHECK_DETAIL
{
Plant as Plant, -- 工厂
ComponentMaterial as ComponentMaterial, -- 组件物料
ComponentDesc as ComponentDesc, -- 物料描述
sum(NetRequirement) as TotalRequirement, -- 需求数量汇总
max(Stock) as Stock, -- 库存
case when max(Stock) >= sum(NetRequirement)
then 0 else sum(NetRequirement) - max(Stock) end as Shortage, -- 欠料
max(PRQuantity) as PRQuantity, -- PR数量
max(InTransit) as InTransit, -- 在途
case when max(Stock) >= sum(NetRequirement)
then '是' else '否' end as IsKitted -- 是否齐套
}
group by
Plant, ComponentMaterial, ComponentDesc
```
---
## 5. 业务逻辑
### 5.1 生产订单状态过滤
生产订单必须满足以下所有条件才纳入统计:
```
OrderIsTechnicallyCompleted = false -- 未技术性完成
OrderIsDeleted = false -- 未删除
OrderIsClosed = false -- 未关闭
OrderIsMarkedForDeletion = false -- 未标记删除
```
**注意**:此状态过滤逻辑与采购订单查询接口功能说明书一致。
### 5.2 计划订单状态过滤
```
计划订单未删除即生效(删除标记不为X)
```
### 5.3 订单类型过滤(生产订单)
```
ManufacturingOrderType IN ('GL01','GL02','GL03','GL04')
```
| 订单类型 | 代码 | 说明 |
|----------|------|------|
| 研发订单 | GL01 | 研发类生产订单 |
| SMT订单 | GL02 | SMT贴片订单 |
| 组装订单 | GL03 | 组装类订单 |
| 包装订单 | GL04 | 包装类订单 |
### 5.4 MES同步状态过滤
```
当查询条件"是否发送MES"勾选时:
仅显示 CFD_SAP_GUI_UI_FIELDS 中"是否发送MES"= true 的生产订单
```
**注意**:MES过滤仅应用于生产订单,计划订单不参与MES过滤。
### 5.5 库存口径
```
库存 = 非限制使用库存(UnrestrictedStock / MARD-LABST)
不包含:质检库存、冻结库存、在检库存
```
### 5.6 PR与在途口径
```
PR数量 = 全工厂该组件物料所有未删除采购申请的数量汇总
在途 = 全工厂该组件物料所有采购订单未收货数量汇总
明细界面每行的 PR数量/在途 = 该组件物料的全工厂汇总值(所有订单行显示相同值)
汇总界面的 PR数量/在途 = 该组件物料的全工厂汇总值
```
---
## 6. 技术实现
### 6.1 技术路线
```
Custom CDS View(数据模型,@OData.publish)
Custom Report / Fiori List Report(报表界面,明细+汇总视图切换)
```
- 基于 **Custom CDS Views** 创建 2 个 CDS 视图(明细 ZC_KITSCHECK_DETAIL、汇总 ZC_KITSCHECK_SUMMARY)
- 通过 **Custom UI / Custom Report** 应用生成一个 Fiori List Report,同一 App 内切换明细/汇总两个视图
- 查询条件(SKU、订单号、日期区间、工厂、是否发送MES)通过 Fiori UI **Filter Bar** 实现,无需 CDS 参数
- 导出功能由 Fiori 标准功能提供(导出 Excel)
### 6.2 开发对象清单
| 序号 | 对象类型 | 对象名称 | 说明 |
|------|----------|----------|------|
| 1 | Custom CDS View | ZC_KITSCHECK_DETAIL | 明细数据视图(@OData.publish) |
| 2 | Custom CDS View | ZC_KITSCHECK_SUMMARY | 汇总数据视图(@OData.publish) |
| 3 | Fiori List Report | 齐套性检查报表 | 明细+汇总视图切换 |
| 4 | 自定义字段 | ZZ_SEND_MES | 生产订单扩展字段"是否发送MES"(已在系统中存在) |
### 6.3 开发注意事项
- 使用 **Custom CDS Views** 应用创建 CDS 视图,勾选"OData.publish"发布 OData 服务
- 使用 **Custom UI / Custom Report** 应用创建 Fiori List Report
- 明细视图定义完成后,汇总视图直接基于明细视图聚合,复用库存/PR/在途子查询逻辑
- CDS 视图启用 DCL 权限检查(@AccessControl.authorizationCheck: #CHECK)
- "是否发送MES"通过 Custom Fields 挂在 I_ProductionOrder 上的扩展字段直接访问,不要 JOIN CFD_SAP_GUI_UI_FIELDS
- 同一 App 内明细/汇总切换:可在 Fiori List Report 中通过视图类型字段(OrderType 分类)或通过第二个页面/页签实现
### 6.4 Fiori 界面实现要点
| 界面要素 | 实现方式 |
|----------|----------|
| 查询条件 | Fiori Filter Bar 自动生成(映射 CDS 字段:Plant、ComponentMaterial、RequirementDate 等) |
| 明细/汇总切换 | 同一 App 内通过 Tab 或视图切换 |
| 是否齐套显示 | 明细视图 IsKitted 字段,汇总视图 IsKitted 字段 |
| 导出 | Fiori 标准导出 Excel |
| 数据加载 | 大数据量时 CDS 自动分页,Fiori 支持滚动加载 |
---
## 7. 界面布局
### 7.1 明细界面示例
```
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 工厂 订单类型 生产订单号 计划订单号 订单类型代码 订单抬头物料 物料描述 组件物料号 物料描述 需求日期 │
│ 1011 生产订单 10000011 - GL03 C XX A DD 20260630 │
│ 1011 计划订单 - 00000022 - D TT A DD 20260710 │
├────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 需求 已领料 库存 PR数量 在途 是否齐套 │
│ 100 100 300 400 200 是 │
│ 100 0 300 400 200 否 │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```
### 7.2 汇总界面示例
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 工厂 组件物料 物料描述 需求数量汇总 库存 欠料 PR数量 在途 是否齐套 │
│ 1011 A DD 200 300 0 400 200 是 │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 8. 测试用例
### 8.1 正向测试
| 用例编号 | 测试场景 | 测试数据 | 预期结果 |
|----------|----------|----------|----------|
| TC001 | 库存满足需求(生产订单) | 物料A需求200,已领料100,库存300 | 净需求100,是否齐套=是 |
| TC002 | 库存不足(生产订单) | 物料A需求500,已领料100,库存300 | 净需求400,是否齐套=否,欠料=100 |
| TC003 | 库存满足需求(计划订单) | 物料A需求300,库存300 | 是否齐套=是 |
| TC004 | 库存不足(计划订单) | 物料A需求500,库存300 | 是否齐套=否,欠料=200 |
### 8.2 状态过滤测试
| 用例编号 | 测试场景 | 测试数据 | 预期结果 |
|----------|----------|----------|----------|
| TC005 | TECO状态订单 | 生产订单状态=技术性完成 | 不纳入统计 |
| TC006 | 删除状态订单 | 生产订单状态=已删除 | 不纳入统计 |
| TC007 | 关闭状态订单 | 生产订单状态=已关闭 | 不纳入统计 |
| TC008 | 标记删除订单 | 生产订单状态=标记删除 | 不纳入统计 |
| TC009 | 正常生效订单 | 生产订单状态=正常 | 纳入统计 |
### 8.3 边界测试
| 用例编号 | 测试场景 | 测试数据 | 预期结果 |
|----------|----------|----------|----------|
| TC010 | 已领料等于需求 | 物料A需求100,已领料100,库存300 | 净需求0,是否齐套=是 |
| TC011 | 库存为0 | 物料A需求100,库存0 | 是否齐套=否,欠料=100 |
### 8.4 异常测试
| 用例编号 | 测试场景 | 测试数据 | 预期结果 |
|----------|----------|----------|----------|
| TC012 | 无订单数据 | 空结果集 | 显示空报表 |
| TC013 | 无效工厂 | 工厂9999 | 提示无数据 |
| TC014 | 仅计划订单 | 不勾选生产订单 | 仅显示计划订单数据 |
| TC015 | 仅生产订单 | 不勾选计划订单 | 仅显示生产订单数据 |
| TC016 | MES过滤 | 勾选是否发送MES | 仅显示已发送MES订单 |
---
## 9. 权限要求
| 权限对象 | 权限字段 | 权限值 | 说明 |
|----------|----------|--------|------|
| CDS角色(DCL) | P_WERKS | 1011 | 工厂权限 |
| Fiori目录 | 报表App | - | 报表访问权限 |
---
## 10. 待开发确认项
| 序号 | 待确认内容 | 说明 |
|------|-----------|------|
| 1 | PR在途是否包含"已收货"部分 | 当前口径为采购订单未收货数量,需确认 |
| 2 | 计划订单部分是否纳入MES过滤 | 当前MES过滤仅应用于生产订单 |
| 3 | 明细/汇总同一App的切换形式 | 当前为同一App内Tab/视图切换 |
| 4 | 是否发送MES扩展字段的技术名称 | 需确认生产订单自定义字段的实际技术名称(如ZZ_SEND_MES) |
---
## 11. 附录
### 11.1 字段映射表
| 界面字段 | CDS视图字段 | 数据来源 |
|----------|-------------|----------|
| 工厂 | Plant | I_ProductionOrder / I_PlannedOrder |
| 订单类型 | ManufacturingOrderType | I_ProductionOrder |
| 生产订单号 | ManufacturingOrder | I_ProductionOrder |
| 计划订单号 | PlannedOrder | I_PlannedOrder |
| 订单抬头物料 | Material | I_ProductionOrder / I_PlannedOrder |
| 组件物料号 | ComponentMaterial | I_ProductionOrderComponent / I_PlannedOrderComponent |
| 需求日期 | ComponentRequirementDate | I_ProductionOrderComponent / I_PlannedOrderComponent |
| 需求 | ComponentRequiredQuantity | I_ProductionOrderComponent / I_PlannedOrderComponent |
| 已领料数量 | ComponentWithdrawnQuantity | I_ProductionOrderComponent |
| 库存 | UnrestrictedStock | I_MaterialStock |
| PR数量 | 采购申请汇总 | I_PurchaseRequisitionItem |
| 在途 | 计划行未收货汇总 | I_PurchaseOrderScheduleLine |
| 是否发送MES | po.ZZ_SEND_MES(扩展字段) | I_ProductionOrder自定义扩展字段 |
### 11.2 参考文档
- SAP S/4HANA CLOUD标准报表:MD04(库存/需求清单)
- SAP S/4HANA CLOUD标准CDS视图:I_ProductionOrder、I_PlannedOrder 等
---
*文档结束*
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment