惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security Blog

博客园 - thanks

05. 搅拌站ERP系统 — 术语解析与技术备注 03. 搅拌站ERP系统 — 数据库表字段详解与示例数据 04. 搅拌站ERP系统 — 模块业务详解 02. 搅拌站ERP系统 — 核心业务流程 01. 搅拌站ERP系统 — 系统总览与架构 07-紧固件MES系统 — 中小企业实施部署指南 06-紧固件MES系统 — 术语与名词解析 05-紧固件MES系统 — 推荐技术架构与智能制造方案 04-紧固件MES系统 — 重构建议与待开发分析 02-紧固件MES系统 — 核心业务流程 01-紧固件MES系统 — 系统总览与架构 VsCode+DeepSeek的AI编程助手初体验 [大数据][机器学习]之Model Card(模型卡片)介绍 Bond——大数据时代的数据交换和存储格式 Spark中的那些坑... 为啥就业这么难——聊聊我在培训机构的所见所闻 微软外服工作札记③——窗口函数的介绍 微软外服工作札记②——聊聊微软的知识管理服务平台和一些编程风格 【非技术】试占12月10日后会发生什么 聊聊我在微软外服大数据分析部门的工作经历及一些个人见解 SAAS云平台搭建札记: (四) AntD For React使用react-router-dom路由接收不同参数页面不刷新的问题 [工作札记]03: 微软Winform窗体中设计上的Bug,会导致程序编译失败,影响范围:到最新的.net4.7.2都有 [工作札记]02: .Net Winform控件TreeView最简递归绑定方法 SAAS云平台搭建札记: (三) AntDesign + .Net Core WebAPI权限控制、动态菜单的生成 [工作札记]01: CS系统中分页控件的制作 【非技术】试占新型肺炎的情况与发展趋势 给培训学校讲解ORM框架的课件 SAAS云平台搭建札记: (二) Linux Ubutu下.Net Core整套运行环境的搭建 SAAS云平台搭建札记: (一) 浅论SAAS多租户自助云服务平台的产品、服务和订单 开源三维地球GIS引擎Cesium常用功能的开发 Asp.net管理信息系统中数据统计功能的实现 - thanks
03-紧固件MES系统 — 模块业务详解
thanks · 2026-05-08 · via 博客园 - thanks

紧固件MES系统 — 模块业务详解

本文档按模块逐一说明每个业务功能的数据库操作、关键字段、状态管理和业务规则。
供重构时作为每个功能点的实现参考。


一、通用单据操作模式

系统所有单据窗体遵循统一的 CRUD 模式:

1.1 保存流程(SaveDj)

1. 检查表头是否存在 → SELECT DjId FROM Tb{xxx} WHERE Djh=@Djh
2. 新增: INSERT Tb{xxx}(DjRq, Djh, ...) → 获取DjId
   更新: UPDATE Tb{xxx} SET ... WHERE DjId=@DjId
3. 将Grid数据写入##临时表
4. DELETE FROM Tb{xxx}Mx WHERE 不在临时表中的记录
5. UPDATE Tb{xxx}Mx SET ... FROM ##temp WHERE 匹配键相同
6. INSERT INTO Tb{xxx}Mx(...) FROM ##temp WHERE 不在Mx表中的记录
7. 若有货位明细: 同样处理Tb{xxx}MxHw

1.2 删除流程(DeleDj)

1. 清理关联标记(如 TbBzMx.TagRk=0)
2. DELETE FROM Tb{xxx}MxHw WHERE DjId=@id  -- 货位明细
3. DELETE FROM Tb{xxx}Mx WHERE DjId=@id    -- 明细
4. DELETE FROM Tb{xxx} WHERE DjId=@id      -- 表头

1.3 单据号生成

所有单据号通过 GetNewDjh("类型代码") 生成,类型代码如:Rk(入库)、Ck(出库)、CkTz(出库通知)等。

1.4 权限检查

  • 新增权限 / 修改权限 分别控制
  • 非管理员只能编辑/删除自己创建的单据

二、基础数据模块 (Tag=04)

2.1 产品管理

核心表: TbCp (产品主数据)

操作 说明
产品列表 按TbCpFl(产品分类)过滤
产品编辑 frmCpEdit / frmCpEditNew
关联数据 CpGx(产品-工序), CpMj(产品-模具), TbCpBom(产品BOM)
产品图片 OriImg字段(image类型)

TbCp 完整字段定义:

字段 类型 说明
CpId int PK 产品ID
CpBh varchar(50) 产品编号
CpMc varchar(500) 产品名称
CpXh varchar(500) 型号(如M6×20)
CpGg varchar(500) 规格
CpDj varchar(50) 等级(8.8级、10.9级等)
CpBmcl varchar(50) 表面处理(电镀锌、达克罗等)
CpBj varchar(50) 标记
CpKg float 千件重(kg) — 重量↔数量换算核心
QjPXs float 千件重系数
GcId int 关联钢材ID
GcBh varchar(50) 钢材编号
GcCz varchar(50) 钢材材质
GcZj varchar(50) 钢材直径
GcUse float 钢材用量
KgPItem float 每件重量(kg)
ItemPTree int 每棵树件数
TreePFurnace int 每炉棵树数
CavePMould int 每模穴数
MouldPBox int 每箱模数
Price float 单价
PriceKg float 每公斤价格
MjBh varchar(50) 模具编号
FlId int 分类ID
TagWg int 外购标记
Bzq int 保质期(天)
Cz/Bz/Zj/Cd/Yx/Cl/Jd/Yj nvarchar 材质/标准/直径/长度/牙型/材料/精度/硬度
State int 状态
OriImg image 产品图片

产品BOM(TbCpBom): 定义产品的材料构成关系(线材→坯料→半成品→成品)。

产品分类(TbCpFl): 树形结构,FlGrade表示层级。

📊 TbCp 示范数据:

