劝你先了解一下ERP的原理吧。

解决方案 »

  1.   

    uguess(uguess) 你有建过类似的表吗?能否贴出来看看。谢谢!
      

  2.   

    这种问题很好解决啊。
    有两种做法。
    一、分为三类,成品,半成品,零件。
    这种我想不用解释了吧。
    二、分为两类,成品,零件。
    比如电脑是成品,显示器,主板,CPU等是零件。
    然后显示器是成品,显像管,机壳等是零件。
    还有种做法是电脑是成品,直接用最底层的作为零件。
      

  3.   

    只需要1张表,表内其它不说了,主要需要2个标志子段
    1:标志是否可拆解
    2:标志拆解的方式,需要字符串类型,
       每个零件(或成品)需要有一个唯一的ID号,将ID号与组成数量连接起来
       ID号后用‘;’连接数量,用‘,’连接不同的ID号
    这样不知道是否可以?
      

  4.   

    贴个有关BOM的资料:                                    (来源:www.amteam.org)HTTP://www.amteam.org/a_erp_mrpii/b_erpmrpii_articles/bom_structure_0612.htm                                BOM的构造方法by AMT 余宏亮 物料清单BOM是运行MRP三个基本输入信息之一,根据产品的特性进行不同的构造可以减少基础数据准备实施工作量,提高物料分解算法的速度。本文详细分析几中BOM的构造方法,以供同行参考。一、常规方法在传统的MRP软件中,BOM是采用网状的结构存储数据的,因此可能出现一个父项编号下面有很多个子项编号,一个子项编号同时属于不同的父项编号的情况。其数据结构为:父项编号,子项编号,结构数量,低层码。软件可以通过项目缩进的方式表示物料间的层次关系。优点:1)适应性好,存储数据量小。2)便于进行物料分解和材料汇总。缺点:1)需编制大量程序实现直观显示产品构成。2)不便于进行反查零件适合产品的情况。二、树型结构方法在MRP软件中,特别是在WINDOWS平台下的MRP软件,一般BOM采用树型结构进行构造,其数据结构为:Treekey,Parent,物资编码,结构数量,分解标志。其中Treekey标识节点号,Parent标识父节点号。优点:1)利用WINDOWS平台的TreeView控件可以实现节点的添、删、复制等操作。2)界面构造美观、直观易懂,用户操作简单。3)适应单件小批量生产方式下产品BOM的构造。缺点:1)对于多系列多产品的情况,数据量会急剧膨胀。2)不便于进行反查零件适合产品的情况。3)物料分解算法编制比较复杂,处理不当效率会很低。三、标志位方法此方法适合多系列多产品的情况,每一种不同的零件都要标识出它适合的系列和产品型号,采用在相应型号标志位置位的方法。例如:某机车厂有17个产品系列,每个系列大约有20~25个不同型号的产品,每个产品有80~90个零件,采用Treekey,Parent构造BOM,其记录条数大约为17*20*80=27,200,其数据量非常巨大。编辑,修改,计算BOM可能效率很低。采用标志位方法按每个系列构造BOM可能可以解决问题:每个系列零件数大约在150~200条,其总记录数大约在2550条。1)构造方法:·BOM表结构:物资编码,结构数量,所属系列,适应型号,物资类别注释:在物资适应该系列的某型号时,其标志位置1物资类别分为:产成品,自制件,外购件,外协件·MARK表结构:系列编号,物资编码,码位注释: 此处存放各产成品对应的型号标志位。2)物料分解算法取出MPS中的一条记录,查询BOM.dbf,若该物资为产成品,查询MARK.dbf,取出系列编号-->xlbh,码位-->mw,取出BOM.dbf中所属系列=xlbh,适应型号中mw=1的记录。MPS中产成品需求数量*BOM中的结构数量既为零件毛需求量。此算法不用递归,一个简单的SELECT语句即可,效率高。优点:1)适合多系列多产品的情况,基础数据可按系列整理,实施工作量小。2)物料分解算法效率高,速度快。3)便于进行反查零件适合的系列和型号。缺点:1)要求BOM只有一层,系列为根,该系列下的零件为叶子,适应性受限制。2)不能以直观的方式显示每个产品的组成。四、模块化BOM构造模块化BOM主要应用于多系列多产品情况。该产品由基本件、特征件、可选件组成,其中特征件有多种(必选一种)因此可构成不同的产品。例如:卡车生产厂,有10种发动机,2种栏板,4种底盘,30种颜色,便可形成10*2*4*30=2400种产品,如果按产品结构存储,就要存入2400种结构,并使MRP物料分解很复杂。采用模块化BOM构造,去掉产品层,以部件层做为最终状态,其结构只有:10+2+4+30种。其数据量会大大减少。BOM表数据结构为:父项编号,子项编号,选件号,结构数量,预测比率注释:选件号表示:基本件、特征件序号,可选件MRP物料分解基本算法:根据MPS种产品需求数量,分解为各基本件和特征件的数量(需求数量*结构数量*预测比率)。
      

  5.   

    通过编号建立一定的拓朴结构试一试
    电脑---------0001
    显示器-------0001,0001
    主机---------0001,0002
    主板---------0001,0002,0001
    CPU----------0001,0002,0002
    显像管-------0001,0001,0001
    通过这种方式对数据进行拓朴的分析,方法实现起来应该不会太难!以上方法是提供一个想路给你参考一下,你要根据具体情况自己决定!
      

  6.   

    又得一贴:                                        (资料来源:www.ccw.com.cn)http://www2.ccw.com.cn/tips/9912/121601_11.asp                         用TreeView 控件构造BOM 
    李宏 徐利红 
    [请作者提供详细的邮政地址给我们] 
    ---- TreeView 是VB 中的一个控件,位于MSCOMCTL32。OCX 文件中,用于显示 Node 对象的等级体系结构,适合于表达具有层次结构的信息,如磁盘上的文件和目录、公司结构图等。 ---- BOM 是Bill of Material 的缩写,称为材料清单,是MRP II的几个基本文件之一,它将一个产品层层分解,直至最底层的外购零件,具有良好的层次结构.例如电脑整机,对其生产商而言,首先可将其分解为显示器、主机、键盘、鼠标、电源线等,主机又可分解为机箱、主机板、CPU、内存、显示卡、软驱、光驱等几部分。如何将这种结构清晰地表达出来,对于产生、维护BOM 有重大的帮助。从前面对TreeView的介绍可以看出, 它用于此是合适的。 ---- 下面举例说明如何通过拖动由零件料号直接在TreeView中构造BOM。 ---- 本例中主要使用一个List 控件、一个Label 控件和一个TreeView 控件。List控件中有建立此BOM 所需的料号。TreeView 控件用于显示构造的BOM,最初为空,Label 控件用于拖动过程,表示所选的料号。本例通过将List控件中的料号拖到TreeView 中建立BOM。其主要代码如下。图中用向右指的箭头表示当前正在增加子件的料号,TreeView 中料号后的X1 表示其单位用量为1。 ---- ‘以下二窗体变量用于确定拖动的来源, 保证在TreeView1 内的拖动无效 Dim bool_ListDrag As Boolean ‘
    Dim bool_TreeDrag As BooleanPrivate Sub Form_Load()
    ‘产生ListBox 中的内容
    For i = 0 To 25
        List1.AddItem Chr(65 + i) & Chr(65 + i)
    Next i ‘
    初始化设置
    bool_ListDrag = False
    bool_TreeDrag = False
    End SubPrivate Sub Form_MouseUp(Button As Integer, 
    Shift As Integer, X As Single, Y As Single)
        bool_ListDrag = False
        
    End Sub‘在List1 中选取要拖动的料号
    Private Sub List1_MouseDown(Button As Integer, 
    Shift As Integer, X As Single, Y As Single)
    Dim DY   
    DY = TextHeight("A")   ' 获得列表框中一行的高度
    Label1.Move List1.Left, List1.Top + Y - DY / 2,
     List1.Width, DY
    Label1.Drag   ' 实际拖动的是Label1 
    bool_ListDrag = True
    End Sub‘将拖动的料号放在TreeView 对应的动作
    Private Sub TreeView1_DragDrop(Source As Control,
     X As Single, Y As Single)
      Dim oNodex As Node
      Dim skey As String
      Dim iIndex As Integer
      On Error GoTo myerr
    ‘只接受来自List1 的拖动
      If bool_TreeDrag = True Then
            bool_TreeDrag = False
            Exit Sub
      End If
      If  bool_ListDrag = True Then
      ‘取得一个键值
        skey = GetNextKey() ‘为新增节点产生键值 
    '如TreeView1中有料号被选中,则新拖入的料号为其子件,
    '否则本句出错程序至myerr 处,新拖入
    的料号加在同一阶的最后iIndex = TreeView1.SelectedItem.Index
        skey = GetNextKey() ' 为新增节点产生键值
    Set oNodex = TreeView1.Nodes.Add(iIndex,
     tvwChild,
     skey, List1.Text & " X1", 2, 1) ’新增节点
        oNodex.EnsureVisible '确保新增节点可见
        Exit Sub
    myerr:
    TreeView1.Nodes.Add , tvwLast, skey,
     List1.Text 
    & " X1", 2, 1   ’新增节点加在最后
      End If
      
    End Sub‘为新增节点产生一个键值,其初始值为1_,
     以后的值依次加1
    Private Function GetNextKey() As String
        Dim sNewKey As String
        Dim iHold As Integer
        Dim i As Integer
        On Error GoTo myerr
        iHold = Val(TreeView1.Nodes(1).Key)
        For i = 1 To TreeView1.Nodes.Count
            If Val(TreeView1.Nodes(i).Key) > iHold Then
                iHold = Val(TreeView1.Nodes(i).Key)
            End If
        Next
        iHold = iHold + 1
        sNewKey = CStr(iHold) & "_"
    GetNextKey = sNewKey 
    Exit Function
    myerr:
        '当TreeView 为空时,返回值为1_
        GetNextKey = "1_"
        Exit Function
    End Function‘在TreeView 中按下鼠标键时对应的动作
    Private Sub TreeView1_MouseDown(Button As Integer, 
    Shift As Integer, X As Single, Y As Single)
     ‘左键选择料号  
    If Button = vbLeftButton Then
            Set TreeView1.DropHighlight
     = TreeView1.HitTest(X, Y)
            If Not TreeView1.DropHighlight Is Nothing Then
                TreeView1.SelectedItem 
    = TreeView1.HitTest(X, Y)
            End If
            Set TreeView1.DropHighlight = Nothing
            bool_TreeDrag = True
        End If
        
    End Sub---- 以上程序使用VB6.0编写,在pentium 166 机器上通过。 
    ---- 本文仅涉及了BOM 构造的手段,在实际构造中还有许多问题要考虑,如单位用量的输入、错误的修正、结果的存储,在这里不一并给出。 
      

  7.   

    这个问题比较容易解决,向楼上的那位大哥表示敬意。可把你给累坏了。贴了那么多。。我介绍一种比较简单、可行的方法。实现产品bom需要将数据结构都存在同一个表里。至于成品和半成品还有零件等都可以记录的,只需要加一个表示的字段,后者在项目代码中区分。当然了,有的人喜欢复杂的东西,非要用100个表,我也没有办法。qq=36427706
      

  8.   

    如果还不明白的话,email to me 
    [email protected]
    我是做ERP的