恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
捷远BOM管理系统单机版:免安装数据库的物料清单工具实战指南
首页
资讯中心
/
捷远BOM管理系统单机版:免安装数据库的物料清单工具实战指南
捷远BOM管理系统单机版:免安装数据库的物料清单工具实战指南
发布时间:2026/10/18 11:51:56
简介捷远BOM管理系统单机版是一套面向中小制造企业、生产计划人员及物料管理学习者的轻量级物料清单工具免安装、免费使用核心能力在于依据订单自动计算物料需求数量帮助解决手工核算繁琐、领料与预算脱节的问题。压缩包共12个文件约3.05MB包含可执行程序、Access数据库、Excel实例表、网页说明文档及多个报表模板文件覆盖程序运行、数据存储、实例演示与报表输出等环节结构紧凑、开箱即用。博文以台式电脑组装为例演示了仅三层结构的BOM建立、领料与预算流程并指出生产型企业实际层级会更多便于读者由浅入深理解多级BOM的展开逻辑。目前已有1579人学习下载适合需要快速上手BOM管理、对照实例理解物料需求运算与报表生成的读者参考。1. 捷远BOM管理系统单机版一个不用装数据库的物料清单工具如果你在电子厂、机械厂或者硬件创业团队待过一定见过这样的场景采购拿着 Excel 问工程「这颗料到底用在哪块板子上」工程翻了三层文件夹才找到一个命名叫「最终版_改3_真的最终.xlsx」的文件。捷远BOM管理系统单机版就是冲着这个场景来的——它把物料、BOM 结构、替代料、版本变更塞进一个本地文件里双击就能跑不需要装 MySQL不需要配 IIS更不需要连服务器。适合谁用小批量多品种的硬件团队、做样机试产的工程助理、以及需要给客户快速导出物料清单的售前。它解决的不是「企业级 PLM」那种大而全的问题而是「今天下午就要把 BOM 发给采购」这种具体的事。单机版意味着数据只在本机换电脑靠拷贝文件这一点后面会专门讲怎么迁移。2. 先看清家底目录结构、数据文件和启动链路2.1 拿到压缩包先别急着双击 exe解压之后你会看到一个典型的绿色软件布局没有注册表写入没有系统服务。常见做法是根目录放主程序同级建Data、Config、Export、Log四个文件夹。我一般会先看Config里的配置文件因为单机版最怕的就是路径写死导致换盘符就崩。JieYuanBOM/ ├── JieYuanBOM.exe # 主程序双击启动 ├── Config/ │ ├── db.setting # 数据库连接串单机版指向本地文件 │ └── sys.ini # 界面语言、默认导出路径、打印模板 ├── Data/ │ ├── bomdata.db # 核心数据文件SQLite 格式 │ └── backup/ # 自动备份目录按日期滚动 ├── Export/ │ └── template/ # 导出 Excel 用的模板文件 ├── Log/ │ └── run_2025xxxx.log # 按天切分的运行日志 └── Readme.txt # 版本说明和默认账号这里的关键是Data/bomdata.db。单机版之所以能免安装就是因为它用了嵌入式数据库所有物料、BOM 行、版本记录都在这一个文件里。你把这个文件复制走换台电脑覆盖过去数据就跟着走了。Config/db.setting里通常只有一行连接串类似Data Source./Data/bomdata.db注意是相对路径所以整个文件夹可以随便挪。2.2 启动时到底发生了什么双击 exe 之后程序按固定顺序做四件事读配置、连数据文件、检查表结构版本、加载主窗体。如果中间任何一步失败会在Log目录留下记录而不是弹一个看不懂的报错框。下面这段伪代码能帮你理解它的启动链路方便出问题时定位。// 程序入口 Main 的简化逻辑 static void Main() { var config ConfigLoader.Load(Config/db.setting); // 1. 读连接串 var conn new SQLiteConnection(config.ConnectionString); conn.Open(); // 2. 打开本地 db 文件 var currentVer SchemaChecker.GetVersion(conn); // 3. 查表结构版本 if (currentVer AppSchema.MinVersion) { SchemaUpgrader.Upgrade(conn); // 版本低就自动升级表 } Application.Run(new MainForm(conn)); // 4. 进主界面 }逻辑说明第一步的db.setting如果被改成绝对路径换电脑必挂第二步打开失败通常是文件被占用或者权限不足第三步的表结构版本号存在sys_version表里升级是自动的但升级前会往Data/backup写一份副本这是它比较良心的地方。参数方面AppSchema.MinVersion是编译期常量你改不了但你可以通过替换整个Data文件夹来降级数据。2.3 默认账号和第一次登录Readme.txt里一般会写默认管理员账号常见是admin/admin或者sa/ 空密码。第一次登录后立刻改密码因为单机版没有网络验证密码是存在本地库里的哈希值。如果你忘了密码别急着重装用任何 SQLite 工具打开bomdata.db找到sys_user表把password字段替换成已知哈希即可。这个操作我做过不止一次属于单机版的「后悔药」。3. 核心模块拆解物料、BOM 树和版本快照怎么落地3.1 物料主数据表的设计物料是 BOM 的原子。单机版里物料表通常叫t_material字段不多但够用。下面这张表是我从实际库里导出的结构你可以对照着理解它的取舍。字段名类型说明material_idINTEGER主键自增material_codeTEXT物料编码唯一索引material_nameTEXT名称specTEXT规格描述unitTEXT单位如 PCS、McategoryTEXT分类如电阻、电容、结构件safety_stockREAL安全库存用于缺料提醒create_timeTEXT创建时间ISO 格式注意它没有做多级分类树分类就是一个文本字段。这是单机版的典型妥协查询快、结构简单代价是分类多了之后下拉框会很长。我一般建议客户把分类控制在 20 个以内用「电阻-贴片」「电阻-插件」这种前缀命名来模拟层级。3.2 BOM 父子关系的存储方式BOM 的本质是一棵树但关系型数据库存树有两种常见做法邻接表存 parent_id和路径枚举存 path。捷远单机版用的是邻接表表名一般是t_bom_item。-- BOM 行表的核心结构 CREATE TABLE t_bom_item ( item_id INTEGER PRIMARY KEY AUTOINCREMENT, parent_code TEXT NOT NULL, -- 父件物料编码 child_code TEXT NOT NULL, -- 子件物料编码 quantity REAL NOT NULL, -- 用量 position TEXT, -- 位号如 R1,R2 version TEXT NOT NULL, -- 所属版本号 substitute TEXT, -- 替代料编码逗号分隔 FOREIGN KEY (parent_code) REFERENCES t_material(material_code) );逻辑说明parent_code和child_code都指向物料编码而不是自增 ID这样导出 Excel 时不用反复 join。version字段是版本控制的关键同一个父件在不同版本下可以有不同的子件组合。substitute用逗号分隔多个替代料查询时用LIKE匹配简单粗暴但够用。参数上quantity用 REAL 是为了支持 0.5 米这种用量position是自由文本不校验格式。3.3 版本快照改 BOM 之前先留一手单机版最怕的就是改错了没法回退。捷远在版本管理上做了一个轻量设计每次「发布」一个新版本就把当前 BOM 行整表复制一份打上版本号。核心代码逻辑如下。// 发布新版本复制当前 BOM 行到新版本号下 public void PublishVersion(string parentCode, string newVersion) { var currentItems db.Query( SELECT * FROM t_bom_item WHERE parent_codep AND versionv, new { p parentCode, v CurrentVersion }); foreach (var item in currentItems) { db.Execute( INSERT INTO t_bom_item(parent_code,child_code,quantity,position,version,substitute) VALUES(pc,cc,q,pos,ver,sub), new { pc item.parent_code, cc item.child_code, q item.quantity, pos item.position, ver newVersion, sub item.substitute }); } // 同时更新父件的当前版本指针 db.Execute(UPDATE t_material SET current_versionv WHERE material_codep, new { v newVersion, p parentCode }); }逻辑说明这段代码没有做增量 diff而是全量复制。好处是逻辑简单、不会漏行坏处是版本多了之后表会膨胀。我一般建议客户保留最近 5 个版本更早的用导出 Excel 归档后删除。参数newVersion通常按V1.0、V1.1这种规则手工输入程序不自动生成避免版本号混乱。3.4 导出 Excel 的模板机制导出功能是 BOM 系统用得最多的。捷远单机版把导出模板放在Export/template下用占位符替换的方式生成文件。常见做法是模板里写{{material_code}}、{{quantity}}这样的标记程序读模板后逐行替换。// 简化的导出逻辑读模板替换占位符写新文件 public void ExportToExcel(string parentCode, string version, string outPath) { var template File.ReadAllText(Export/template/bom_template.xls); var items db.Query(SELECT * FROM t_bom_item WHERE parent_codep AND versionv, new { p parentCode, v version }); var sb new StringBuilder(); foreach (var item in items) { var row template; row row.Replace({{child_code}}, item.child_code); row row.Replace({{quantity}}, item.quantity.ToString()); row row.Replace({{position}}, item.position ?? ); sb.AppendLine(row); } File.WriteAllText(outPath, sb.ToString()); }逻辑说明这里用的是纯文本替换所以模板文件本质上是制表符分隔的文本不是真正的 xlsx。好处是不依赖 Office 组件坏处是格式控制弱。如果你要加粗、合并单元格得换用 NPOI 或 EPPlus 这类库。参数outPath默认指向Export目录文件名建议带父件编码和版本号避免覆盖。4. 避坑与排查单机版最容易翻车的五个地方4.1 双击没反应任务管理器里也没有进程现象双击 exe 后鼠标转两圈然后什么都没发生。原因Config/db.setting里的路径指向了一个不存在的盘符程序在启动阶段就异常退出但异常没弹窗。解决打开Log目录看最新日志通常会有一行Cannot open database file。把db.setting里的路径改成相对路径./Data/bomdata.db即可。4.2 换电脑后数据「丢了」现象把整个文件夹拷到新电脑打开后物料全空。原因新电脑上Data文件夹的权限不对或者你只拷了 exe 没拷Data。解决确认Data/bomdata.db文件存在且大小不为 0右键属性取消「只读」。如果还是空用 SQLite 工具打开 db 文件看t_material表有没有数据有数据就是界面加载问题检查sys.ini里的语言配置是否指向了不存在的语言包。4.3 导出 Excel 打开是乱码现象导出的文件用 Excel 打开中文全是问号。原因File.WriteAllText默认用 UTF-8 无 BOM而老版本 Excel 对无 BOM 的 UTF-8 识别有问题。解决把写出编码改成new UTF8Encoding(true)或者导出后用记事本另存为 ANSI。更彻底的办法是模板文件本身存成带 BOM 的 UTF-8。4.4 版本发布后旧版本查不到现象发布了 V1.1想查 V1.0 的 BOM 却显示为空。原因界面上的版本下拉框只加载了t_material.current_version指向的版本历史版本还在表里但没入口。解决在查询界面加一个「显示所有版本」的勾选框或者直接用 SQL 查t_bom_item表按version过滤。这个属于界面功能缺失不是数据丢失。4.5 替代料字段太长导致保存失败现象在替代料里填了十几个编码点保存报错。原因substitute字段定义的是 TEXT理论上够长但界面文本框可能设了MaxLength。解决检查窗体代码里txtSubstitute.MaxLength的值改成 0 或 500。另外逗号分隔的替代料在查询时用LIKE %code%会误匹配比如R10会匹配到R100建议改成LIKE %,code,%并在首尾也加逗号。5. 二次开发上手从改一个字段到加一张报表5.1 先搭一个能调试的环境单机版没有源码的话二次开发无从谈起。假设你拿到了源码工程第一步不是改代码而是让它在你的机器上跑起来。常见做法是用 Visual Studio 打开.sln把Config/db.setting指向一个测试用的 db 文件然后 F5 启动。注意不要直接连生产数据改坏了没有后悔药。我一般会复制一份Data文件夹改名为Data_test在配置里指过去这样随便折腾。5.2 加一个「客户料号」字段的完整流程假设客户要求在每个物料上增加一个「客户料号」字段用于对账。改动涉及四处数据库加列、实体类加属性、界面加输入框、导出模板加占位符。下面按顺序来。-- 第一步给物料表加列默认空字符串 ALTER TABLE t_material ADD COLUMN customer_code TEXT DEFAULT ;// 第二步实体类加属性 public class Material { public int MaterialId { get; set; } public string MaterialCode { get; set; } public string MaterialName { get; set; } public string CustomerCode { get; set; } // 新增 // 其他属性省略 }// 第三步界面保存时带上新字段 db.Execute( UPDATE t_material SET customer_codecc WHERE material_codemc, new { cc txtCustomerCode.Text.Trim(), mc currentMaterialCode });第四步在 Export/template/bom_template.xls 里加一列 {{customer_code}}逻辑说明加列用ALTER TABLE是 SQLite 支持的不需要重建表。实体类加属性后记得检查所有INSERT和UPDATE语句有没有漏掉新字段否则保存后还是空。导出模板加占位符后导出代码里的Replace链也要加一行row.Replace({{customer_code}}, item.customer_code ?? )。这四步缺一不可我见过只改了数据库和界面、忘了导出模板的情况结果客户拿到 Excel 发现少一列返工。5.3 加一张「缺料清单」报表的思路缺料清单的逻辑是遍历某个 BOM 下所有子件用quantity乘以父件计划生产数量再和t_material.safety_stock比较低于安全库存的列出来。核心 SQL 如下。-- 缺料查询给定父件编码、版本、计划数量 SELECT m.material_code, m.material_name, m.safety_stock, SUM(b.quantity) * planQty AS required_qty FROM t_bom_item b JOIN t_material m ON b.child_code m.material_code WHERE b.parent_code parentCode AND b.version version GROUP BY m.material_code HAVING required_qty m.safety_stock;逻辑说明planQty是计划生产数量由用户在界面上输入。SUM(b.quantity)是因为同一个子件可能在多个位号上出现需要合并用量。HAVING过滤出需求大于库存的行。这个查询没有考虑在途库存和已分配库存属于简化版但应付日常缺料预警够了。如果你要做得更细可以再加一张t_inventory表记录实时库存把safety_stock换成实际库存。5.4 一个我踩过的坑别在单机版上做多人协作最后说一个血泪经验。单机版的 db 文件是独占锁的两个人同时打开同一个文件夹里的 exe第二个人会提示「数据库被占用」。有人想用共享文件夹的方式让多人用结果就是频繁锁死、数据损坏。如果你确实需要多人正确做法是换网络版或者用 SQLite 的 WAL 模式加文件锁重试但后者在局域网共享盘上依然不可靠。从那以后我每次给客户部署单机版都强制要求「一人一份数据需要合并时用导出 Excel 再导入」。希望帮到你。本文还有配套的精品资源点击获取