| CpId
产品ID | CpBh
产品编号 | CpMc
产品名称 | CpXh
型号 | CpGg
规格 | CpDj
等级 | CpBmcl
表面处理 | CpKg
千件重(kg) | GcBh
钢材编号 | GcCz
钢材材质 | GcZj
钢材直径 | MjBh
模具编号 | FlBh
分类编号 | Cz
材质 | Bz
标准 |
|------|------|------|------|------|------|--------|------|------|------|------|------|------|----|----|----|
| 1122 | 101084 | 生产螺钉 | 58541121 | M145X0.5 | 5.8 | 淬火+热浸镀锌52μm | 5 | GHGH524 | GH5*GH24 | Φ24 | 555 | 110004 | 不锈钢/钢 | DIN975 |
| 1121 | 101083 | 20210112 | 20210112 | 44028X0.375 | A2-70 | 美加力(8um-720H) | 12 | 20210112 | 20210112 | Φ112 | 20210112 | 110001 | 哈氏合金 | GB32.1 |
| 1120 | 101082 | 1234 | M96556 | M023 P23 | 3 | 镀锌 | 2 | 四球四抽 | 60Si3Mn16 | Φ3.3 | hhh | 110001-螺栓 | (null) | (null) |

说明:CpKg=千件重(kg)——重量↔数量换算核心。CpDj=产品等级(5.8/A2-70等)。
GcBh/GcCz/GcZj=关联钢材信息,MjBh=关联模具。Cz=材质,Bz=标准。
CpBmcl示例:“淬火+热浸镀锌52μm”“美加力(8um-720H)”“镀锌”——记录表面处理工艺

2.2 工序管理

核心表: TbGx(9字段,96条记录)

字段 类型 说明
GxId int PK 工序ID
GxBh varchar(50) 工序编号(规则:CjBh+序号,如10101)
GxMc varchar(50) 工序名称
CjId int 所属车间ID
CjBh varchar(50) 车间编号(冗余)
GxGrade int 工序级别(0=一级)
GxParent int 父级工序ID
Memo varchar(50) 备注
TagMonitor int 监控标记(1=需要数据采集监控)

📊 TbGx 示范数据:

GxId
工序ID
GxBh
工序编号
GxMc
工序名称
CjId
车间ID
CjBh
车间编号
TagMonitor
监控
1 10101 冷镦 1 101 1
2 10102 搓丝 1 101 1
3 10201 热处理 2 102 1
4 10301 车加工 3 103 0
5 10401 镀锌 4 104 1
6 10402 达克罗 4 104 1
7 10403 磷化+上油 4 104 1
8 10501 筛选 5 105 1
9 10502 包装 5 105 1

说明:标准紧固件工序链:冷镦→搓丝→热处理→车加工→电镀/表面处理→筛选→包装。GxBh编号规则=CjBh+序号

2.3 工艺路线

核心表: TbGyLx(路线头) + TbGyLxMx(路线明细)

字段 说明
GyLxId 路线ID
CpId 产品ID
GxOrder 工序顺序
GxId/GxBh/GxMc 工序信息

业务规则: 制卡时通过 SELECT FROM TbGyLxMx WHERE CpId=@CpId ORDER BY GxOrder 生成工序列表。

2.4 控制计划

核心表: TbCpControl(头) + TbCpControlMx(明细) + TbCpControlMxGyk(工艺卡)

定义每个产品在每道工序的质量控制要求。

2.5 检验公式/模板

用途
TbFkBgGs/TbFkBgGsMx 过程检验模板
TbFkBgGsA/TbFkBgGsAMx 首检(A)模板
TbFkBgGsB/TbFkBgGsBMx 巡检(B)模板
TbFkCpBgGs/TbFkCpBgGsMx 成品检验模板
TbZlBgGs 质量报告模板

模板定义检验项目(JyXmId)、技术要求(JsYq)、检验方法(JyFf),实际检验时从模板复制到报告表。

2.6 部门管理 (frmBm)

核心表: TbBm(3字段,39条记录)

字段 类型 说明
BmId int PK 部门ID
BmBh varchar(50) 部门编号
BmMc varchar(50) 部门名称

业务规则: 删除时检查TbFkUser中是否有关联用户,有则不可删除。

📊 示范数据:

BmId BmBh BmMc
1 002 总经理办公室
2 002 市场营销部
3 045 生产部
4 004 技术部
5 001 采购

2.7 车间管理 (frmCj)

核心表: TbCj(11字段,45条记录)

字段 类型 说明
CjId int PK 车间ID
CjBh varchar(50) 车间编号(如101/102,与GxBh前缀对应)
CjMc varchar(50) 车间名称
Lb int 类别
Fl int 分类
CjOrder int 排序序号(决定工序流转先后)
CjLabour float 车间人数
CjRun bit 是否运行(False=停用)
CjGzLhEnd bit 工作令号在本车间结束标记
TagWx bit 是否外协车间
TagPc bit 是否参与排产

📊 TbCj 示范数据(运行中的主要车间):

CjId CjBh CjMc CjOrder
排序
CjLabour
人数
CjGzLhEnd TagWx TagPc
1 101 冷镦车间 1 5 False False False
6 106 搓丝车间 2 1 True False False
2 102 热处理车间 3 5 False False False
8 107 机加工车间 4 3 False False False
4 104 表面处理 5 3 False False False
5 105 包装车间 6 3 False True True
30 124 外协车间 21 2 False True True

CjOrder决定车间在生产流程中的顺序。TagWx=True的车间为外协车间(如外协车间/表面处理车间)。CjGzLhEnd=True表示工作令号在该车间完成后结束

2.8 供应商管理 (frmGys)

核心表: TbGys(17字段,94条记录)+ TbGysFl(6字段,24条记录,树形三级)

TbGys 字段定义:

