關于BOM,多級樹形的!給足100分(100分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间
我还是有点搞不清楚,请大家继续发表意见
 
仔细看看如下做法吧(不是我设计的):
/*

<01 3> cpjg: 产品组成结构数据表(树状层次结构)

wlPID, wlID在本表中构成一联合单值约束,即每一单独的wlID可以有(或对应于)多个不同的wlPID
(双亲件),但不允许有多个相同的wlID属于同一个wlPID。

wlID的层次码idLEvel说明其在产品结构树中所处的当前位置。idlevel<>0的同一个wlID可以在整个产
品结构树中多次出现但应满足上面所提到过的约束条件。

当wlID的层次码idLevel=0时,该wlID一般来说是一个单独的产品或产品系列,这时,其上级物料代码
wlPID为空值。

当wlID的idLevel=0时,该wlID也可以代表一个单独的通用产品组成部件(组件),这时,其wlPID为
空值。实际应用中,该组件通常作为可选组件被插入到产品树的适当位置。为避免歧义,建议不采用这
种处理方式。

本表设计特点为:
如果某wlID不是叶而是一个节点(子树),则其整体子树结构在本表中只需完整的输入一次,其它
用到该节点(子树)的地方只需要将其挂上即可。因此,生成某结点(子树)的物料清单BOM1时,层次
idLevel不应该成为一个选择条件或选择因素,亦即:BOM1的生成过程与idLevel无关。

注:BOM1为该产品的最终出产装配总需求清单,BOM1也可以是某主生产计划中各相关需求和独立需求的
最后汇总计算结果,称为MPS毛需求BOM。

数量计量数据类型定义为decimal(18, 6)是为了适应化工行业的数值计量需求而专门设置,最终的数据
显示格式由软件的用户界面设定之。

标记F0用来指示物料的被选择情况,'y'选用,'n'不选用。
注意,如果需要去掉当前树中的某子树,只需要将该子树的根结点标记为'n'即可,该子树的下属各节点
和叶不需要逐个标记。一旦某子树的根节点被标记为'n',在其后的BOM1生成过程中,会自动排除组成该
子树的所有成员。

又及,产品A和产品B的组成结构均含有某子树G,G是一个可供选择订货的部件。根据用户的订单要求产品
A选用G部件,产品B不选用G部件:您应该,分别生成BOM1(A)和BOM1(B)。在产生BOM1(B)前,将G
部件的选用属性设置为'n',再运行生成程序。视需要可以合并BOM(A)和BOM(B)。

*/
if exists (select * from sysobjects
where id = object_id(N'[dbo].[cpjg]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[cpjg]
GO

CREATE TABLE [dbo].[cpjg] (
[dSN] [int] IDENTITY (1, 1) NOT NULL , --单值索引,刷新后定位使用。
[wlPID] [varchar] (30) NULL , --物料所属的双亲件代码
[wlID] [varchar] (30) NOT NULL , --物料代码
[idLevel] [int] NULL , --物料所在层次(只有零级需要指定,必须输入之)
[sl1] [decimal](18, 6) NULL , --规格1数量(共十六种规格)
[sl2] [decimal](18, 6) NULL , --…………
[sl3] [decimal](18, 6) NULL ,
[sl4] [decimal](18, 6) NULL ,
[sl5] [decimal](18, 6) NULL ,
[sl6] [decimal](18, 6) NULL ,
[sl7] [decimal](18, 6) NULL ,
[sl8] [decimal](18, 6) NULL ,
[sl9] [decimal](18, 6) NULL ,
[sl10] [decimal](18, 6) NULL ,
[sl11] [decimal](18, 6) NULL ,
[sl12] [decimal](18, 6) NULL ,
[sl13] [decimal](18, 6) NULL ,
[sl14] [decimal](18, 6) NULL ,
[sl15] [decimal](18, 6) NULL , --…………
[sl16] [decimal](18, 6) NULL , --规格16数量
[F0] [varchar](2) NULL --物料选用标记('y' or 'n')
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[cpjg] WITH NOCHECK ADD
CONSTRAINT [DF_cpjg_sl1] DEFAULT (0) FOR [sl1],
CONSTRAINT [DF_cpjg_sl2] DEFAULT (0) FOR [sl2],
CONSTRAINT [DF_cpjg_sl3] DEFAULT (0) FOR [sl3],
CONSTRAINT [DF_cpjg_sl4] DEFAULT (0) FOR [sl4],
CONSTRAINT [DF_cpjg_sl5] DEFAULT (0) FOR [sl5],
CONSTRAINT [DF_cpjg_sl6] DEFAULT (0) FOR [sl6],
CONSTRAINT [DF_cpjg_sl7] DEFAULT (0) FOR [sl7],
CONSTRAINT [DF_cpjg_sl8] DEFAULT (0) FOR [sl8],
CONSTRAINT [DF_cpjg_sl9] DEFAULT (0) FOR [sl9],
CONSTRAINT [DF_cpjg_sl10] DEFAULT (0) FOR [sl10],
CONSTRAINT [DF_cpjg_sl11] DEFAULT (0) FOR [sl11],
CONSTRAINT [DF_cpjg_sl12] DEFAULT (0) FOR [sl12],
CONSTRAINT [DF_cpjg_sl13] DEFAULT (0) FOR [sl13],
CONSTRAINT [DF_cpjg_sl14] DEFAULT (0) FOR [sl14],
CONSTRAINT [DF_cpjg_sl15] DEFAULT (0) FOR [sl15],
CONSTRAINT [DF_cpjg_sl16] DEFAULT (0) FOR [sl16],
CONSTRAINT [DF_cpjg_F0] DEFAULT ('y') FOR [F0]
GO

--insert into cpjg (wlID,idLevel, sl1) values ('M1', 0, 1) --初始化表
--aGO

CREATE UNIQUE INDEX [IX_cpjg] ON [dbo].[cpjg]([wlPID], [wlID]) ON [PRIMARY]
GO
CREATE UNIQUE INDEX [IX_cpjg_1] ON [dbo].[cpjg]([dSN]) ON [PRIMARY]
GO

GRANT REFERENCES , SELECT , UPDATE , INSERT , DELETE ON [dbo].[cpjg] TO [etdbusers]
GO
 
看看我写的系统,里面有对Tree的维护方案,BOM的维护方案也快出来了,你问的问题太大,真的没有时间好好回答,抱歉
 
郭玉粮先生:

我在DFW上看到好多你关于BOM的贴子,你能不能将你的思路给我们大家作一个总结,我再整理一下放到DFW上给大家作一个参考.另外,你叫我看你的ERP,但是你放在那?

最好是有数据表结构和源码,以及注释.
 
黑子:

你说说你做BOM的方法吧.迟点我发个我做的例子给你.
 
我以前是用的三個數據表,在VFP下采用local databse來完成的,一個表存放產品,一個表存放半成品,一個表存放原料,采用一對多的關系.現在看來這是全完錯誤的,但是這是我2000年那時就這樣搞的,那里能懂DELHI的好像沒有聽說有多少,在我的映像中是2001年才聽說DELPHI的.當然,作為一個制造業的程序員,能有多少的視聽空間呢?
 
到現在為此,這100分還沒有送出去,我們可以繼續討論關于BOM的的做法以及在樹形里是怎樣實現的?
 
我的做法是:
1.三个表的做法:
一个表存放物品资料(產品,半成品,原料),一个BOM主表,一个BOM明细表(这两个表是一对多的关系).
2.两个表的做法:
物品资料表就是主表.再一个明细表,也是一对多的关系.

我本来想做个例子给你看的.现在在这里说算了.
假如有如下记录:
物品资料表(主要字段)
WareID,name .....
1 a
2 b
3 c
4 d
5 e
6 f
P1 aa
P2 bb
P3 cc
BOM主表(主要字段)
ProductID name
P1 aa
P2 bb
P3 cc
BOM明细表(主要字段)
ProductID wareID
P1 1
P1 2
P1 3
P2 P1
P2 4
P2 3
P2 5
P3 P2
P3 4
P3 5
P6 6

这样就可以对明细表里的资料用递归的方式展开了,展开后就是树形结构了(这在表里是多棵树,即一个物料一棵树),这样也符合你所说的原料也可以销售(但它是一棵没有枝的树.)

看到这三个表的结构,就可以把中间的表取消,用第一个表来代替.

我的这个思路完全符合:
物料清单(Bill of Material;BOM),描述产品零件、半成品和成品之间的关系。


不知道明不明?还要不要做DEMO???
 
這種結構我知道,在DFW上看的貼子也是這樣講的,最好能給個DEMO,我在DELPHI里里寫樹形代碼不怎麼會,另外,TdxDBTreeView我總覺得沒有自己 寫的代碼來控制好!
 
你加我QQ,明天抽个时间发给你.

16970995
 
我已加了你,但是你不在線上,
這樣嗎,我還給你我的郵件吧!
chinalx8028@163.com
期望同你一起共同討倫BOM的做法!
 
各位.分已散尽,问题依旧,
版主呀!你是不是不再管DFW的生存和发展了!
 
各位.分已散尽,问题依旧,
版主呀!你是不是不再管DFW的生存和发展了!

君不见黄河之水天际流,奔流到海不复回,
君不见高堂明镜悲白发,朝如青丝暮成霜!
 
各位.分已散尽,问题依旧,
版主呀!你是不是不再管DFW的生存和发展了!

君不见黄河之水天际流,奔流到海不复回,
君不见高堂明镜悲白发,朝如青丝暮成霜!

 
其实这不关版主的事,
我想我已经说得够明白的了.
展开的时候用临时表就行了.QQ里有加你,但没看到你上线呀,我的QQ里人太多,不知你是哪位.
 
后退
顶部