bom树形结构表设计_按树型显示BOM的结构

bom树形结构设计_按树型显⽰BOM的结构
在制造企业中,⽣产的每⼀个产品都由⼀道或多道⼯序组成,在组成成品之前,每⼀道⼯序经由物料--物料组成半成品,或物料--半成品组成新的半成品,亦或由半成品--半成品组成新的半成品。复杂的成品经由多道⼯序最终形成。在这⼀过程中,某⼀物料或半成品可能出现在多道⼯序这中。⽽每⼀道⼯序⼜涉及损耗(包括调机损耗和加⼯损耗等)等⼀系列问题都是需要在实际的⽣产系统中考虑到。在从事ERP与MES开发多年,⽬前系统设计的结构已满⾜了这些⽅⽅⾯的要求。今天,趁着闲暇的时候记录⼀下,⼀来是⾃⼰对整个结构做⼀个回顾,另⼀⽅⾯也希望给新⼈⼀丁点启发。
⾸先,我们的BOM结构主要分为三层。其基本表是 Bom, BomDTL, BomDTL2
其各表的关键字如下图:
Ancestor --产品型号(当前⼯序完成后的型号),Ver--版本
SpecNum -- ⽣产规格
ProVer  -- 当前⼯序所需的型号(物料或半成品), ProVer 版本
其对应在画⾯中的体现,如下图。
⽽⼜把其中的半成品,第三层中的BA***, 放到产品型号中去查询。得出下图
如此往复,直到达到最初的⼀道⼯序为⽌。
⽽做为技术或⽣产来说,做录⼊完资料之后,其是⾮常需要⼀个报表或者图形来直观反映所输的内容是否正确。打印以上设计卡,得出相应的报表结构。
看最后的两道⼯序,与之前画⾯中的匹配。
现在我们要实现以上层层嵌套的的树状结构。贴出效果图和关键代码。
下图中红⾊的⽅框的数据是在实际的⽣产过程中,同⼀个型号有可能多个颜⾊。⽽这个颜⾊的这部分BOM是可由系统⾃动产⽣。
下⾯是关键的代码。
private void btnSearch_Click(objectsender, EventArgs e)
{if (txtDrawFrom.Text == "" && txtDrawTo.Text == "")
{
MessageBox.Show("请输⼊设计卡查询条件", "信息提⽰", MessageBoxButtons.OK, MessageBoxIcon.Information);return;
}string strSQL = String.Format("exec frmBomMap_List '{0}','{1}'", txtDrawFrom.Text,
txtDrawTo.Text);View1.Nodes.Clear();//先清空
this.listView1.Items.Clear();//先清空
try{
datasource= W1.DS(strSQL, "Sys");
TreeNode node= new TreeNode() { Text = "Root", ToolTipText = "Root"};View1.Nodes.Add(node);
node.ImageIndex= 2;
node.SelectedImageIndex= 2;
C_BomOP.CreateTreeViewRecursive(treeView1.Nodes[0].Nodes, datasource.Tables[0], "Root", "Root", -1);//第⼀个节点
下//treeView1不展开,listView清空数据
}catch(Exception ex)
{//throw new Exception(ex.Message);//MessageBox.Show( ex.Message, "信息提⽰", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}public void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSourse, string parentId, string topAncestor,intlevel)
{string topmodel = "";string filter = string.Format("Ancestor='{0}'and ( Ancestor='Root' or TOPLEVEL='{1}') and BOMLEVEL = {2}", parentId, topAncestor, level); //AND ( ProType='03' or ProType='02')//查询⼦节点
DataRow[] drArr =dataSourse.Select(filter);
level++; //需放到外层来。不然并⾏的⼀道⼯序就会导致相加了。以致结果不正确,这⾥要特别留意⼀下
TreeNode node;foreach (DataRow dr indrArr)
{
node= newTreeNode();三权分立的弊端
nodes.Add(node);
node.Text= (string)dr["ProNum"];
node.ToolTipText= String.Format("{0}\n{1}", (string)dr["TOPLEVEL"], level);
topmodel= (string)dr["TOPLEVEL"];//递归创建⼦节点
CreateTreeViewRecursive(node.Nodes, dataSourse, dr["ProNum"].ToString(),topmodel,level);
}
}
View Code
ALTER PROCEDURE [dbo].[frmBomMap_List]
@sknum1 VARCHAR(50),@sknum2 VARCHAR(50)AS
CREATE TABLE #TEMP(TOPLEVELVARCHAR(50) COLLATE Chinese_PRC_BIN,
骷髅党
AncestorVARCHAR(50) COLLATE Chinese_PRC_BIN,
ProNumVARCHAR(50) COLLATE Chinese_PRC_BIN,[SETS] INT,
QTYFLOAT,
BOMLEVELINT)SELECT TOPLEVEL=Ancestor,Ancestor='Root',ProNum=Ancestor,Ver INTO #t1 FROMdbo.BomWHERE DrawNum between @sknum1 AND @sknum2
AND IsEffect=1 --AND IsOrigin=1 -- ⾮原型也要取
IF (SELECT COUNT(1) FROM #t1) >200绵阳廖明
BEGIN
RAISERROR('数据过多,请缩⼩设计卡的范围',11,-1)RETURN
END
SELECT * INTO #t2 FROM#t1declare @ancestor varchar(50),@version VARCHAR(5)while (select count(*) from #t1)>0
BEGIN协议分析仪
select TOP 1 @ancestor=TOPLEVEL,@version=Ver FROM#t1delete #t1 where TOPLEVEL=@ancestor AND
Ver=@version;WITH BOMList(TOPLEVEL, Ancestor, ProNum,[SETS], QTY,BOMLEVEL) AS(SELECT TOPLEVEL=Ancestor, Ancestor,ProNum,Sets, Qty AS QTY, 0 AS BOMLEVEL --Sets*Qty AS QTY
酒店营销太污FROMdbo.BomDTL2WHERE Ancestor=@ancestor AND Ver=@version
UNION ALL
服务质量SELECT TOPLEVEL, B2.Ancestor, B2.ProNum, B2.Sets,B2.Qty AS QTY,BOMLEVEL + 1
FROMBomDTL2 B2, BOMList BBWHERE B2.Ancestor=BB.ProNum
)INSERT #TEMP
SELECT TOPLEVEL, Ancestor, ProNum,[SETS],QTY,BOMLEVELFROMBOMListEND
-
-delete #TEMP where ProNum in (select Ancestor from #TEMP)
SELECT DISTINCT #TEMP.*,p.ProType FROM #TEMP,dbo.Product pWHERE #TEMP.ProNum =p.ProNumUNION ALL SELECT TOPLEVEL,Ancestor,ProNum,1,1,-1,'02' FROM #t2 --02是成品
ORDER BY TOPLEVEL ASC,BOMLEVEL ASC,ProType DESC,ProNum ASC
DROP TABLE #t1,#t2,#TEMP
View Code

本文发布于:2024-09-22 11:18:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/453193.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:结构   设计   半成品
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议