字段 类型 说明
GysId int PK 供应商ID
GysBh varchar(50) 供应商编号(规则:700xxx)
GysMc varchar(500) 供应商名称
GysJc varchar(50) 供应商简称
Addr/Rel/Tel/Fax/Zip varchar(50) 地址/联系人/电话/传真/邮编
Bank/Account/Tax varchar(50) 开户行/账号/税号
Memo varchar(500) 备注
FlId int 分类ID(关联TbGysFl)
FlBh varchar(50) 分类编号(冗余)
GysLabour int 供应商人数
TagPc bit 是否参与排产

TbGysFl 分类树示例:

├── 原材料(FlId=1, TagWx=True)
│   ├── 碳钢类(FlId=6)
│   └── 不锈钢(FlId=7)
├── 外加工(FlId=3, TagWx=True)
│   ├── 车加工(FlId=4)
│   ├── 热处理(FlId=5)
│   ├── 电镀(FlId=10)
│   ├── 镀锌(FlId=35)
│   │   ├── 镀白锌(FlId=36, FlGrade=2)
│   │   └── 镀黑锌(FlId=37, FlGrade=2)
│   ├── 表面处理(FlId=33)
│   └── 外协车间(FlId=34)
├── 辅料(FlId=13)
├── 模具(FlId=14, TagWx=True)
└── 设备(FlId=17)

TagWx=True表示该分类的供应商参与外协业务

📊 TbGys 示范数据:

GysId GysBh GysMc GysJc FlBh
2 700002 ****有限公司A 供应商A 711003-碳钢类
3 700003 ****有限公司B 供应商B 711003-碳钢类
6 700006 ****有限公司C 供应商C 711007-涂胶

2.9 操作工管理 (frmCzg)

核心表: TbCzg(16字段,51条记录)+ TbCzgMx(7字段,71条记录)

TbCzg 操作工主表:

字段 类型 说明
CzgId int PK 操作工ID
CzgBh varchar(50) 操作工编号(规则:610xxx)
CzgMc varchar(50) 姓名
Pwd nvarchar(50) 密码(看板登录用)
GwId int 岗位ID(关联TbGw)
Gxid int 工序ID(关联TbGx)
CjId int 车间ID(关联TbCj)
IsShifted int 是否有代班
Sid/mobile int/nvarchar 扩展ID/手机
State int 状态
CreateTime datetime 创建时间

TbCzgMx 操作工-设备关联(一人多机):

字段 类型 说明
CzgMxId int PK 关联ID
CzgId int 操作工ID
CzgBh/CzgMc varchar 编号/姓名(冗余)
JtId int 机台ID(关联TbJt)
JtBh/JtMc varchar 机台编号/名称(冗余)

TbCzgShift 代班记录(10字段):

字段 类型 说明
Id int PK 记录ID
Cid int 原操作工ID
ShiftedCid int 代班操作工ID
ShiftedName nvarchar(50) 代班人姓名
StartDate/EndDate datetime 代班起止时间
GWId/GxId int 岗位/工序

📊 TbCzg 示范数据:

CzgId CzgBh CzgMc GwId Gxid CjId
3 610001 张某某 1 1 1
4 610002 李某某 2 3 2
5 610003 王某某 22 12 4

操作工绑定岗位(GwId)→工序(Gxid)→车间(CjId),通过TbCzgMx关联可操作的机台

2.10 岗位管理 (frmGwList)

核心表: TbGw(8字段,43条记录)+ TbGwJt(5字段,77条记录)

TbGw 岗位表:

字段 类型 说明
id int PK 岗位ID
NO nvarchar(50) 岗位编号
Name nvarchar(50) 岗位名称
GxId int 工序ID(关联TbGx)
CjId int 车间ID(关联TbCj)
State int 状态
Bak nvarchar(50) 备注
CreateTime datetime 创建时间

TbGwJt 岗位-机台关联(一岗多机):

字段 类型 说明
id int PK 关联ID
GwId int 岗位ID
JtId int 机台ID(关联TbJt)
State int 状态

📊 TbGw 示范数据:

id NO Name GxId CjId
1 LD001 冷镦01 1 1
3 RCL001 热处理001 3 2
4 SX001 筛选001 8 5
5 BZ001 包装001 9 5

层级关系:车间(TbCj) → 工序(TbGx) → 岗位(TbGw) → 机台(TbJt),操作工(TbCzg)绑定岗位

2.11 物料管理 (frmWl)

核心表: TbWl(20字段,197条记录)+ TbWlFl(6字段,9条记录)

TbWl 物料主表(含包材、辅料等非钢材物料):

字段 类型 说明
WlId int PK 物料ID
WlBh varchar(50) 物料编号(规则:800xxx)
WlMc varchar(500) 物料名称
WlXh varchar(500) 型号
WlGg varchar(500) 规格
WlDj varchar(50) 等级
WlJl varchar(50) 计量单位
WlCz varchar(50) 材质
KgPItem~MouldPBox float/int 包装换算参数(千克/件、件/棵等)
Price/PriceKg float 单价/每公斤价格
MjBh varchar(50) 模具编号
FlId int 分类ID(关联TbWlFl)
FlBh varchar(50) 分类编号(冗余)
AqKc float 安全库存
OriImg image 物料图片

TbWlFl 物料分类:

FlId FlBh FlMc TagFl
1 810001 原材料 True
4 810002 外购件 False
5 810003 包装材料 False
6 810004 五金 False
7 810005 办公用品 False
8 810006 设备 False

TagFl=True的分类为需要追溯的物料类型。物料有独立的仓库流程:TbWlSq(申请)→TbWlCg(采购)→TbWlRk(入库)→TbWlCk(出库)→TbWlQc(盘库)

📊 TbWl 示范数据:

WlId WlBh WlMc WlXh WlGg FlBh
9 800001 二球二抽 40Cr Φ5.78 810001-原材料
10 800002 二球二抽 40Cr Φ7.0 810001-原材料
17 800009 二球二抽 SCM435 Φ5.0 810001-原材料

2.12 产品辅助数据

TbCpFl 产品分类(4字段,137条记录,树形):

FlId FlBh FlMc pid
1 110001 螺栓 0
3 110003 螺母 0
4 110004 螺钉 0
7 110007 垫圈 0
9 110009 铆钉 0

pid=0为顶级分类,下级通过pid关联父级

TbCpHw 成品货位(3字段,17条记录):

HwId Hw TagClose
1 1-1-1 0
4 1-2-0 0
30 2-6-9 0

货位编号格式:区-排-层(如1-2-3表示1区2排3层)

TbCpQw 成品区位(3字段,8条记录):

QwId Qw TagClose
1 A-1 0
2 A-2 0
7 C-1 0

TbCpTh 桶号(3字段,6条记录):

ThId Th TagClose
1 1-1 0
4 2-1 0

2.13 废品类型 (TbDiscard)

核心表: TbDiscard(8字段,当前0条记录,由代码动态使用)

字段 类型 说明
DiscardId int PK 废品类型ID
DiscardBh varchar(50) 类型编号
DiscardMc varchar(500) 类型名称
CjId int 所属车间(按车间定义废品类型)
CjBh varchar(50) 车间编号(冗余)
DiscardGrade int 分类层级
DiscardParent int 父级ID
Memo varchar(50) 备注

用途:在frmCjQualify(车间质量统计)和frmCjYc(车间移出)中,按车间加载废品类型作为动态列,统计各类废品数量

2.14 检验项目 (TbJyXm)

核心表: TbJyXm(3字段,636条记录)

字段 类型 说明
JyXmId int PK 检验项目ID
JyXmBh varchar(50) 项目编号
JyXmMc varchar(500) 项目名称

📊 示范数据:

JyXmId JyXmBh JyXmMc
2 9002 螺纹直径
4 9004 头部高度
5 9005 台阶高度
10 9010 表面硬度(洛氏)
13 9013 渗碳层

被TbFkBgGs(检验模板)和TbFkBg(检验报告)引用,定义检验的具体量测项目

2.15 系统配置与辅助表

TbDefine 字段标签定义(8字段,1条记录):

MjBh CpBh CpMc CpXh CpGg CpDj Sl Zl
标签 系统编码 产品名称 型号 规格 等级 数量 重量

全局唯一记录,定义界面中各字段的显示名称(可自定义列标题)

TbModule 模块授权(5字段,198条记录):

字段 类型 说明
id int PK 模块ID
MkBh char(4) 模块编号(匹配菜单权限Tag)
MkMc nvarchar(50) 模块名称
TagUsed int 是否启用(1=启用)
ExpDate date 授权到期日

📊 示范数据:

MkBh MkMc TagUsed
0101 部门 1
0102 车间 1
0103 管理人员 1
0104 机台 1
0105 操作工 1

TbEsSettings 电子看板设置(3字段,29条记录):

字段 类型 说明
Id int PK 设置ID
Name nvarchar(50) 设置项名称
Val nvarchar(max) 设置值

存储看板Logo(Base64图片)、标题、刷新间隔(30~1800秒)、通知文字、默认工序等配置

TbPrintFormat/TbPrintFormatMx 打印模板(头16条 + 明细25条):

字段 类型 说明
DjId int PK 模板ID
PrintBh varchar(50) 模板编号
PrintMc varchar(500) 模板名称
FormatFile image 模板文件(FastReport格式)
FormatDefault bit 是否默认模板

📊 已定义的打印模板:

PrintBh PrintMc
Ck 出库单
Rk 入库单
Fk 标识卡
FkCpBg 成品检验报告
ZlBg 理化报告

TbGzLhFk 工作令-分卡映射(5字段,3788条记录):

字段 类型 说明
ID int PK 记录ID
GZLH varchar(50) 工作令号
FKBh varchar(50) 分卡编号(工号)
TagWc int 完成标记
FkNum int 分卡序号

一个工作令号可对应多张分卡(生产批次拆分),如 WO20210100005→001/002/003

TbAddFk 追加制卡(10字段,665条记录):

字段 类型 说明
Id int PK 记录ID
GzLh varchar(50) 工作令号
Sl float 追加数量
FkCount int 追加卡数
GysIdRcl/GysMcRcl int/varchar 热处理供应商
GysIdBmcl/GysMcBmcl int/varchar 表面处理供应商
BmclYq/RclYq varchar 处理要求

当排产量不足需要追加时使用,记录追加的数量和指定的供应商

TbVersion 版本管理(3字段,1条记录):

字段 说明
ProgVersion (bigint) 程序版本号
UpdateFile (image) 更新包文件

客户端启动时检查版本,自动下载更新

📊 基础数据关系总览:

TbBm(部门) ← TbFkUser(管理用户)
                    ↓
TbCj(车间) → TbGx(工序) → TbGw(岗位) → TbGwJt → TbJt(机台)
    ↓              ↓           ↓
TbCzg(操作工) ← TbCzgMx(操作工-机台)
    ↓
TbCzgShift(代班)

TbCpFl(产品分类) → TbCp(产品) ← TbGyLxMx(工艺路线明细)
                       ↓                    ↑
                  TbCpBom(BOM)         TbGyLx(工艺路线)
                       ↓
TbKhFl(客户分类) → TbKh(客户) ← TbCpCustomer(产品-客户)
TbGysFl(供应商分类) → TbGys(供应商)
TbWlFl(物料分类) → TbWl(物料)

TbJyXm(检验项目) → TbFkBgGs*(检验模板) → TbFkBg*(检验报告)
TbDiscard(废品类型) → TbCjYcMxDiscard(废品记录)

三、生产管理模块 (Tag=02)

3.1 钢材申请 (frmGcSq)

表操作: TbGcSq(头) + TbGcSqMx(明细)

操作 SQL 关键字段
保存头 INSERT/UPDATE TbGcSq DjRq, Djh, WlFlId, MakerId, Memo
保存明细 INSERT TbGcSqMx GcId, GcBh, GysIdZg, Zl, Price, Je, XsDdMxId
删除 DELETE TbGcSqMx → DELETE TbGcSq 级联删除

业务规则:

  • 从钢材需求导入,按 WlId, GcBh, GcMc, GcXh, GcGg, GysIdZg 汇总
  • Je = Zl × Price 自动计算
  • ZlT(吨)作为显示计算字段存在于临时表中,实际TbGcSqMx表无此字段
  • 复合匹配键:GcId + XsDdMxId

📊 TbGcSq/TbGcSqMx 示范数据: 见02文档第六章钢材管理示范数据。

3.2 钢材出库 (frmGcCk)

表操作: TbGcCk(头) + TbGcCkMx(明细) + TbGcCkMxHw(货位) + TbGcKcMx(库存)

操作 说明
保存 同时写入明细和货位,并更新库存表
库存更新 ①置零TbGcKcMx ②新增未跟踪记录 ③更新货位
删除 级联删除 MxHw → Mx → 主表

关键追溯字段: Lh(炉号), Ph(批号), InBh(内部编号), GcRkMxId(关联入库)

双供应商: GysIdZg(轧钢厂) + GysIdGz(改制厂)

📊 TbGcCk/TbGcCkMx 示范数据: 见02文档第六章钢材管理示范数据。

3.3 物料申请 (frmWlSq)

表操作: TbWlSq(头) + TbWlSQMx(明细)

结构与钢材申请类似,关联TbWl(物料主数据)和TbWlFl(物料分类)。

3.4 外购件管理

窗体 说明
frmWgSq TbFkWg/TbFkWgMx 外购申请
frmWgCg TbFkWgMxWl 外购采购
frmWgRk 外购入库
frmWgCk 外购出库
frmWgSfc 外购收发存

四、计划管理模块 (Tag=05)

4.1 排产计划 (frmPc)

表操作: TbPc(头) + TbPcMx(明细) + TbPcMxCj(车间分配) + TbPcMxJt(机台分配)

层级 说明
月度排产 TbPc DjRq(排产日期)
排产明细 TbPcMx 产品+数量+交期 → 生成GzLh(工作令号)
车间分配 TbPcMxCj 明细分配到车间
机台分配 TbPcMxJt 车间细化到机台

关键状态: TbPcMx.TagClose (关闭标记,=1时红色显示)

4.2 制卡/分卡 (frmGzLhFk)

详见02文档"制卡流程"章节。这是连接计划与执行的核心操作。

读取: TbPcMx, TbCp, TbKh, TbGyLxMx, TbCj, TbPcMxJt
写入(5表): TbGzLhFk, TbFkPc, TbFkGx, TbFkGy, TbAddFk
删除(6表级联): TbGxBar, TbGxBarH, TbGzLhFk, TbFkPc, TbFkGx, TbFkGy

4.3 工号管理/排产管理 (frmScManage)

综合管理排产单(TbFkPc)和工艺流转(TbFKGY)状态。


五、生产执行模块 (Tag=06)

5.1 工序监控 (frmCpWork / frmCpWorkGx)

只读。 查询TbFKGY实时状态,展示各工序在制品情况。

5.2 流转卡跟踪 (frmGxBar)

表操作(只读): TbGxBar(在产) + TbGxBarH(历史)

关键查询:

SELECT A.GxBarId, C.GxMc, A.GzLh, A.FkBh, A.MjBh, A.CpBh, A.CpMc,
    A.Sl, A.Zl,
    CASE WHEN A.TagWg=0 THEN '待'+C.GxMc ELSE C.GxMc+'完成' END,
    CASE WHEN A.TagJy=0 THEN '待检验' ELSE '已检' END
FROM TbGxBar A
LEFT JOIN TbCp B ON A.cpId=B.cpId
LEFT JOIN TbGx C ON A.GxId=C.GxId
LEFT JOIN TbFkPc D ON A.FkBh=D.FkBh
WHERE LogRq BETWEEN @start AND @end

筛选维度: 车间、工序、日期范围、FkBh、产品名称/型号/规格/等级/表面、批号、客户

临时计算表: 创建 ##TbCpWork##TbCjWx##TbCpWorkCalcA/B/X 用于复杂生产统计,窗体关闭时DROP。

5.3 在制品管理

窗体 说明
frmCpTh TbCpTh 桶号管理(在制品物理位置)
frmCpQw TbCpQw 区位管理(车间区域划分)

5.4 返工与报废

操作 说明
返工 TbFg/TbFgMx + TbFkReworkGy 定义返工路线,回到指定工序
返工标注 TbFgBz/TbFgBzMx 返工包装标注
报废 TbBf/TbBfMx 报废处理

六、质量管理模块 (Tag=07)

6.1 检验报告管理

入口: frmListJy (检验列表) → 选择类型 → 打开具体检验表单

检验模板选择:

SELECT GsId, GsMc, MjBh, CpId, CpXh, CpMc FROM TbFkBgGs
WHERE MjBh LIKE '%{search}%' ORDER BY GsBh

6.2 质量报告/试验中心

入口: frmListZlBg → 按分类(TbZlBgFl)选择 → 选择模板(TbZlBgGs) → 打开frmZlBg

支持8类试验: 拉力、材质、强度、材料、扭矩、摩擦系数、膜厚、盐雾

每种试验使用相同的TbZlBg/TbZlBgMx表结构,通过FlId区分类别。

6.3 SPC控制

frmSpcFace/frmSpc — 统计过程控制分析,利用积累的Data1~8检验数据计算CPK。

6.4 品质改善 (frmZl)

表操作: TbZl(头) + TbZlMx(明细)

记录品质问题、原因分析、纠正措施。


七、外协管理模块 (Tag=08)

7.1 外协工序定义 (frmWxGx)

表: TbWxGx — 定义哪些工序可外协

7.2 外协发出 (frmWxCh)

表操作: TbWxCh(头) + TbWxChMx(明细)

字段 说明
GysId 外协供应商ID(TbGysFl.TagWx=1筛选)
strGxId/strGxMc 外协工序(多选)
JgNr 加工内容(自动填充上次记录)
RclYq 热处理要求
BmclYq 表面处理要求
Ph 批号
JhRq 交货日期
TagRework 返工外协标记

自动计算: Sl = Zl / CpKg(重量→数量换算)

📊 TbWxCh/TbWxChMx 示范数据:

DjId
单据ID
Djh
单据号
DjRq
日期
GysId
供应商ID
TagRework
返工标记
177 WC20210112002 2021-01-12 97 False
WxChMxId
发出明细ID
CpBh
产品编号
CpId
产品ID
Zl
重量(kg)
Sl
数量
Price
单价
Je
金额
strGxMc
工序名称
XsDdMxId
订单明细ID
239 101079 1117 15 200 100 20000 表面处理004 2727

说明:strGxMc记录外协加工工序,XsDdMxId追溯到原始订单

7.3 外协收货 (frmWxRk)

表操作: TbWxRk(头) + TbWxRkMx(明细)

操作 说明
数据来源 从TbWxChMx(发出明细)或TbXsDdMx(订单明细)导入
复合匹配键 CpId + XsDdMxId + Memo + WxRkMxId
追溯 WxChMxId → 关联发出明细

7.4 外协损耗 (frmWxLoss)

表操作: TbWxLoss(头) + TbWxLossMx(明细)

通过CkMxId关联到出库/发出明细。

7.5 外协结算 (frmWxJs)

表操作: TbWxJs(头) + TbWxJsMx(明细)

与收货的区别 说明
无车间(CjId) 结算不跟踪车间
无Ph/WxChMxId 不需要批号和发出关联
Price/Je可见 结算是财务操作,显示金额

数据来源: frmSeleDjPreJs(结算前单据选择)计算已结算重量(JcZl)和数量(JcSl)

7.6 外协收发存 (frmWxSfc)

汇总统计:外协发出 / 入库 / 在途 / 损耗


八、成品仓库模块 (Tag=09)

8.1 成品入库 (frmRk)

表操作: TbRk(头) + TbRkMx(明细) + TbRkMxHw(货位)

关键字段 说明
GzLh 工作令号(批次追溯)
MjBh 模具编号
QjPXs 千件/箱
Xs 箱数
Sl 千件数
Zl 重量(kg)
Odd 零头
Tph 托盘号(关联TbBzMx包装)
Bzq 保质期(紧固件模式自动计算)

入库校验: 明细合计数量 = 货位合计数量

包装关联: 入库后 TbBzMx.TagRk = 1

📊 TbRk/TbRkMx/TbRkMxHw 示范数据: 见02文档第九章成品仓库示范数据。

8.2 成品出库 (frmCk)

表操作: TbCk(头) + TbCkMx(明细) + TbCkMxHw(货位)

关键字段 说明
KhId 客户ID
TagCk 出库类型标记
ChQr 出货确认bit
Ddh 订单号
Tph 托盘号
CkTzMxId 关联出库通知
Je/BigJe 金额/大写金额

负库存检查: 期初(QcMx) + 入库(RkMx) - 出库(CkMx) + 退货(ThMx) - 返工(FgBzMx) - 本次 ≥ 0

包装清理: 删除出库单时 TbBzMx.TagCk = 0

8.3 发货通知 (frmCkTz)

表操作: TbCkTz(头) + TbCkTzMx(明细)

包装自动关联(标准模式):

UPDATE TbBzMx SET CkTzDjh, CkTzMxId
WHERE XsDdMxId匹配 AND CkTzDjh为空

删除时清理: 只清理 TagCk=0(未出库)的包装关联

8.4 包装管理 (frmBz — 主数据维护)

表操作: TbBz(包装规格) + TbBzSele(参数预设) + TbBzBom(包装BOM,代码中使用但当前数据库未建表)

包装参数(按客户×产品):

参数 含义 自动计算
QjPD 千件/盒
QjPXs 千件/箱
XsPT 箱/托盘
QjPT 千件/托盘 = QjPXs × XsPT
KgPD 公斤/盒
KgPXs 公斤/箱
KgPT 公斤/托盘 = KgPXs × XsPT
DPXs 盒/箱

包装BOM自动数量:

  • TagFl=6(底盘): Sl = DPXs × XsPT
  • TagFl=7(箱): Sl = XsPT
  • TagFl=8(其他包材): 手动

8.5 退货/盘库/货位

窗体 说明
frmTh TbTh/TbThMx/TbThMxHw 成品退货(增加库存)
frmQc TbQc/TbQcMx 成品盘库/期初
frmHwKc TbKcMxHw 按货位查看库存
frmHwModiList TbHwModi 货位调整/移位记录
frmCpHw TbCpHw 货位基础数据维护
frmCpYq TbRkMx.Bzq 保质期到期预警
frmSfc 收发存汇总统计

九、模具仓库模块 (Tag=10)

9.1 模具基础数据

窗体 说明
frmMjDj TbMjTc 模具等级定义
frmMjTc TbMjTc/TbMjTcMx 模具套件管理
frmMjHwSetting TbMjHwSetting 货位设置(TagClose=0为可用)

9.2 模具入库

步骤 写入字段
入库通知 TbMjRkTz 到货通知
入库登记 TbMjRk 正式入库
外购入库 TbMjWgRkTz → TbMjWgRk 外购模具入库
履历记录 TbMjLlRk RkLx, JyRy(检验人), JyBg(报告), JyJl(结论)

9.3 模具领用/归还

详见02文档第七章。关键:4表联动事务操作。

库存公式:

  • 领用: TbMjHw.Sl -= qty, TbMjKc.Sl = -qty
  • 归还: TbMjHw.Sl += qty, TbMjKc.Sl = +qty, TbMjCode.UsedTimes += ScSl

📊 TbMjLy/TbMjGh/TbMjHw/TbMjKc/TbMjCode 示范数据: 见02文档第七章模具管理示范数据。

9.4 模具报废/盘存

操作 履历表 关键字段
报废 TbMjBf/TbMjBfMx TbMjLlBf BfRq, BfYy(原因), JsYj(技术意见), ZlYj(质量意见)
盘存 TbMjPc/TbMjPcMx 定期盘点
退货 frmMjTh 模具退供应商

9.5 模具履历/统计

窗体 说明
frmMjLlc 模具全生命周期履历查询(TbMjLlRk/Use/Wx/Bf)
frmMjSfSele 模具库存查询(TbMjKc)
frmMjSfA 模具成本统计
frmMjBs 模具综合报表

十、设备管理模块 (Tag=11)

10.1 设备台账 (frmJt)

表: TbJt (30字段) — 详见02文档十.1节

附件管理: TbJtFile(FileName, FileType, Content varbinary, UploadDate)

产能管理(按产品): TbJtCn(JtId, CpId, CnPH每小时产能, CnPD每天产能)

10.2 保养管理

说明
TbJtByJh 保养计划:Byjb(级别), Xhfs(循环方式), Jg(间隔), Scby/Xcby(上/下次), Byxm(项目), Bybz(标准), Gzms(方式)
TbJtBy 保养记录:关联JtByJhId, Byzt(状态), JJd(紧急度), Kssj/Wcsj(开始/完成), Byys(用时天), Byfy(费用), Bygcjl(过程)
TbJtByBj 保养备件消耗:BjId, Dj(单价), Sl(数量), Zj(总价)

10.3 维修管理

说明
TbJtWx 维修记录:Wxzt(状态), JJd(紧急度), Kssj/Wcsj, Wxys(用时天), Wxfy(费用), Wxgcjl(过程)
TbJtWxBj 维修备件消耗:BjId, Dj, Sl, Zj

📊 TbJt/TbJtBy/TbJtWx 示范数据: 见02文档第十章设备管理示范数据。

10.4 备件字典

字段 说明
TbJtBj BjBh, BjMc, BjGg, Jldw, Dqkc, Zxkc, Dj, JjBj 保养备件(含当前/最小库存、是否易耗)
TbJtGzBj 同上 故障维修备件(结构同上)

十一、追溯管理模块 (Tag=12)

11.1 钢材追溯 (frmZsGc)

输入: 钢材批号/炉号
路径: TbGcRkMx(钢材入库) → TbFkPc(排产单) → TbFKGY(工序) → 产品 → 客户

11.2 产品追溯 (frmZsCp)

输入: 产品编号/工作令号
路径: TbFkPc → TbFKGY → TbFkBg*(检验) → TbRk(入库) → TbCk(出库)

11.3 条码追溯 (frmZsTm / frmZsBarcode)

输入: 产品条码/扫描
路径: TbKcMxHw(货位) → TbBarcode → TbRkMx(入库) → TbFkPc(排产)


十二、电子看板模块 (Tag=13)

窗体 功能 数据来源
frmESSc 生产看板 TbFKGY在产数据
frmESPz 排产看板 TbFkPc/TbPcMx
frmEsSb 设备看板 TbJt状态
frmESCP 产品看板 TbCp + 生产数据
frmESMj 模具看板 TbMj + 库存/使用数据
frmESSettings 看板设置 配置参数

十三、销售管理模块 (Tag=03)

13.1 模块概述

销售管理是整个MES流程的起点,负责管理客户、销售订单及合同,生成的 XsDdMxId 是全链路追溯的核心起点。

涉及窗体:

窗体 功能 主要表
frmXsDd 销售订单录入/编辑 TbXsDd + TbXsDdMx
frmXsDdMxClose 订单明细关闭 UPDATE TbXsDdMx.TagClose
frmXsYc 出货报检 出货前质量报检
frmKh 客户主数据管理 TbKh
frmKhFl 客户分类管理 TbKhFl
frmKhEdit 客户新增/编辑 TbKh
frmCkTz 出库通知 TbCkTz/TbCkTzMx(详见八.3)

13.2 客户管理

TbKh 客户主表(10字段,60条记录)

字段 类型 说明
KhId int PK 客户ID(自增)
KhBh varchar(50) 客户编号(规则:300xxx)
KhMc varchar(500) 客户名称(全称)
KhJc varchar(50) 客户简称(用于显示和冗余)
Addr varchar(500) 地址
Rel varchar(50) 联系人
Tel varchar(50) 电话
Fax varchar(50) 传真
Zip varchar(50) 邮编
Bank varchar(50) 开户行
Account varchar(50) 银行账号
Tax varchar(50) 税号
FlId int 分类ID(关联TbKhFl)
FlBh varchar(50) 分类编号(冗余)

TbKhFl 客户分类表(5字段,树形两级)

字段 类型 说明
FlId int PK 分类ID
FlBh varchar(50) 分类编号(310xxx=一级, 311xxx=二级)
FlMc varchar(50) 分类名称(按地区分类:江苏、上海、苏州…)
FlGrade int 层级(0=一级省份, 1=二级城市)
FlParent int 父级FlId(一级为0)

📊 TbKhFl 分类树示例:

├── 江苏(FlId=1)
│   ├── 无锡(FlId=7)
│   ├── 常州(FlId=32)
│   └── 上海(FlId=33)
├── 上海(FlId=3)
│   ├── 客户X(FlId=8)
│   └── 客户Y(FlId=34)
├── 苏州(FlId=4)
│   ├── 工业园区(FlId=6)
│   ├── 昆山(FlId=9)
│   └── 常熟(FlId=15)
└── 韩国(FlId=30) / 美国(FlId=37)

TbCpCustomer 产品-客户关联表(5字段,24条记录)

字段 类型 说明
id int PK 自增ID
Cid int 客户ID(关联TbKh.KhId)
CpId int 产品ID(关联TbCp.CpId)
State int 状态(1=有效)
CreateTime datetime 创建时间

用途:记录哪些产品属于哪个客户,在产品编辑(frmCpEditNew)中维护。用于按客户筛选产品。

📊 TbKh 客户示范数据:

KhId
客户ID
KhBh
客户编号
KhMc
客户名称
KhJc
简称
FlId
分类
1 300001 ****有限公司A 客户A
2 300002 ****有限公司B 客户B
59
63

13.3 销售订单

TbXsDd 订单头表(10字段,882条记录)

字段 类型 说明
DjId int PK 单据ID(自增)
Djh varchar(50) 单据号(规则:XD+yyyyMMdd+序号,如XD20210112004)
DjRq datetime 单据日期
Hth varchar(50) 合同号(客户合同/协议编号)
KhDdh varchar(50) 客户订单号(客户方编号)
KhId int 客户ID(关联TbKh.KhId)
KhBh varchar(50) 客户编号(冗余)
CpFlId int 产品分类ID
MakerId int 制单人ID(关联TbFkUser.UserId)
Memo varchar(50) 备注

代码中INSERT还含:TagDd(订单类型)、YwyId/YwyMc(业务员)、JhFs(交货方式)、Bz(币种)、FkFs(付款方式),这些字段在数据库表中当前不存在,可能尚未通过DDL同步。

TbXsDdMx 订单明细表(24字段,2658条记录)

字段 类型 说明
XsDdMxId int PK 明细ID(全链路追溯核心字段)
DjId int 关联订单头TbXsDd.DjId
Djh varchar(50) 单据号(冗余)
ItemId int 行号
KhDdh varchar(50) 客户订单号(行级可不同于单头)
MjBh varchar(50) 模具编号
CpId int 产品ID(关联TbCp)
CpBh varchar(50) 产品编号(冗余)
Sl float 数量(千件)
Price float 单价
Je float 金额(= Sl × Price)
JhRq datetime 计划交货日期
JhRqA datetime 实际交货日期
GysIdZg int 锻造供应商ID
GysMc varchar(50) 供应商名称(冗余)
Memo varchar(500) 备注
TagClose bit 关闭标记(已关闭不可删改)
TagCloseGc bit 钢材关闭标记
TagWc bit 完成标记
Bz varchar(50) 币种
ZDs float 总吨数
ZXs float 总箱数
ZTp float 总托盘数
BzId int 包装方案ID(关联TbBz.Id)

13.4 订单业务逻辑

单据编号规则: XD + 日期(yyyyMMdd) + 当日序号(001起)

新建流程:

  1. 选择客户(ComboBox1→TbKh)、制单人(ComboBox2→TbFkUser)
  2. 填写合同号(Hth)、客户订单号(KhDdh)
  3. 在明细Grid中添加产品行:选产品、填数量/单价/模具编号/交货日期/包装方案
  4. Je = Sl × Price 自动计算
  5. 保存:先INSERT/UPDATE TbXsDd头,再同步TbXsDdMx明细

保存策略(临时表模式):

  • 编辑时使用全局临时表(##XsDd_用户ID_时间戳)暂存明细
  • 保存时对比临时表与TbXsDdMx,执行差异同步:
    • 新增行 → INSERT TbXsDdMx
    • 已有行 → UPDATE(按CpId+XsDdMxId匹配)
    • 临时表中无但数据库有 → DELETE

删除订单: 级联删除 TbBzMx(包装明细) → TbXsDdMx → TbXsDd

权限控制:

  • 需要 Permission.Add 或 Permission.Update 权限
  • 非管理员不可编辑他人单据(MakerId≠当前用户时检查TagGly)
  • 需要 QxSw(商务权限) 才能删除

订单关闭(frmXsDdMxClose):

  • TagClose=1 → 订单行关闭,不可删除/修改
  • TagCloseGc=1 → 钢材采购关闭
  • TagWc=1 → 完成标记

包装计算(保存时自动触发):

  • 根据BzId关联TbBz获取包装参数(QjPT/XsPT/DPXs等)
  • 计算托盘数(TS)、零头(Odd)
  • 生成TbBzMx包装明细记录
  • 联动TbBzBom计算包装辅料需求

13.5 订单与下游追溯关系

TbXsDd (订单头)
  └── TbXsDdMx (订单明细, XsDdMxId为追溯起点)
        ├── TbFkPc (排产单, XsDdMxId关联)
        │     └── TbFKGY (工序流转)
        ├── TbGcSqMx (钢材采购明细, XsDdMxId关联)
        ├── TbBzMx (包装明细, XsDdMxId关联)
        ├── TbCkTzMx (出库通知明细, XsDdMxId关联)
        └── TbWxChMx (外协发出明细, XsDdMxId关联)

十四、BI报表模块 (Tag=15)

窗体 功能
frmBICl BI-材料分析(钢材成本、用量统计)
frmBIZl BI-质量分析(不合格率、检验统计)
frmBIKj2/3 BI看板

十五、系统管理(Backstage)

窗体 功能
frmLoginC 用户登录/切换 TbFkUser
frmPermission 权限管理 TbPermission
frmRole 角色管理 TbRole
frmUserRole 用户角色分配 TbRolePermission(Rid,Pid,State)
frmMessageCenter 消息中心 TbMsg
frmGwList 岗位管理 TbGw
frmQueDate 通用日期查询